dcrd/internal/mining/txpriorityqueue_test.go
Dave Collins fa75c0b7b8
mining: Remove high prio/free tx mining code.
This removes the block template generation code related to
prioritization of low-fee/free transactions.

The following is an overview of the changes:

- Remove logic to select sort method based on the block priority size
  from block template generation
- Remove now unused mining.MinHighPriority constant
- Remove now unused mining.Policy.BlockPrioritySize field
- Remove now unused txPQByStakeAndFeeAndThenPriority func
- Remove tests related to txPQByStakeAndFeeAndThenPriority
2022-09-28 12:49:31 -05:00

79 lines
2.7 KiB
Go

// Copyright (c) 2016 The btcsuite developers
// Copyright (c) 2015-2022 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package mining
import (
"container/heap"
"math/rand"
"testing"
"github.com/decred/dcrd/blockchain/stake/v5"
)
// TestStakeTxFeePrioHeap tests the priority heap including the stake types for
// both transaction fees per KB and transaction priority. It ensures that the
// primary sorting is first by stake type, and then by the priority type.
func TestStakeTxFeePrioHeap(t *testing.T) {
numTestItems := 1000
// Create some fake priority items that exercise the expected sort
// edge conditions.
testItems := []*txPrioItem{
{feePerKB: 5678, txType: stake.TxTypeRegular, priority: 3},
{feePerKB: 5678, txType: stake.TxTypeRegular, priority: 1},
{feePerKB: 5678, txType: stake.TxTypeRegular, priority: 1}, // Duplicate fee and prio
{feePerKB: 5678, txType: stake.TxTypeRegular, priority: 5},
{feePerKB: 5678, txType: stake.TxTypeRegular, priority: 2},
{feePerKB: 1234, txType: stake.TxTypeRegular, priority: 3},
{feePerKB: 1234, txType: stake.TxTypeRegular, priority: 1},
{feePerKB: 1234, txType: stake.TxTypeRegular, priority: 5},
{feePerKB: 1234, txType: stake.TxTypeRegular, priority: 5}, // Duplicate fee and prio
{feePerKB: 1234, txType: stake.TxTypeRegular, priority: 2},
{feePerKB: 10000, txType: stake.TxTypeRegular, priority: 0}, // Higher fee, lower prio
{feePerKB: 0, txType: stake.TxTypeRegular, priority: 10000}, // Higher prio, lower fee
{txType: stake.TxTypeSSRtx, autoRevocation: true},
}
// Add random data in addition to the edge conditions already manually
// specified.
for i := len(testItems); i < numTestItems; i++ {
randType := stake.TxType(rand.Intn(4))
randPrio := rand.Float64() * 100
randFeePerKB := rand.Float64() * 10
testItems = append(testItems, &txPrioItem{
txDesc: nil,
txType: randType,
feePerKB: randFeePerKB,
priority: randPrio,
})
}
// Test sorting by stake and fee per KB.
ph := newTxPriorityQueue(numTestItems, txPQByStakeAndFee)
for i := 0; i < numTestItems; i++ {
heap.Push(ph, testItems[i])
}
last := &txPrioItem{
txDesc: nil,
txType: stake.TxTypeSSGen,
priority: 10000.0,
feePerKB: 10000.0,
}
for i := 0; i < numTestItems; i++ {
prioItem := heap.Pop(ph)
txpi, ok := prioItem.(*txPrioItem)
if ok {
if txpi.feePerKB > last.feePerKB &&
compareStakePriority(txpi, last) >= 0 {
t.Errorf("bad pop: %v fee per KB was more than last of %v "+
"while the txtype was %v but last was %v",
txpi.feePerKB, last.feePerKB, txpi.txType, last.txType)
}
last = txpi
}
}
}