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}