func TestCoinSet(t *testing.T) { cs := coinset.NewCoinSet(nil) if cs.PopCoin() != nil { t.Error("Expected popCoin of empty to be nil") } if cs.ShiftCoin() != nil { t.Error("Expected shiftCoin of empty to be nil") } cs.PushCoin(coins[0]) cs.PushCoin(coins[1]) cs.PushCoin(coins[2]) if cs.PopCoin() != coins[2] { t.Error("Expected third coin") } if cs.ShiftCoin() != coins[0] { t.Error("Expected first coin") } mtx := coinset.NewMsgTxWithInputCoins(cs) if len(mtx.TxIn) != 1 { t.Errorf("Expected only 1 TxIn, got %d", len(mtx.TxIn)) } op := mtx.TxIn[0].PreviousOutpoint if !op.Hash.IsEqual(coins[1].Hash()) || op.Index != coins[1].Index() { t.Errorf("Expected the second coin to be added as input to mtx") } }
func testCoinSelector(tests []coinSelectTest, t *testing.T) { for testIndex, test := range tests { cs, err := test.selector.CoinSelect(test.targetValue, test.inputCoins) if err != test.expectedError { t.Errorf("[%d] expected a different error: got=%v, expected=%v", testIndex, err, test.expectedError) continue } if test.expectedCoins != nil { if cs == nil { t.Errorf("[%d] expected non-nil coinset", testIndex) continue } coins := cs.Coins() if len(coins) != len(test.expectedCoins) { t.Errorf("[%d] expected different number of coins: got=%d, expected=%d", testIndex, len(coins), len(test.expectedCoins)) continue } for n := 0; n < len(test.expectedCoins); n++ { if coins[n] != test.expectedCoins[n] { t.Errorf("[%d] expected different coins at coin index %d: got=%#v, expected=%#v", testIndex, n, coins[n], test.expectedCoins[n]) continue } } coinSet := coinset.NewCoinSet(coins) if coinSet.TotalValue() < test.targetValue { t.Errorf("[%d] targetValue not satistifed", testIndex) continue } } } }