decred.org/dcrdex@v1.0.3/client/orderbook/rateindex_test.go (about) 1 package orderbook 2 3 import ( 4 "testing" 5 ) 6 7 // makeRateIndex creates a new rate index. 8 func makeRateIndex(index []uint64) *rateIndex { 9 if index != nil { 10 return &rateIndex{ 11 Rates: index, 12 } 13 } 14 15 return newRateIndex() 16 } 17 18 func TestRateIndexAdd(t *testing.T) { 19 tests := []struct { 20 index *rateIndex 21 entry uint64 22 expected *rateIndex 23 }{ 24 { 25 index: makeRateIndex([]uint64{0, 1, 3, 5}), 26 entry: 4, 27 expected: makeRateIndex([]uint64{0, 1, 3, 4, 5}), 28 }, 29 { 30 index: makeRateIndex([]uint64{0, 1, 3, 4}), 31 entry: 0, 32 expected: makeRateIndex([]uint64{0, 1, 3, 4}), 33 }, 34 { 35 index: makeRateIndex([]uint64{0}), 36 entry: 1, 37 expected: makeRateIndex([]uint64{0, 1}), 38 }, 39 { 40 index: makeRateIndex(nil), 41 entry: 0, 42 expected: makeRateIndex([]uint64{0}), 43 }, 44 } 45 46 for idx, tc := range tests { 47 tc.index.Add(tc.entry) 48 49 if len(tc.index.Rates) != len(tc.expected.Rates) { 50 t.Fatalf("[RateIndex.Add] #%d: expected index size of %d, got %d", 51 idx+1, len(tc.expected.Rates), len(tc.index.Rates)) 52 } 53 54 for i := 0; i < len(tc.index.Rates); i++ { 55 if tc.index.Rates[i] != tc.expected.Rates[i] { 56 t.Fatalf("[RateIndex.Add] #%d: expected %d at index "+ 57 "%d, got %v", idx+1, tc.expected.Rates[i], i, 58 tc.index.Rates[i]) 59 } 60 } 61 } 62 } 63 64 func TestRateIndexRemove(t *testing.T) { 65 tests := []struct { 66 index *rateIndex 67 entry uint64 68 expected *rateIndex 69 wantErr bool 70 }{ 71 { 72 index: makeRateIndex([]uint64{0, 1, 3, 4, 5}), 73 entry: 4, 74 expected: makeRateIndex([]uint64{0, 1, 3, 5}), 75 wantErr: false, 76 }, 77 { 78 index: makeRateIndex([]uint64{0, 1, 3, 4}), 79 entry: 5, 80 expected: makeRateIndex([]uint64{0, 1, 3, 4}), 81 wantErr: true, 82 }, 83 { 84 index: makeRateIndex([]uint64{0, 1}), 85 entry: 1, 86 expected: makeRateIndex([]uint64{0}), 87 wantErr: false, 88 }, 89 { 90 index: makeRateIndex([]uint64{0}), 91 entry: 0, 92 expected: makeRateIndex(nil), 93 wantErr: false, 94 }, 95 } 96 97 for idx, tc := range tests { 98 err := tc.index.Remove(tc.entry) 99 100 if (err != nil) != tc.wantErr { 101 t.Fatalf("[RateIndex.Remove] #%d: error: %v, wantErr: %v", 102 idx+1, err, tc.wantErr) 103 } 104 105 if len(tc.index.Rates) != len(tc.expected.Rates) { 106 t.Fatalf("[RateIndex.Remove] #%d: expected index size "+ 107 "of %d, got %d", idx+1, len(tc.expected.Rates), 108 len(tc.index.Rates)) 109 } 110 111 for i := 0; i < len(tc.index.Rates); i++ { 112 if tc.index.Rates[i] != tc.expected.Rates[i] { 113 t.Fatalf("[RateIndex.Remove] #%d: expected %d at index "+ 114 "%d, got %v", idx+1, tc.expected.Rates[i], i, 115 tc.index.Rates[i]) 116 } 117 } 118 } 119 }