PPysolate SpineREAD THE CODE · UNDERSTAND THE SYSTEM
课程与章节
源码索引 / CURRENT IMPLEMENTATION

cmd/trade-demo/market_test.go

27 行 · 点击行号可定位;函数链接随声明位置更新,不手填行号。

跳到函数 / 声明
package main

import (
	"context"
	"encoding/json"
	"io"
	"testing"
)

func TestMarketRechecksCashAtEveryOrder(t *testing.T) {
	m := newMarket("ACME", 100, 2000, true, 0, newTrace(io.Discard))
	manifest := m.tools()
	args := json.RawMessage(`{"symbol":"ACME","quantity":15}`)
	if _, err := manifest["buy"].Call(context.Background(), args); err != nil {
		t.Fatal(err)
	}
	if _, err := manifest["buy"].Call(context.Background(), args); err == nil {
		t.Fatal("overspending accepted")
	}
	if len(m.orders) != 1 || m.remainingCash != 500 {
		t.Fatalf("orders=%v cash=%d", m.orders, m.remainingCash)
	}
	snapshot, err := manifest["cash"].Call(context.Background(), json.RawMessage(`{}`))
	if err != nil || snapshot != 2000 {
		t.Fatalf("snapshot changed: %v %v", snapshot, err)
	}
}