You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.8 KiB
Go

package model
import (
"math"
"testing"
"github.com/denisovdennis/autohero/internal/tuning"
)
func TestIlvlFactor_Geometric(t *testing.T) {
old := tuning.Get()
cfg := tuning.DefaultValues()
cfg.IlvlPerLevelMultiplier = 1.10
tuning.Set(cfg)
t.Cleanup(func() { tuning.Set(old) })
assertNear(t, IlvlFactor(1), 1.0, 1e-9)
assertNear(t, IlvlFactor(2), 1.10, 1e-9)
assertNear(t, IlvlFactor(10), math.Pow(1.10, 9), 1e-9)
}
func TestRarityMultiplier_DefaultsAndFallback(t *testing.T) {
old := tuning.Get()
cfg := tuning.DefaultValues()
cfg.RarityMultiplierCommon = 1.00
cfg.RarityMultiplierUncommon = 1.0877573
cfg.RarityMultiplierRare = 0
cfg.RarityMultiplierEpic = 1.2870518
cfg.RarityMultiplierLegendary = 1.40
tuning.Set(cfg)
t.Cleanup(func() { tuning.Set(old) })
assertNear(t, RarityMultiplier(RarityCommon), 1.00, 1e-9)
assertNear(t, RarityMultiplier(RarityUncommon), 1.0877573, 1e-9)
assertNear(t, RarityMultiplier(RarityEpic), 1.2870518, 1e-9)
assertNear(t, RarityMultiplier(RarityLegendary), 1.40, 1e-9)
fallbackRare := tuning.DefaultValues().RarityMultiplierRare
assertNear(t, RarityMultiplier(RarityRare), fallbackRare, 1e-9)
}
func TestScalePrimary_UsesIlvlAndRarity(t *testing.T) {
old := tuning.Get()
cfg := tuning.DefaultValues()
cfg.IlvlPerLevelMultiplier = 1.10
cfg.RarityMultiplierCommon = 1.00
cfg.RarityMultiplierLegendary = 1.40
tuning.Set(cfg)
t.Cleanup(func() { tuning.Set(old) })
if got := ScalePrimary(10, 2, RarityCommon); got != 11 {
t.Fatalf("ScalePrimary common ilvl2 = %d, want 11", got)
}
if got := ScalePrimary(10, 1, RarityLegendary); got != 14 {
t.Fatalf("ScalePrimary legendary ilvl1 = %d, want 14", got)
}
}
func assertNear(t *testing.T, got float64, want float64, eps float64) {
t.Helper()
if math.Abs(got-want) > eps {
t.Fatalf("got %.12f want %.12f (eps %.1e)", got, want, eps)
}
}