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) } }