Files
strom/mc/data/multi_noise_test.go
T
2026-07-16 01:13:31 +02:00

77 lines
1.9 KiB
Go

package data
import (
"math"
"testing"
)
func TestLoadMultiNoise(t *testing.T) {
for _, version := range []string{"1.21.8", "1.21.9", "1.21.11"} {
data, err := LoadMultiNoise(version)
if err != nil {
t.Fatalf("LoadMultiNoise(%q): %v", version, err)
}
if len(data.Presets[MultiNoiseOverworld]) == 0 {
t.Errorf("%s: overworld preset empty", version)
}
if len(data.Presets[MultiNoiseNether]) == 0 {
t.Errorf("%s: nether preset empty", version)
}
}
}
func TestMultiNoiseLookup_NetherOrigin(t *testing.T) {
data, err := LoadMultiNoise("1.21.11")
if err != nil {
t.Fatalf("LoadMultiNoise: %v", err)
}
biome, err := data.Lookup(MultiNoiseNether, 0, 0, 0, 0, 0, 0)
if err != nil {
t.Fatalf("Lookup: %v", err)
}
if biome != "minecraft:nether_wastes" {
t.Errorf("nether origin = %s, want minecraft:nether_wastes", biome)
}
}
func TestMultiNoiseLookup_BVHMatchesBruteForce(t *testing.T) {
data, err := LoadMultiNoise("1.21.11")
if err != nil {
t.Fatalf("LoadMultiNoise: %v", err)
}
brute := func(preset string, q point6) (string, int64) {
best := result{dist: int64(math.MaxInt64)}
for _, p := range data.Presets[preset] {
d := q.dist(p)
if d < best.dist {
best.dist = d
best.biome = p.Biome
}
}
return best.biome, best.dist
}
presets := []string{MultiNoiseOverworld, MultiNoiseNether}
for _, preset := range presets {
for i := 0; i < 1000; i++ {
q := point6{
t: int64(i%20000 - 10000),
h: int64((i*7)%20000 - 10000),
c: int64((i*13)%20000 - 10000),
e: int64((i*17)%20000 - 10000),
d: int64((i*3)%20000 - 10000),
w: int64((i*11)%20000 - 10000),
}
wantBiome, wantDist := brute(preset, q)
gotBiome, err := data.Lookup(preset, q.t, q.h, q.c, q.e, q.d, q.w)
if err != nil {
t.Fatalf("Lookup(%s): %v", preset, err)
}
if gotBiome != wantBiome {
t.Errorf("preset=%s query=%+v got=%s want=%s dist=%d", preset, q, gotBiome, wantBiome, wantDist)
}
}
}
}