Subscriptions: Add List.Clone (#1592)

This commit is contained in:
Gareth Kirwan
2024-07-26 07:44:07 +01:00
committed by GitHub
parent 425ec0ce62
commit d1e36691b3
3 changed files with 23 additions and 2 deletions

View File

@@ -46,6 +46,15 @@ func (l List) GroupPairs() (n List) {
return s.List()
}
// Clone returns a deep clone of the List
func (l List) Clone() List {
n := make(List, len(l))
for i, s := range l {
n[i] = s.Clone()
}
return n
}
// QualifiedChannels returns a sorted list of all the qualified Channels in the list
func (l List) QualifiedChannels() []string {
c := make([]string, len(l))

View File

@@ -8,6 +8,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
)
// TestListStrings exercises List.Strings()
@@ -91,3 +92,15 @@ func TestAssetPairs(t *testing.T) {
assert.ErrorIs(t, err, expErr, "Should error correctly on GetPairFormat")
}
}
func TestListClone(t *testing.T) {
t.Parallel()
l := List{{Channel: TickerChannel}, {Channel: OrderbookChannel}}
n := l.Clone()
assert.NotSame(t, n, l, "Slices must not be the same")
require.NotEmpty(t, n, "List must not be empty")
assert.NotSame(t, n[0], l[0], "Subscriptions must be cloned")
assert.Equal(t, n[0], l[0], "Subscriptions should be equal")
l[0].Interval = kline.OneHour
assert.NotEqual(t, n[0], l[0], "Subscriptions should be cloned")
}

View File

@@ -90,8 +90,7 @@ func TestSubscriptionMarshaling(t *testing.T) {
assert.Equal(t, `{"enabled":true,"channel":"myTrades","authenticated":true}`, string(j), "Marshalling should be clean and concise")
}
// TestClone exercises Clone
func TestClone(t *testing.T) {
func TestSubscriptionClone(t *testing.T) {
t.Parallel()
params := map[string]any{"a": 42}
a := &Subscription{