minor modernizations
This commit is contained in:
parent
249bb4f3c1
commit
9fd69fba38
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,7 +570,7 @@ func TestGetClassProgression(t *testing.T) {
|
|||||||
// Test final class progression
|
// Test final class progression
|
||||||
guardianProgression := utils.GetClassProgression(ClassGuardian)
|
guardianProgression := utils.GetClassProgression(ClassGuardian)
|
||||||
expected := []int8{ClassCommoner, ClassFighter, ClassWarrior, ClassGuardian}
|
expected := []int8{ClassCommoner, ClassFighter, ClassWarrior, ClassGuardian}
|
||||||
|
|
||||||
if len(guardianProgression) != len(expected) {
|
if len(guardianProgression) != len(expected) {
|
||||||
t.Errorf("Guardian progression length = %d, want %d", 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)
|
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)
|
||||||
@ -1243,7 +1241,7 @@ func TestRegisterClassUsage(t *testing.T) {
|
|||||||
|
|
||||||
// Register usage for valid class
|
// Register usage for valid class
|
||||||
manager.RegisterClassUsage(ClassWarrior)
|
manager.RegisterClassUsage(ClassWarrior)
|
||||||
|
|
||||||
stats := manager.GetClassUsageStats()
|
stats := manager.GetClassUsageStats()
|
||||||
if stats[ClassWarrior] != 1 {
|
if stats[ClassWarrior] != 1 {
|
||||||
t.Errorf("Usage count for Warrior should be 1, got %d", stats[ClassWarrior])
|
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
|
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,19 +1686,17 @@ 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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user