minor modernizations

This commit is contained in:
Sky Johnson 2025-08-01 16:54:53 -05:00
parent 249bb4f3c1
commit 9fd69fba38

View File

@ -1,11 +1,9 @@
package classes
import (
"math/rand"
"strings"
"sync"
"testing"
"time"
)
// Mock entity implementations for testing
@ -78,10 +76,10 @@ func TestGetClassID(t *testing.T) {
classes := NewClasses()
tests := []struct {
name string
input string
expectedID int8
shouldBeValid bool
name string
input string
expectedID int8
shouldBeValid bool
}{
{"Valid class name", "WARRIOR", ClassWarrior, true},
{"Valid class name lowercase", "warrior", ClassWarrior, true},
@ -122,7 +120,7 @@ func TestGetClassName(t *testing.T) {
{ClassWizard, ClassNameWizard},
{ClassRanger, ClassNameRanger},
{ClassArmorer, ClassNameArmorer},
{-1, ""}, // Invalid class ID
{-1, ""}, // Invalid class ID
{100, ""}, // Invalid class ID
}
@ -140,15 +138,15 @@ func TestGetClassNameCase(t *testing.T) {
classes := NewClasses()
tests := []struct {
classID int8
expectedDisplay string
classID int8
expectedDisplay string
}{
{ClassWarrior, DisplayNameWarrior},
{ClassCleric, DisplayNameCleric},
{ClassWizard, DisplayNameWizard},
{ClassRanger, DisplayNameRanger},
{ClassArmorer, DisplayNameArmorer},
{-1, ""}, // Invalid class ID
{-1, ""}, // Invalid class ID
{100, ""}, // Invalid class ID
}
@ -198,7 +196,7 @@ func TestGetSecondaryBaseClass(t *testing.T) {
classes := NewClasses()
tests := []struct {
classID int8
classID int8
expectedSecondaryBase int8
}{
{ClassGuardian, ClassWarrior},
@ -358,7 +356,7 @@ func TestGetClassType(t *testing.T) {
{ClassArtisan, ClassTypeTradeskill},
{ClassCraftsman, ClassTypeTradeskill},
{ClassAlchemist, ClassTypeTradeskill},
{-1, ClassTypeSpecial}, // Invalid class
{-1, ClassTypeSpecial}, // Invalid class
{100, ClassTypeSpecial}, // Invalid class
}
@ -572,7 +570,7 @@ func TestGetClassProgression(t *testing.T) {
// Test final class progression
guardianProgression := utils.GetClassProgression(ClassGuardian)
expected := []int8{ClassCommoner, ClassFighter, ClassWarrior, ClassGuardian}
if len(guardianProgression) != len(expected) {
t.Errorf("Guardian progression length = %d, want %d", len(guardianProgression), len(expected))
}
@ -733,8 +731,8 @@ func TestGetClassStatistics(t *testing.T) {
adventureClasses := stats["adventure_classes"].(int)
tradeskillClasses := stats["tradeskill_classes"].(int)
if totalClasses != adventureClasses + tradeskillClasses {
t.Errorf("Total classes (%d) should equal adventure (%d) + tradeskill (%d)",
if totalClasses != adventureClasses+tradeskillClasses {
t.Errorf("Total classes (%d) should equal adventure (%d) + tradeskill (%d)",
totalClasses, adventureClasses, tradeskillClasses)
}
}
@ -1052,10 +1050,10 @@ func TestGetEntitiesByBaseClass(t *testing.T) {
integration := NewClassIntegration()
entities := []ClassAware{
NewMockClassAware(ClassWarrior), // Fighter base
NewMockClassAware(ClassGuardian), // Fighter base
NewMockClassAware(ClassCleric), // Priest base
NewMockClassAware(ClassWizard), // Mage base
NewMockClassAware(ClassWarrior), // Fighter base
NewMockClassAware(ClassGuardian), // Fighter base
NewMockClassAware(ClassCleric), // Priest base
NewMockClassAware(ClassWizard), // Mage base
}
fighters := integration.GetEntitiesByBaseClass(entities, ClassFighter)
@ -1068,10 +1066,10 @@ func TestGetEntitiesByClassType(t *testing.T) {
integration := NewClassIntegration()
entities := []ClassAware{
NewMockClassAware(ClassWarrior), // Adventure
NewMockClassAware(ClassCleric), // Adventure
NewMockClassAware(ClassArmorer), // Tradeskill
NewMockClassAware(ClassAlchemist), // Tradeskill
NewMockClassAware(ClassWarrior), // Adventure
NewMockClassAware(ClassCleric), // Adventure
NewMockClassAware(ClassArmorer), // Tradeskill
NewMockClassAware(ClassAlchemist), // Tradeskill
}
adventurers := integration.GetEntitiesByClassType(entities, ClassTypeAdventure)
@ -1243,7 +1241,7 @@ func TestRegisterClassUsage(t *testing.T) {
// Register usage for valid class
manager.RegisterClassUsage(ClassWarrior)
stats := manager.GetClassUsageStats()
if stats[ClassWarrior] != 1 {
t.Errorf("Usage count for Warrior should be 1, got %d", stats[ClassWarrior])
@ -1545,7 +1543,7 @@ func TestClassesConcurrency(t *testing.T) {
var wg sync.WaitGroup
// Concurrent reads
for i := 0; i < 100; i++ {
for i := range 100 {
wg.Add(1)
go func(classID int8) {
defer wg.Done()
@ -1571,7 +1569,7 @@ func TestClassManagerConcurrency(t *testing.T) {
var wg sync.WaitGroup
// Concurrent usage registration
for i := 0; i < 100; i++ {
for i := range 100 {
wg.Add(1)
go func(classID int8) {
defer wg.Done()
@ -1580,7 +1578,7 @@ func TestClassManagerConcurrency(t *testing.T) {
}
// Concurrent stats reading
for i := 0; i < 50; i++ {
for range 50 {
wg.Add(1)
go func() {
defer wg.Done()
@ -1609,7 +1607,7 @@ func TestMockEntitiesConcurrency(t *testing.T) {
var wg sync.WaitGroup
// Concurrent reads and writes
for i := 0; i < 100; i++ {
for i := range 100 {
wg.Add(1)
go func(classID int8) {
defer wg.Done()
@ -1631,64 +1629,56 @@ func TestMockEntitiesConcurrency(t *testing.T) {
// Benchmarks
func BenchmarkGetClassID(b *testing.B) {
classes := NewClasses()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
classes.GetClassID("WARRIOR")
}
}
func BenchmarkGetClassName(b *testing.B) {
classes := NewClasses()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
classes.GetClassName(ClassWarrior)
}
}
func BenchmarkGetBaseClass(b *testing.B) {
classes := NewClasses()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
classes.GetBaseClass(ClassGuardian)
}
}
func BenchmarkGetAllClasses(b *testing.B) {
classes := NewClasses()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
classes.GetAllClasses()
}
}
func BenchmarkParseClassName(b *testing.B) {
utils := NewClassUtils()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
utils.ParseClassName("WARRIOR")
}
}
func BenchmarkGetRandomClassByType(b *testing.B) {
utils := NewClassUtils()
rand.Seed(time.Now().UnixNano())
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
utils.GetRandomClassByType(ClassTypeAdventure)
}
}
func BenchmarkRegisterClassUsage(b *testing.B) {
manager := NewClassManager()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
manager.RegisterClassUsage(ClassWarrior)
}
}
@ -1696,19 +1686,17 @@ func BenchmarkRegisterClassUsage(b *testing.B) {
func BenchmarkValidateEntityClass(b *testing.B) {
integration := NewClassIntegration()
entity := NewMockClassAware(ClassWarrior)
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
integration.ValidateEntityClass(entity)
}
}
func BenchmarkMockClassAwareGetSet(b *testing.B) {
entity := NewMockClassAware(ClassWarrior)
b.ResetTimer()
for i := 0; i < b.N; i++ {
for b.Loop() {
entity.SetClass(ClassCleric)
entity.GetClass()
}
}
}