6 "github.com/mjl-/mox/store"
9func TestNumSetContains(t *testing.T) {
10 num := func(v uint32) *setNumber {
11 return &setNumber{v, false}
13 star := &setNumber{star: true}
15 check := func(v bool) {
22 ss0 := numSet{true, nil} // "$"
23 check(ss0.containsSeq(1, []store.UID{2}, []store.UID{2}))
24 check(!ss0.containsSeq(1, []store.UID{2}, []store.UID{}))
26 ss1 := numSet{false, []numRange{{*num(1), nil}}} // Single number 1.
27 check(ss1.containsSeq(1, []store.UID{2}, nil))
28 check(!ss1.containsSeq(2, []store.UID{1, 2}, nil))
30 check(ss1.containsSeq(1, []store.UID{2}, nil))
31 check(!ss1.containsSeq(2, []store.UID{1, 2}, nil))
34 ss2 := numSet{false, []numRange{{*num(2), star}}}
35 check(ss2.containsSeq(1, []store.UID{2}, nil))
36 check(!ss2.containsSeq(2, []store.UID{2}, nil))
37 check(ss2.containsSeq(2, []store.UID{4, 5}, nil))
38 check(ss2.containsSeq(3, []store.UID{4, 5, 6}, nil))
39 check(!ss2.containsSeq(4, []store.UID{4, 5, 6}, nil))
42 ss3 := numSet{false, []numRange{{*star, num(2)}}}
43 check(ss3.containsSeq(1, []store.UID{2}, nil))
44 check(!ss3.containsSeq(2, []store.UID{2}, nil))
45 check(ss3.containsSeq(2, []store.UID{4, 5}, nil))
46 check(ss3.containsSeq(3, []store.UID{4, 5, 6}, nil))
47 check(!ss3.containsSeq(4, []store.UID{4, 5, 6}, nil))
50func TestNumSetInterpret(t *testing.T) {
51 parseNumSet := func(s string) numSet {
53 return p.xnumSet0(true, false)
56 checkEqual := func(lastUID store.UID, a, s string) {
58 n := parseNumSet(a).xinterpretStar(func() store.UID { return lastUID })
61 t.Fatalf("%s != %s", ns, s)
65 checkEqual(0, "1:*", "0:1")
66 checkEqual(1, "1:*", "1")
67 checkEqual(3, "1:*", "1:3")
68 checkEqual(3, "4:*", "3:4")
69 checkEqual(3, "*:4", "3:4")
70 checkEqual(3, "*:4", "3:4")
71 checkEqual(3, "*:1", "1:3")
72 checkEqual(3, "1:*", "1:3")
73 checkEqual(3, "1,2,3", "1,2,3")
74 checkEqual(0, "1,2,3", "1,2,3")
75 checkEqual(0, "1:3", "1:3")
76 checkEqual(0, "3:1", "1:3")
78 iter := parseNumSet("3:1").xinterpretStar(func() store.UID { return 2 }).newIter()
83 if v0 != 1 || v1 != 2 || v2 != 3 || ok {
84 t.Fatalf("got %v %v %v %v, expected 1, 2, 3 false", v0, v1, v2, ok)