2022-08-02 13:18:08 +01:00
|
|
|
package coll_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"sectorinf.com/emilis/flabk/pkg/coll"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestVector(t *testing.T) {
|
|
|
|
tests := map[string]func(that *require.Assertions){
|
|
|
|
"push": func(that *require.Assertions) {
|
|
|
|
v := coll.New[int]()
|
|
|
|
v = v.Push(0).Push(1).Push(2).Push(3).Push(4).Push(5)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Len(v, 6)
|
|
|
|
that.EqualValues([]int{0, 1, 2, 3, 4, 5}, v)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"len": func(that *require.Assertions) {
|
|
|
|
v := coll.From([]int{1, 2, 3})
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Len(v, len(v))
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"from": func(that *require.Assertions) {
|
|
|
|
v := coll.From([]int{1, 2, 3})
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Len(v, 3)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"pop": func(that *require.Assertions) {
|
|
|
|
v := coll.From([]int{1, 2, 3})
|
|
|
|
t, v := v.Pop()
|
|
|
|
that.Equal(3, t)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.EqualValues([]int{1, 2}, v)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"withcap": func(that *require.Assertions) {
|
|
|
|
v := coll.WithCap[int](3)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Zero(len(v))
|
|
|
|
that.Len(v, 0)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"remove": func(that *require.Assertions) {
|
|
|
|
v := coll.New[int]().Push(0).Push(1).Push(2)
|
|
|
|
r1 := v.Remove(1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(2, len(r1))
|
|
|
|
that.EqualValues([]int{0, 2}, r1)
|
2022-08-02 13:18:08 +01:00
|
|
|
that.Panics(func() {
|
|
|
|
v.Remove(-1)
|
|
|
|
})
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Remove(100000)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
"remove unordered": func(that *require.Assertions) {
|
|
|
|
v := coll.New[int]().Push(0).Push(1).Push(2)
|
|
|
|
v = v.RemoveUnordered(1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(2, len(v))
|
|
|
|
vSlice := v
|
2022-08-02 13:18:08 +01:00
|
|
|
if vSlice[0] == 0 {
|
|
|
|
that.Equal(2, vSlice[1])
|
|
|
|
} else {
|
|
|
|
that.Equal(2, vSlice[0])
|
|
|
|
that.Zero(vSlice[1])
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"append": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3}...).Append(4, 5, 6)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(6, len(v))
|
|
|
|
that.EqualValues([]int{1, 2, 3, 4, 5, 6}, v)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"getsoft": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3}...)
|
2022-08-02 13:18:08 +01:00
|
|
|
that.Equal(2, v.GetSoft(1))
|
|
|
|
that.Zero(v.GetSoft(-1000))
|
|
|
|
that.Zero(v.GetSoft(1000))
|
|
|
|
},
|
|
|
|
"get": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3}...)
|
2022-08-02 13:18:08 +01:00
|
|
|
that.Equal(2, v.Get(1))
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Get(-1000)
|
|
|
|
})
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Get(1000)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
"clone": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3}...)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v1 := v.Clone().Set(1, 1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(3, len(v1))
|
|
|
|
that.EqualValues([]int{1, 1, 3}, v1)
|
|
|
|
that.EqualValues([]int{1, 2, 3}, v)
|
2022-08-02 13:18:08 +01:00
|
|
|
},
|
|
|
|
"set": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3}...)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v1 := v.Clone().Set(1, 1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(3, len(v1))
|
|
|
|
that.EqualValues([]int{1, 1, 3}, v1)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v2 := v.Clone().Set(2, 1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(3, len(v2))
|
|
|
|
that.EqualValues([]int{1, 2, 1}, v2)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v3 := v.Clone().Set(0, 16)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(3, len(v3))
|
|
|
|
that.EqualValues([]int{16, 2, 3}, v3)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Set(-1000, 1)
|
|
|
|
})
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Set(3, 1)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
"sub": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{0, 1, 2, 3, 4, 5, 6}...)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v1 := v.Clone().Sub(2, 4)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(2, len(v1))
|
|
|
|
that.EqualValues([]int{2, 3}, v1)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v2 := v.Clone().Sub(2, 5)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(3, len(v2))
|
|
|
|
that.EqualValues([]int{2, 3, 4}, v2)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v3 := v.Clone().Sub(5, -1)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(2, len(v3))
|
|
|
|
that.EqualValues([]int{5, 6}, v3)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
v4 := v.Clone().Sub(-1, 2)
|
2022-08-02 15:49:10 +01:00
|
|
|
that.Equal(2, len(v4))
|
|
|
|
that.EqualValues([]int{0, 1}, v4)
|
2022-08-02 13:18:08 +01:00
|
|
|
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Sub(0, 1000)
|
|
|
|
})
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Sub(4000, 4002)
|
|
|
|
})
|
|
|
|
that.Panics(func() {
|
|
|
|
v.Sub(2, 1)
|
|
|
|
})
|
|
|
|
},
|
2022-08-02 15:49:10 +01:00
|
|
|
"filter": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
v := coll.From([]int{1, 2, 3, 4, 5, 6}...)
|
2022-08-02 15:49:10 +01:00
|
|
|
v = v.Filter(func(i int) bool { return i%2 == 0 })
|
|
|
|
that.Len(v, 3)
|
|
|
|
},
|
|
|
|
"any": func(that *require.Assertions) {
|
2022-08-05 20:53:44 +01:00
|
|
|
that.True(coll.From([]int{1, 2, 3, 4, 5, 6}...).Any(func(i int) bool { return i == 3 }))
|
|
|
|
that.False(coll.From([]int{1, 2, 3, 4, 5, 6}...).Any(func(i int) bool { return i == 666 }))
|
2022-08-02 15:49:10 +01:00
|
|
|
},
|
|
|
|
"take": func(that *require.Assertions) {
|
|
|
|
that.EqualValues([]int{1, 2, 3}, coll.From([]int{1, 2, 3, 4, 5, 6}).Take(3))
|
|
|
|
},
|
2022-08-02 13:18:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
for name, test := range tests {
|
|
|
|
t.Run(name, func(tt *testing.T) {
|
|
|
|
test(require.New(tt))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|