243 lines
4.3 KiB
Go
243 lines
4.3 KiB
Go
package sliceutils_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
|
)
|
|
|
|
func TestMap(t *testing.T) {
|
|
in := []int8{1, 2, 3, 4}
|
|
out := []int16{2, 4, 6, 8}
|
|
got := sliceutils.Map(in, func(t int8) int16 { return int16(t) * 2 })
|
|
if !reflect.DeepEqual(out, got) {
|
|
t.Fatalf("Map() = %v, want %v", got, out)
|
|
}
|
|
}
|
|
|
|
func TestFilter(t *testing.T) {
|
|
in := []int8{1, 2, 3, 4}
|
|
out := []int8{2, 4}
|
|
got := sliceutils.Filter(in, func(t int8) bool { return t%2 == 0 })
|
|
if !reflect.DeepEqual(out, got) {
|
|
t.Fatalf("Map() = %v, want %v", got, out)
|
|
}
|
|
}
|
|
|
|
func TestRemoveDuplicate(t *testing.T) {
|
|
in := []int8{1, 2, 2, 3, 3, 3, 4}
|
|
out := []int8{1, 2, 3, 4}
|
|
got := sliceutils.RemoveDuplicate(in)
|
|
if !reflect.DeepEqual(out, got) {
|
|
t.Fatalf("Map() = %v, want %v", got, out)
|
|
}
|
|
}
|
|
|
|
func TestReverse(t *testing.T) {
|
|
in := []int8{1, 2, 3, 4}
|
|
out := []int8{4, 3, 2, 1}
|
|
sliceutils.Reverse(in)
|
|
if !reflect.DeepEqual(out, in) {
|
|
t.Fatalf("Map() = %v, want %v", in, out)
|
|
}
|
|
}
|
|
|
|
func TestCompareOrdered(t *testing.T) {
|
|
type args struct {
|
|
a []int
|
|
b []int
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "equal",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{1, 2, 3, 4},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not equal, same len",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{0, 1, 2, 3},
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "not equal, diff len",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{0, 1, 2},
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := sliceutils.CompareOrdered(tt.args.a, tt.args.b); got != tt.want {
|
|
t.Errorf("CompareOrdered() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCompareUnordered(t *testing.T) {
|
|
type args struct {
|
|
a []int
|
|
b []int
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "equal ordered",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{1, 2, 3, 4},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "equal unordered",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{2, 4, 3, 1},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not equal, same len",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{0, 2, 3, 4},
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "not equal, diff len",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: []int{0, 1, 2},
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := sliceutils.CompareUnordered(tt.args.a, tt.args.b); got != tt.want {
|
|
t.Errorf("CompareUnordered() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestContains(t *testing.T) {
|
|
type args struct {
|
|
a []int
|
|
b int
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "contains",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: 3,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "doesnt contain",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
b: 0,
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := sliceutils.Contains(tt.args.a, tt.args.b); got != tt.want {
|
|
t.Errorf("Contains() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestContainsFunc(t *testing.T) {
|
|
type args struct {
|
|
a []int
|
|
f func(t int) bool
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "contains",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
f: func(t int) bool { return t == 2 },
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "doesnt contain",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
f: func(t int) bool { return t == 9 },
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := sliceutils.ContainsFunc(tt.args.a, tt.args.f); got != tt.want {
|
|
t.Errorf("ContainsFunc() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCompact(t *testing.T) {
|
|
type args struct {
|
|
a []int
|
|
compactor func(acc int, next int) int
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want int
|
|
}{
|
|
{
|
|
name: "sum",
|
|
args: args{
|
|
a: []int{1, 2, 3, 4},
|
|
compactor: func(acc, next int) int { return acc + next },
|
|
},
|
|
want: 1 + 2 + 3 + 4,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := sliceutils.Compact(tt.args.a, tt.args.compactor); !reflect.DeepEqual(
|
|
got,
|
|
tt.want,
|
|
) {
|
|
t.Errorf("Compact() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|