diff --git a/internal/classes/classes_test.go b/internal/classes/classes_test.go index dc7e784..a888eda 100644 --- a/internal/classes/classes_test.go +++ b/internal/classes/classes_test.go @@ -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() } -} \ No newline at end of file +}