memberstore_test.gno

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