goutils/sliceutils/sliceUtils_test.go
2025-04-24 15:59:15 +02:00

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)
}
})
}
}