memberstore_test.gno
2.58 Kb ยท 124 lines
1package memberstore
2
3import (
4 "strconv"
5 "testing"
6
7 "gno.land/p/nt/urequire"
8)
9
10func TestPower(t *testing.T) {
11 ms := NewMembersByTier()
12 addMembers(ms, 100, T1)
13 addMembers(ms, 100, T2)
14 addMembers(ms, 100, T3)
15
16 Tiers.Iterate("", "", func(key string, value interface{}) bool {
17 po := value.(Tier).PowerHandler(ms, Tiers)
18 if key == T1 && po != 3.0 {
19 t.Fatal("wrong value for T1")
20 }
21 if key == T2 && po != 2.0 {
22 t.Fatal("wrong value for T2")
23 }
24 if key == T3 && po != 1.0 {
25 t.Fatal("wrong value for T3")
26 }
27
28 return false
29 })
30
31 ms = NewMembersByTier()
32 addMembers(ms, 100, T1)
33 addMembers(ms, 50, T2)
34 addMembers(ms, 10, T3)
35
36 Tiers.Iterate("", "", func(key string, value interface{}) bool {
37 po := value.(Tier).PowerHandler(ms, Tiers)
38 if key == T1 && po != 3.0 {
39 t.Fatal("wrong value for T1")
40 }
41 if key == T2 && po != 2.0 {
42 t.Fatal("wrong value for T2")
43 }
44 if key == T3 && po != 1.0 {
45 t.Fatal("wrong value for T3")
46 }
47
48 return false
49 })
50
51 ms = NewMembersByTier()
52 addMembers(ms, 100, T1)
53 addMembers(ms, 200, T2)
54 addMembers(ms, 100, T3)
55
56 Tiers.Iterate("", "", func(key string, value interface{}) bool {
57 po := value.(Tier).PowerHandler(ms, Tiers)
58 if key == T1 && po != 3.0 {
59 t.Fatal("wrong value for T1")
60 }
61 if key == T2 && po != 1.0 {
62 t.Fatal("wrong value for T2")
63 }
64 if key == T3 && po != 1.0 {
65 t.Fatal("wrong value for T3")
66 }
67
68 return false
69 })
70
71 ms = NewMembersByTier()
72 addMembers(ms, 100, T1)
73 addMembers(ms, 200, T2)
74 addMembers(ms, 1000, T3)
75
76 Tiers.Iterate("", "", func(key string, value interface{}) bool {
77 po := value.(Tier).PowerHandler(ms, Tiers)
78 if key == T1 && po != 3.0 {
79 t.Fatal("wrong value for T1")
80 }
81 if key == T2 && po != 1.0 {
82 t.Fatal("wrong value for T2")
83 }
84 if key == T3 && po != 0.1 {
85 t.Fatal("wrong value for T3")
86 }
87
88 return false
89 })
90}
91
92func TestCreateMembers(t *testing.T) {
93 ms := NewMembersByTier()
94 println("adding members...")
95 addMembers(ms, 10, "T1")
96 println("added T1")
97 addMembers(ms, 100, "T2")
98 println("added T2")
99 addMembers(ms, 1000, "T3")
100 println("added T3")
101
102 m, tier := ms.GetMember(address("11T3"))
103 urequire.Equal(t, "T3", tier)
104
105 m, tier = ms.GetMember(address("2000T1"))
106 urequire.Equal(t, "", tier)
107 if m != nil {
108 t.Fatal("member must be nil if not found")
109 }
110
111 tier = ms.RemoveMember(address("1T1"))
112 urequire.Equal(t, "T1", tier)
113}
114
115func addMembers(ms MembersByTier, c int, tier string) {
116 // mt := avl.NewTree() XXX
117 ms.SetTier(tier)
118 for i := 0; i < c; i++ {
119 addr := address(strconv.Itoa(i) + tier)
120 if err := ms.SetMember(tier, addr, &Member{}); err != nil {
121 panic(err.Error())
122 }
123 }
124}