decred.org/dcrdex@v1.0.5/dex/order/test/serialize_test.go (about) 1 // Copyright (c) 2019, The Decred developers 2 // See LICENSE for details. 3 4 // Package order defines the Order and Match types used throughout the DEX. 5 package test 6 7 import ( 8 "testing" 9 "time" 10 11 "decred.org/dcrdex/dex/encode" 12 "decred.org/dcrdex/dex/order" 13 ) 14 15 var randB = encode.RandomBytes 16 17 func TestOrders(t *testing.T) { 18 spins := 10000 19 tStart := time.Now() 20 for i := 0; i < spins; i++ { 21 testOrders(t) 22 } 23 t.Logf("created, encoded, and decoded %d orders (%d each of 3 types) in %d ms", 3*spins, spins, time.Since(tStart)/time.Millisecond) 24 } 25 26 func testOrders(t *testing.T) { 27 lo, _ := RandomLimitOrder() 28 lo.Coins = []order.CoinID{randB(36), randB(36)} 29 // Truncate time to pass time.Equal testing after decoding. 30 lo.SetTime(time.Now().Truncate(time.Millisecond)) 31 32 loB := order.EncodeOrder(lo) 33 reOrder, err := order.DecodeOrder(loB) 34 if err != nil { 35 t.Fatalf("error decoding limit order: %v", err) 36 } 37 reLO, ok := reOrder.(*order.LimitOrder) 38 if !ok { 39 t.Fatalf("wrong order type returned for limit order") 40 } 41 42 MustCompareLimitOrders(t, lo, reLO) 43 44 mo, _ := RandomMarketOrder() 45 mo.Coins = []order.CoinID{randB(36), randB(36), randB(38)} 46 // Not setting the server time on this one. 47 48 moB := order.EncodeOrder(mo) 49 reOrder, err = order.DecodeOrder(moB) 50 if err != nil { 51 t.Fatalf("error decoding market order: %v", err) 52 } 53 reMO, ok := reOrder.(*order.MarketOrder) 54 if !ok { 55 t.Fatalf("wrong order type returned for market order") 56 } 57 MustCompareMarketOrders(t, mo, reMO) 58 59 co, _ := RandomCancelOrder() 60 co.SetTime(time.Now().Truncate(time.Millisecond)) 61 62 coB := order.EncodeOrder(co) 63 reOrder, err = order.DecodeOrder(coB) 64 if err != nil { 65 t.Fatalf("error decoding cancel order: %v", err) 66 } 67 reCO, ok := reOrder.(*order.CancelOrder) 68 if !ok { 69 t.Fatalf("wrong order type returned for cancel order") 70 } 71 MustCompareCancelOrders(t, co, reCO) 72 } 73 74 func TestUserMatch(t *testing.T) { 75 spins := 30000 76 tStart := time.Now() 77 for i := 0; i < spins; i++ { 78 testUserMatch(t) 79 } 80 t.Logf("created, encoded, and decoded %d matches in %d ms", spins, time.Since(tStart)/time.Millisecond) 81 } 82 83 func testUserMatch(t *testing.T) { 84 match := RandomUserMatch() 85 matchB := order.EncodeMatch(match) 86 87 reMatch, _, err := order.DecodeMatch(matchB) 88 if err != nil { 89 t.Fatalf("error decoding UserMatch: %v", err) 90 } 91 MustCompareUserMatch(t, match, reMatch) 92 }