From 726997d799edc388cd448e978d5bb0755aaa551c Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Tue, 7 Jul 2026 16:46:32 -0400 Subject: feat: bitpacked and base64 encoded VisitedRooms in player YAML to keep the file human readable --- internal/player/roomset_test.go | 87 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 internal/player/roomset_test.go (limited to 'internal/player/roomset_test.go') diff --git a/internal/player/roomset_test.go b/internal/player/roomset_test.go new file mode 100644 index 0000000..2b6b9cb --- /dev/null +++ b/internal/player/roomset_test.go @@ -0,0 +1,87 @@ +package player + +import ( + "strings" + "testing" + + "gopkg.in/yaml.v3" +) + +func TestRoomSetYAMLRoundTrip(t *testing.T) { + stats := PlayerStats{ + RoomsVisited: NewRoomSetFrom(1, 5, 300), + MobKills: map[string]int{"rat": 3}, + TotalKills: 3, + Deaths: 0, + } + data, err := yaml.Marshal(stats) + if err != nil { + t.Fatalf("marshal: %v", err) + } + out := string(data) + if !strings.Contains(out, "rooms_visited:") { + t.Fatalf("expected rooms_visited key in output:\n%s", out) + } + + var loaded PlayerStats + if err := yaml.Unmarshal(data, &loaded); err != nil { + t.Fatalf("unmarshal: %v", err) + } + if loaded.RoomsVisited.Len() != 3 { + t.Errorf("Len = %d, want 3", loaded.RoomsVisited.Len()) + } + for _, id := range []int{1, 5, 300} { + if !loaded.RoomsVisited.Has(id) { + t.Errorf("expected Has(%d) == true", id) + } + } + if loaded.RoomsVisited.Has(2) { + t.Error("expected Has(2) == false") + } +} + +func TestRoomSetOmitEmpty(t *testing.T) { + stats := PlayerStats{} + data, err := yaml.Marshal(stats) + if err != nil { + t.Fatalf("marshal: %v", err) + } + out := string(data) + if strings.Contains(out, "rooms_visited:") { + t.Errorf("expected rooms_visited to be absent for empty set:\n%s", out) + } + + var loaded PlayerStats + if err := yaml.Unmarshal(data, &loaded); err != nil { + t.Fatalf("unmarshal: %v", err) + } + if loaded.RoomsVisited.Len() != 0 { + t.Errorf("Len = %d, want 0", loaded.RoomsVisited.Len()) + } +} + +func TestRoomSetIsZero(t *testing.T) { + var zero RoomSet + if !zero.IsZero() { + t.Error("zero value should be IsZero") + } + visited := NewRoomSetFrom(1) + if visited.IsZero() { + t.Error("non-empty set should not be IsZero") + } +} + +func TestRoomSetMarshalEmpty(t *testing.T) { + var rs RoomSet + v, err := rs.MarshalYAML() + if err != nil { + t.Fatalf("MarshalYAML: %v", err) + } + s, ok := v.(string) + if !ok { + t.Fatalf("MarshalYAML returned %T, want string", v) + } + if s != "" { + t.Errorf("MarshalYAML empty = %q, want empty string", s) + } +} -- cgit v1.2.3