package memberstore import ( "std" "strconv" "testing" "gno.land/p/demo/urequire" ) func TestPower(t *testing.T) { ms := NewMembersByTier() addMembers(ms, 100, T1) addMembers(ms, 100, T2) addMembers(ms, 100, T3) Tiers.Iterate("", "", func(key string, value interface{}) bool { po := value.(Tier).PowerHandler(ms, Tiers) if key == T1 && po != 3.0 { t.Fatal("wrong value for T1") } if key == T2 && po != 2.0 { t.Fatal("wrong value for T2") } if key == T3 && po != 1.0 { t.Fatal("wrong value for T3") } return false }) ms = NewMembersByTier() addMembers(ms, 100, T1) addMembers(ms, 50, T2) addMembers(ms, 10, T3) Tiers.Iterate("", "", func(key string, value interface{}) bool { po := value.(Tier).PowerHandler(ms, Tiers) if key == T1 && po != 3.0 { t.Fatal("wrong value for T1") } if key == T2 && po != 2.0 { t.Fatal("wrong value for T2") } if key == T3 && po != 1.0 { t.Fatal("wrong value for T3") } return false }) ms = NewMembersByTier() addMembers(ms, 100, T1) addMembers(ms, 200, T2) addMembers(ms, 100, T3) Tiers.Iterate("", "", func(key string, value interface{}) bool { po := value.(Tier).PowerHandler(ms, Tiers) if key == T1 && po != 3.0 { t.Fatal("wrong value for T1") } if key == T2 && po != 1.0 { t.Fatal("wrong value for T2") } if key == T3 && po != 1.0 { t.Fatal("wrong value for T3") } return false }) ms = NewMembersByTier() addMembers(ms, 100, T1) addMembers(ms, 200, T2) addMembers(ms, 1000, T3) Tiers.Iterate("", "", func(key string, value interface{}) bool { po := value.(Tier).PowerHandler(ms, Tiers) if key == T1 && po != 3.0 { t.Fatal("wrong value for T1") } if key == T2 && po != 1.0 { t.Fatal("wrong value for T2") } if key == T3 && po != 0.1 { t.Fatal("wrong value for T3") } return false }) } func TestCreateMembers(t *testing.T) { ms := NewMembersByTier() println("adding members...") addMembers(ms, 10, "T1") println("added T1") addMembers(ms, 100, "T2") println("added T2") addMembers(ms, 1000, "T3") println("added T3") m, tier := ms.GetMember(std.Address("11T3")) urequire.Equal(t, "T3", tier) m, tier = ms.GetMember(std.Address("2000T1")) urequire.Equal(t, "", tier) if m != nil { t.Fatal("member must be nil if not found") } tier = ms.RemoveMember(std.Address("1T1")) urequire.Equal(t, "T1", tier) } func addMembers(ms MembersByTier, c int, tier string) { // mt := avl.NewTree() XXX ms.SetTier(tier) for i := 0; i < c; i++ { addr := std.Address(strconv.Itoa(i) + tier) if err := ms.SetMember(tier, addr, &Member{}); err != nil { panic(err.Error()) } } }