OSDN Git Service

final code review (#484)
[bytom/vapor.git] / application / mov / match / order_book_test.go
index e401970..466a953 100644 (file)
@@ -6,6 +6,7 @@ import (
        "github.com/bytom/vapor/application/mov/common"
        "github.com/bytom/vapor/application/mov/database"
        "github.com/bytom/vapor/application/mov/mock"
+       "github.com/bytom/vapor/testutil"
 )
 
 var (
@@ -188,8 +189,114 @@ func TestOrderBook(t *testing.T) {
                        }
 
                        if gotOrder.Key() != wantOrder.Key() {
-                               t.Errorf("#%d(%s):the key of got order(%v) is not equals key of want order(%v)", i, c.desc, gotOrder, wantOrder)
+                               t.Fatalf("#%d(%s):the key of got order(%v) is not equals key of want order(%v)", i, c.desc, gotOrder, wantOrder)
                        }
                }
        }
 }
+
+func TestPeekArrivalOrder(t *testing.T) {
+       cases := []struct {
+               desc                 string
+               initArrivalAddOrders []*common.Order
+               initArrivalDelOrders []*common.Order
+               peekTradePair        *common.TradePair
+               wantArrivalAddOrders []*common.Order
+               wantOrder            *common.Order
+       }{
+               {
+                       desc:                 "empty peek",
+                       initArrivalAddOrders: []*common.Order{},
+                       initArrivalDelOrders: []*common.Order{},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{},
+                       wantOrder:            nil,
+               },
+               {
+                       desc:                 "1 element regular peek",
+                       initArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       initArrivalDelOrders: []*common.Order{},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       wantOrder:            mock.Btc2EthOrders[0],
+               },
+               {
+                       desc: "4 element regular peek with",
+                       initArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       initArrivalDelOrders: []*common.Order{},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       wantOrder: mock.Btc2EthOrders[3],
+               },
+               {
+                       desc:                 "1 element peek with 1 unrelated deleted order",
+                       initArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       initArrivalDelOrders: []*common.Order{mock.Btc2EthOrders[1]},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       wantOrder:            mock.Btc2EthOrders[0],
+               },
+               {
+                       desc:                 "1 element peek with 1 related deleted order",
+                       initArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       initArrivalDelOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{},
+                       wantOrder:            nil,
+               },
+               {
+                       desc: "4 element peek with first 3 deleted order",
+                       initArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       initArrivalDelOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{mock.Btc2EthOrders[1]},
+                       wantOrder:            mock.Btc2EthOrders[1],
+               },
+               {
+                       desc: "4 element peek with first 1 deleted order",
+                       initArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       initArrivalDelOrders: []*common.Order{mock.Btc2EthOrders[3]},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2],
+                       },
+                       wantOrder: mock.Btc2EthOrders[0],
+               },
+               {
+                       desc: "4 element peek with first 2th deleted order",
+                       initArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       initArrivalDelOrders: []*common.Order{mock.Btc2EthOrders[0]},
+                       peekTradePair:        btc2eth,
+                       wantArrivalAddOrders: []*common.Order{
+                               mock.Btc2EthOrders[0], mock.Btc2EthOrders[1], mock.Btc2EthOrders[2], mock.Btc2EthOrders[3],
+                       },
+                       wantOrder: mock.Btc2EthOrders[3],
+               },
+       }
+
+       for i, c := range cases {
+               orderBook := NewOrderBook(mock.NewMovStore(nil, nil), c.initArrivalAddOrders, c.initArrivalDelOrders)
+               gotOrder := orderBook.PeekOrder(c.peekTradePair)
+               if !testutil.DeepEqual(gotOrder, c.wantOrder) {
+                       t.Fatalf("#%d(%s):the key of got order(%v) is not equals key of want order(%v)", i, c.desc, gotOrder, c.wantOrder)
+               }
+
+               wantAddOrders, _ := arrangeArrivalAddOrders(c.wantArrivalAddOrders).Load(c.peekTradePair.Key())
+               gotAddOrders := orderBook.getArrivalAddOrders(c.peekTradePair.Key())
+               if !testutil.DeepEqual(gotAddOrders, wantAddOrders) {
+                       t.Fatalf("#%d(%s): the got arrivalAddOrders(%v) is differnt than want arrivalAddOrders(%v)", i, c.desc, gotAddOrders, wantAddOrders)
+               }
+       }
+}