github.com/dim4egster/coreth@v0.10.2/plugin/evm/tx_heap_test.go (about) 1 // (c) 2019-2021, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package evm 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestTxHeap(t *testing.T) { 13 var ( 14 tx0 = &Tx{ 15 UnsignedAtomicTx: &UnsignedImportTx{ 16 NetworkID: 0, 17 }, 18 } 19 tx0Bytes = []byte{0} 20 21 tx1 = &Tx{ 22 UnsignedAtomicTx: &UnsignedImportTx{ 23 NetworkID: 1, 24 }, 25 } 26 tx1Bytes = []byte{1} 27 28 tx2 = &Tx{ 29 UnsignedAtomicTx: &UnsignedImportTx{ 30 NetworkID: 2, 31 }, 32 } 33 tx2Bytes = []byte{2} 34 ) 35 tx0.Initialize(tx0Bytes, tx0Bytes) 36 tx1.Initialize(tx1Bytes, tx1Bytes) 37 tx2.Initialize(tx2Bytes, tx2Bytes) 38 39 id0 := tx0.ID() 40 id1 := tx1.ID() 41 id2 := tx2.ID() 42 43 t.Run("add/remove single entry", func(t *testing.T) { 44 h := newTxHeap(3) 45 assert.Zero(t, h.Len()) 46 47 assert := assert.New(t) 48 h.Push(tx0, 5) 49 assert.True(h.Has(id0)) 50 gTx0, gHas0 := h.Get(id0) 51 assert.Equal(tx0, gTx0) 52 assert.True(gHas0) 53 h.Remove(id0) 54 assert.False(h.Has(id0)) 55 assert.Zero(h.Len()) 56 h.Push(tx0, 5) 57 assert.True(h.Has(id0)) 58 assert.Equal(1, h.Len()) 59 }) 60 61 t.Run("add other items", func(t *testing.T) { 62 h := newTxHeap(3) 63 assert.Zero(t, h.Len()) 64 65 assert := assert.New(t) 66 h.Push(tx1, 10) 67 assert.True(h.Has(id1)) 68 gTx1, gHas1 := h.Get(id1) 69 assert.Equal(tx1, gTx1) 70 assert.True(gHas1) 71 72 h.Push(tx2, 2) 73 assert.True(h.Has(id2)) 74 gTx2, gHas2 := h.Get(id2) 75 assert.Equal(tx2, gTx2) 76 assert.True(gHas2) 77 78 assert.Equal(id1, h.PopMax().ID()) 79 assert.Equal(id2, h.PopMax().ID()) 80 81 assert.False(h.Has(id0)) 82 gTx0, gHas0 := h.Get(id0) 83 assert.Nil(gTx0) 84 assert.False(gHas0) 85 86 assert.False(h.Has(id1)) 87 gTx1, gHas1 = h.Get(id1) 88 assert.Nil(gTx1) 89 assert.False(gHas1) 90 91 assert.False(h.Has(id2)) 92 gTx2, gHas2 = h.Get(id2) 93 assert.Nil(gTx2) 94 assert.False(gHas2) 95 }) 96 97 verifyRemovalOrder := func(t *testing.T, h *txHeap) { 98 t.Helper() 99 100 assert := assert.New(t) 101 assert.Equal(id2, h.PopMin().ID()) 102 assert.True(h.Has(id0)) 103 assert.True(h.Has(id1)) 104 assert.False(h.Has(id2)) 105 assert.Equal(id0, h.PopMin().ID()) 106 assert.False(h.Has(id0)) 107 assert.True(h.Has(id1)) 108 assert.False(h.Has(id2)) 109 assert.Equal(id1, h.PopMin().ID()) 110 assert.False(h.Has(id0)) 111 assert.False(h.Has(id1)) 112 assert.False(h.Has(id2)) 113 } 114 115 t.Run("drop", func(t *testing.T) { 116 h := newTxHeap(3) 117 assert.Zero(t, h.Len()) 118 119 h.Push(tx0, 5) 120 h.Push(tx1, 10) 121 h.Push(tx2, 2) 122 verifyRemovalOrder(t, h) 123 }) 124 t.Run("drop (alt order)", func(t *testing.T) { 125 h := newTxHeap(3) 126 assert.Zero(t, h.Len()) 127 128 h.Push(tx0, 5) 129 h.Push(tx2, 2) 130 h.Push(tx1, 10) 131 verifyRemovalOrder(t, h) 132 }) 133 t.Run("drop (alt order 2)", func(t *testing.T) { 134 h := newTxHeap(3) 135 assert.Zero(t, h.Len()) 136 137 h.Push(tx2, 2) 138 h.Push(tx0, 5) 139 h.Push(tx1, 10) 140 verifyRemovalOrder(t, h) 141 }) 142 }