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  }