66 lines
2.1 KiB
Go
66 lines
2.1 KiB
Go
package worldgen
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
// TestLoadRuinedPortalTemplate loads a real vanilla template from the
|
|
// extracted datapack data and checks that every block resolves and that the
|
|
// transform keeps points inside the rotated bounding box.
|
|
func TestLoadRuinedPortalTemplate(t *testing.T) {
|
|
path := filepath.Join("data", "structure_template", "ruined_portal", "portal_1.nbt")
|
|
if _, err := os.Stat(path); err != nil {
|
|
t.Skipf("template data not installed: %v", err)
|
|
}
|
|
blocks, size, err := LoadResolvedTemplate(path, func(name string, props map[string]string) (uint16, bool) {
|
|
// The resolver is not under test here; accept every palette entry.
|
|
return 1, true
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(blocks) == 0 {
|
|
t.Fatal("template parsed to zero blocks")
|
|
}
|
|
if size[0] <= 0 || size[1] <= 0 || size[2] <= 0 {
|
|
t.Fatalf("implausible size %v", size)
|
|
}
|
|
for _, b := range blocks {
|
|
if b.Pos[0] < 0 || b.Pos[0] >= size[0] || b.Pos[1] < 0 || b.Pos[1] >= size[1] || b.Pos[2] < 0 || b.Pos[2] >= size[2] {
|
|
t.Fatalf("block %v outside size %v", b.Pos, size)
|
|
}
|
|
}
|
|
|
|
pivot := [3]int{size[0] / 2, 0, size[2] / 2}
|
|
for rotation := 0; rotation < 4; rotation++ {
|
|
for _, mirror := range []string{"none", "front_back"} {
|
|
for _, b := range blocks {
|
|
out := TransformBlockPos(b.Pos, mirror, rotation, pivot)
|
|
if out[1] != b.Pos[1] {
|
|
t.Fatalf("transform moved Y: %v -> %v", b.Pos, out)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// A clockwise quarter turn around the pivot maps (x,z) per the bytecode's
|
|
// target-172 formula: x' = px + pz - z, z' = pz - px + x.
|
|
got := TransformBlockPos([3]int{0, 5, 3}, "none", 1, pivot)
|
|
wantX := pivot[0] + pivot[2] - 3
|
|
wantZ := pivot[1]*0 + pivot[2] - pivot[0] + 0
|
|
if got[0] != wantX || got[2] != wantZ {
|
|
t.Fatalf("clockwise_90 of (0,5,3) = %v, want (%d,5,%d)", got, wantX, wantZ)
|
|
}
|
|
}
|
|
|
|
func TestMthGetSeedMatchesKnownShape(t *testing.T) {
|
|
// Sanity only: the seed is signed arithmetic; assert determinism plus the
|
|
// documented shift structure.
|
|
a := MthGetSeed(10, -40, 7)
|
|
b := MthGetSeed(10, -40, 7)
|
|
if a != b {
|
|
t.Fatalf("positional seed unstable: %d vs %d", a, b)
|
|
}
|
|
}
|