diff options
author | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-08-02 20:55:11 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-08-02 20:55:11 +0530 |
commit | ce6cf13c2d67c3368251d1eea5593198f5021330 (patch) | |
tree | d4c2347fd45fce395bf22a30e423697494d4284f /generic/generic_test.go | |
download | kit-0.1.0.tar kit-0.1.0.tar.gz kit-0.1.0.tar.bz2 kit-0.1.0.tar.lz kit-0.1.0.tar.xz kit-0.1.0.tar.zst kit-0.1.0.zip |
Initial Commitv0.1.0
Diffstat (limited to 'generic/generic_test.go')
-rw-r--r-- | generic/generic_test.go | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/generic/generic_test.go b/generic/generic_test.go new file mode 100644 index 0000000..953f2ac --- /dev/null +++ b/generic/generic_test.go @@ -0,0 +1,149 @@ +package generic + +import ( + "maps" + "slices" + "testing" +) + +type X struct{} + +func TestZero(t *testing.T) { + if Zero[int]() != 0 { + t.Errorf("Zero[int]() != 0") + } + if Zero[string]() != "" { + t.Errorf(`Zero[string]() != ""`) + } + if Zero[bool]() != false { + t.Errorf("Zero[bool]() != false") + } + if Zero[*X]() != nil { + t.Errorf("Zero[*X]() != nil") + } +} + +func TestIsZero(t *testing.T) { + tests := []struct { + name string + val any + want bool + }{ + { + name: "int zero", + val: 0, + want: true, + }, + { + "int non-zero", + 1, + false, + }, + { + "string zero", + "", + true, + }, + { + "string non-zero", + "x", + false, + }, + { + "nil pointer", + (*X)(nil), + true, + }, + { + "non-nil pointer", + Ptr(X{}), + false, + }, + } + + for _, tt := range tests { + switch v := tt.val.(type) { + case int: + got := IsZero(v) + if got != tt.want { + t.Errorf("%s: got %v, want %v", tt.name, got, tt.want) + } + case string: + got := IsZero(v) + if got != tt.want { + t.Errorf("%s: got %v, want %v", tt.name, got, tt.want) + } + case *X: + got := IsZero(v) + if got != tt.want { + t.Errorf("%s: got %v, want %v", tt.name, got, tt.want) + } + } + } +} + +func TestPtr(t *testing.T) { + v := 42 + p := Ptr(v) + if p == nil || *p != v { + t.Errorf("Ptr(42) = %v, want pointer to 42", p) + } +} + +func TestKeys(t *testing.T) { + m := map[string]int{"a": 1, "b": 2, "c": 3} + seq := Keys(maps.All(m)) + keys := slices.Collect(seq) + want := slices.Collect(maps.Keys(m)) + + slices.Sort(keys) + slices.Sort(want) + if !slices.Equal(keys, want) { + t.Errorf("Keys() = %v, want %v", keys, want) + } +} + +func TestValue(t *testing.T) { + m := map[string]int{"a": 1, "b": 2, "c": 3} + seq := Value(maps.All(m)) + values := slices.Collect(seq) + want := slices.Collect(maps.Values(m)) + + // unordered compare + slices.Sort(values) + slices.Sort(want) + if !slices.Equal(values, want) { + t.Errorf("Values() = %v, want %v", values, want) + } +} + +func TestSet_Add_Has_Del(t *testing.T) { + s := NewSet[int]() + if s.Has(10) { + t.Errorf("Set should not contain 10 initially") + } + s.Add(10) + if !s.Has(10) { + t.Errorf("Set should contain 10 after Add") + } + s.Del(10) + if s.Has(10) { + t.Errorf("Set should not contain 10 after Del") + } +} + +func TestSet_All(t *testing.T) { + s := NewSet[string]() + s.Add("x") + s.Add("y") + s.Add("z") + + got := slices.Collect(s.All()) + want := []string{"x", "y", "z"} + + slices.Sort(got) + slices.Sort(want) + if !slices.Equal(got, want) { + t.Errorf("Set.All() = %v, want %v", got, want) + } +} |