You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ntool/narr/check_test.go

109 lines
2.6 KiB
Go

package narr_test
import (
"git.noahlan.cn/noahlan/ntool/narr"
"git.noahlan.cn/noahlan/ntool/ntest/assert"
"testing"
)
func TestIntsHas(t *testing.T) {
ints := []int{2, 4, 5}
assert.True(t, narr.IntsHas(ints, 2))
assert.True(t, narr.IntsHas(ints, 5))
assert.False(t, narr.IntsHas(ints, 3))
}
func TestInt64sHas(t *testing.T) {
ints := []int64{2, 4, 5}
assert.True(t, narr.Int64sHas(ints, 2))
assert.True(t, narr.Int64sHas(ints, 5))
assert.False(t, narr.Int64sHas(ints, 3))
}
func TestStringsHas(t *testing.T) {
ss := []string{"a", "b"}
assert.True(t, narr.StringsHas(ss, "a"))
assert.True(t, narr.StringsHas(ss, "b"))
assert.False(t, narr.StringsHas(ss, "c"))
}
func TestInAndNotIn(t *testing.T) {
is := assert.New(t)
arr := []int{1, 2, 3}
is.True(narr.In(arr, 2))
is.False(narr.NotIn(arr, 2))
arr1 := []rune{'a', 'b'}
is.True(narr.In(arr1, 'b'))
is.False(narr.NotIn(arr1, 'b'))
arr2 := []string{"a", "b", "c"}
is.True(narr.In(arr2, "b"))
is.False(narr.NotIn(arr2, "b"))
}
func TestContainsAll(t *testing.T) {
is := assert.New(t)
arr := []int{1, 2, 3}
is.True(narr.ContainsAll(arr, []int{2}))
is.False(narr.ContainsAll(arr, []int{2, 45}))
is.True(narr.IsParent(arr, []int{2}))
arr2 := []string{"a", "b", "c"}
is.True(narr.ContainsAll(arr2, []string{"b"}))
is.False(narr.ContainsAll(arr2, []string{"b", "e"}))
is.True(narr.IsParent(arr2, []string{"b"}))
}
func TestContains(t *testing.T) {
is := assert.New(t)
tests := map[any]any{
1: []int{1, 2, 3},
2: []int8{1, 2, 3},
3: []int16{1, 2, 3},
4: []int32{4, 2, 3},
5: []int64{5, 2, 3},
6: []uint{6, 2, 3},
7: []uint8{7, 2, 3},
8: []uint16{8, 2, 3},
9: []uint32{9, 2, 3},
10: []uint64{10, 3},
11: []string{"11", "3"},
'a': []int64{97},
'b': []rune{'a', 'b'},
'c': []byte{'a', 'b', 'c'}, // byte -> uint8
"a": []string{"a", "b", "c"},
12: [5]uint{12, 1, 2, 3, 4},
'A': [3]rune{'A', 'B', 'C'},
'd': [4]byte{'a', 'b', 'c', 'd'},
"aa": [3]string{"aa", "bb", "cc"},
}
for val, list := range tests {
is.True(narr.Contains(list, val))
is.False(narr.NotContains(list, val))
}
is.False(narr.Contains(nil, []int{}))
is.False(narr.Contains('a', []int{}))
//
is.False(narr.Contains([]int{2, 3}, []int{2}))
is.False(narr.Contains([]int{2, 3}, "a"))
is.False(narr.Contains([]string{"a", "b"}, 12))
is.False(narr.Contains(nil, 12))
is.False(narr.Contains(map[int]int{2: 3}, 12))
tests1 := map[any]any{
2: []int{1, 3},
"a": []string{"b", "c"},
}
for val, list := range tests1 {
is.True(narr.NotContains(list, val))
is.False(narr.Contains(list, val))
}
}