|
@@ -0,0 +1,126 @@
|
|
|
+package sentio
|
|
|
+
|
|
|
+import (
|
|
|
+ "reflect"
|
|
|
+ "slices"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestCompareStrategyOrders(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ orders []StrategyOrder
|
|
|
+ want []StrategyOrder
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "Sell first",
|
|
|
+ orders: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: 1,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ want: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "Buy largest first",
|
|
|
+ orders: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ want: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "Sell largest first",
|
|
|
+ orders: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ want: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "Sell largest first then buy",
|
|
|
+ orders: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ want: []StrategyOrder{
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderSell,
|
|
|
+ Ratio: .3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Action: OrderBuy,
|
|
|
+ Ratio: .6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tt := range tests {
|
|
|
+ t.Run(tt.name, func(t *testing.T) {
|
|
|
+ slices.SortFunc(tt.orders, CompareStrategyOrders)
|
|
|
+
|
|
|
+ if ok := reflect.DeepEqual(tt.want, tt.orders); !ok {
|
|
|
+ t.Errorf("SortFunc = %v, want %v", tt.orders, tt.want)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|