PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/p/moul/addrset/v0

Package
Open in gnoweb ↗

Overview

Kind
Pure package
Name
v0
Namespace
moul / addrset
Files
5 (gnomod.toml)
Exported functions
n/a — not supported for pure packages by the node (vm/qfuncs)
Module
gno.land/p/moul/addrset/v0
gno
0.9

Files (5)

  • gnomod.tomltoml
  • addrset.gnogno
  • readonly.gnogno
  • addrset_test.gnogno
  • readonly_test.gnogno
addrset_test.gnogno
1package addrset23import (4	"testing"56	"gno.land/p/nt/uassert/v0"7)89func TestSet(t *testing.T) {10	addr1 := address("addr1")11	addr2 := address("addr2")12	addr3 := address("addr3")1314	tests := []struct {15		name    string16		actions func(s *Set)17		size    int18		has     map[address]bool19		addrs   []address // for iteration checks20	}{21		{22			name:    "empty set",23			actions: func(s *Set) {},24			size:    0,25			has:     map[address]bool{addr1: false},26		},27		{28			name: "single address",29			actions: func(s *Set) {30				s.Add(addr1)31			},32			size: 1,33			has: map[address]bool{34				addr1: true,35				addr2: false,36			},37			addrs: []address{addr1},38		},39		{40			name: "multiple addresses",41			actions: func(s *Set) {42				s.Add(addr1)43				s.Add(addr2)44				s.Add(addr3)45			},46			size: 3,47			has: map[address]bool{48				addr1: true,49				addr2: true,50				addr3: true,51			},52			addrs: []address{addr1, addr2, addr3},53		},54		{55			name: "remove address",56			actions: func(s *Set) {57				s.Add(addr1)58				s.Add(addr2)59				s.Remove(addr1)60			},61			size: 1,62			has: map[address]bool{63				addr1: false,64				addr2: true,65			},66			addrs: []address{addr2},67		},68		{69			name: "duplicate adds",70			actions: func(s *Set) {71				uassert.True(t, s.Add(addr1))     // first add returns true72				uassert.False(t, s.Add(addr1))    // second add returns false73				uassert.True(t, s.Remove(addr1))  // remove existing returns true74				uassert.False(t, s.Remove(addr1)) // remove non-existing returns false75			},76			size: 0,77			has: map[address]bool{78				addr1: false,79			},80		},81	}8283	for _, tt := range tests {84		t.Run(tt.name, func(t *testing.T) {85			var set Set8687			// Execute test actions88			tt.actions(&set)8990			// Check size91			uassert.Equal(t, tt.size, set.Size())9293			// Check existence94			for addr, expected := range tt.has {95				uassert.Equal(t, expected, set.Has(addr))96			}9798			// Check iteration if addresses are specified99			if tt.addrs != nil {100				collected := []address{}101				set.IterateByOffset(0, 10, func(addr address) bool {102					collected = append(collected, addr)103					return false104				})105106				// Check length107				uassert.Equal(t, len(tt.addrs), len(collected))108109				// Check each address110				for i, addr := range tt.addrs {111					uassert.Equal(t, addr, collected[i])112				}113			}114		})115	}116}117118func TestSetIterationLimits(t *testing.T) {119	tests := []struct {120		name     string121		addrs    []address122		offset   int123		limit    int124		expected int125	}{126		{127			name:     "zero offset full list",128			addrs:    []address{"a1", "a2", "a3"},129			offset:   0,130			limit:    10,131			expected: 3,132		},133		{134			name:     "offset with limit",135			addrs:    []address{"a1", "a2", "a3", "a4"},136			offset:   1,137			limit:    2,138			expected: 2,139		},140		{141			name:     "offset beyond size",142			addrs:    []address{"a1", "a2"},143			offset:   3,144			limit:    1,145			expected: 0,146		},147	}148149	for _, tt := range tests {150		t.Run(tt.name, func(t *testing.T) {151			var set Set152			for _, addr := range tt.addrs {153				set.Add(addr)154			}155156			// Test forward iteration157			count := 0158			set.IterateByOffset(tt.offset, tt.limit, func(addr address) bool {159				count++160				return false161			})162			uassert.Equal(t, tt.expected, count)163164			// Test reverse iteration165			count = 0166			set.ReverseIterateByOffset(tt.offset, tt.limit, func(addr address) bool {167				count++168				return false169			})170			uassert.Equal(t, tt.expected, count)171		})172	}173}174

Functions

not supported for pure packages by the node (vm/qfuncs)

Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.