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  }