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