6 "github.com/vapor/application/mov/common"
7 "github.com/vapor/application/mov/mock"
8 "github.com/vapor/protocol/bc/types"
11 func TestGenerateMatchedTxs(t *testing.T) {
12 btc2eth := &common.TradePair{FromAssetID: &mock.BTC, ToAssetID: &mock.ETH}
13 eth2btc := &common.TradePair{FromAssetID: &mock.ETH, ToAssetID: &mock.BTC}
17 tradePair *common.TradePair
18 initStoreOrders []*common.Order
19 wantMatchedTxs []*types.Tx
23 tradePair: &common.TradePair{FromAssetID: &mock.BTC, ToAssetID: &mock.ETH},
24 initStoreOrders: []*common.Order{
25 mock.Btc2EthOrders[0], mock.Btc2EthOrders[1],
26 mock.Eth2BtcOrders[0],
28 wantMatchedTxs: []*types.Tx{
33 desc: "partial matched",
34 tradePair: &common.TradePair{FromAssetID: &mock.BTC, ToAssetID: &mock.ETH},
35 initStoreOrders: []*common.Order{
36 mock.Btc2EthOrders[0], mock.Btc2EthOrders[1],
37 mock.Eth2BtcOrders[1],
39 wantMatchedTxs: []*types.Tx{
44 desc: "partial matched and continue to match",
45 tradePair: &common.TradePair{FromAssetID: &mock.BTC, ToAssetID: &mock.ETH},
46 initStoreOrders: []*common.Order{
47 mock.Btc2EthOrders[0], mock.Btc2EthOrders[1],
48 mock.Eth2BtcOrders[2],
50 wantMatchedTxs: []*types.Tx{
56 desc: "unable to match",
57 tradePair: &common.TradePair{FromAssetID: &mock.BTC, ToAssetID: &mock.ETH},
58 initStoreOrders: []*common.Order{
59 mock.Btc2EthOrders[1],
60 mock.Eth2BtcOrders[0],
62 wantMatchedTxs: []*types.Tx{},
66 for i, c := range cases {
67 movStore := mock.NewMovStore([]*common.TradePair{btc2eth, eth2btc}, c.initStoreOrders)
68 matchEngine := NewEngine(NewOrderTable(movStore, nil, nil), 0.05, []byte{0x51})
69 var gotMatchedTxs []*types.Tx
70 for matchEngine.HasMatchedTx(c.tradePair, c.tradePair.Reverse()) {
71 matchedTx, err := matchEngine.NextMatchedTx(c.tradePair, c.tradePair.Reverse())
76 gotMatchedTxs = append(gotMatchedTxs, matchedTx)
79 if len(c.wantMatchedTxs) != len(gotMatchedTxs) {
80 t.Errorf("#%d(%s) the length of got matched tx is not equals want matched tx", i, c.desc)
84 for i, gotMatchedTx := range gotMatchedTxs {
85 c.wantMatchedTxs[i].Version = 1
86 byteData, err := c.wantMatchedTxs[i].MarshalText()
91 c.wantMatchedTxs[i].SerializedSize = uint64(len(byteData))
92 wantMatchedTx := types.NewTx(c.wantMatchedTxs[i].TxData)
93 if gotMatchedTx.ID != wantMatchedTx.ID {
94 t.Errorf("#%d(%s) the tx hash of got matched tx: %s is not equals want matched tx: %s", i, c.desc, gotMatchedTx.ID.String(), wantMatchedTx.ID.String())