index_test.gno

2.33 Kb ยท 98 lines
 1package datastore
 2
 3import (
 4	"testing"
 5
 6	"gno.land/p/demo/uassert"
 7	"gno.land/p/moul/collection"
 8)
 9
10func TestNewIndex(t *testing.T) {
11	cases := []struct {
12		name    string
13		options collection.IndexOption
14		setup   func(Index) Index
15	}{
16		{
17			name:    "default",
18			options: DefaultIndexOptions,
19		},
20		{
21			name:    "unique",
22			options: DefaultIndexOptions | collection.UniqueIndex,
23			setup:   func(idx Index) Index { return idx.Unique() },
24		},
25		{
26			name:    "case insensitive",
27			options: DefaultIndexOptions | collection.CaseInsensitiveIndex,
28			setup:   func(idx Index) Index { return idx.CaseInsensitive() },
29		},
30		{
31			name:    "unique case insensitive",
32			options: DefaultIndexOptions | collection.CaseInsensitiveIndex | collection.UniqueIndex,
33			setup:   func(idx Index) Index { return idx.CaseInsensitive().Unique() },
34		},
35	}
36
37	for _, tc := range cases {
38		t.Run(tc.name, func(t *testing.T) {
39			name := "foo"
40			idx := NewIndex(name, func(Record) string { return "" })
41
42			if tc.setup != nil {
43				idx = tc.setup(idx)
44			}
45
46			uassert.Equal(t, name, idx.Name())
47			uassert.Equal(t, uint64(tc.options), uint64(idx.Options()))
48
49			_, ok := idx.Func().(func(interface{}) string)
50			uassert.True(t, ok)
51		})
52	}
53}
54
55func TestNewMultiIndex(t *testing.T) {
56	cases := []struct {
57		name    string
58		options collection.IndexOption
59		setup   func(Index) Index
60	}{
61		{
62			name:    "default",
63			options: DefaultIndexOptions,
64		},
65		{
66			name:    "unique",
67			options: DefaultIndexOptions | collection.UniqueIndex,
68			setup:   func(idx Index) Index { return idx.Unique() },
69		},
70		{
71			name:    "case insensitive",
72			options: DefaultIndexOptions | collection.CaseInsensitiveIndex,
73			setup:   func(idx Index) Index { return idx.CaseInsensitive() },
74		},
75		{
76			name:    "unique case insensitive",
77			options: DefaultIndexOptions | collection.CaseInsensitiveIndex | collection.UniqueIndex,
78			setup:   func(idx Index) Index { return idx.CaseInsensitive().Unique() },
79		},
80	}
81
82	for _, tc := range cases {
83		t.Run(tc.name, func(t *testing.T) {
84			name := "foo"
85			idx := NewMultiValueIndex(name, func(Record) []string { return nil })
86
87			if tc.setup != nil {
88				idx = tc.setup(idx)
89			}
90
91			uassert.Equal(t, name, idx.Name())
92			uassert.Equal(t, uint64(tc.options), uint64(idx.Options()))
93
94			_, ok := idx.Func().(func(interface{}) []string)
95			uassert.True(t, ok)
96		})
97	}
98}