67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package world
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestPlacedOresUseStoneAndDeepslateTargets(t *testing.T) {
|
|
gen := NewVanillaGenerator(12345)
|
|
want := map[uint16]string{
|
|
131: "iron ore",
|
|
132: "deepslate iron ore",
|
|
5307: "diamond ore",
|
|
5308: "deepslate diamond ore",
|
|
}
|
|
counts := make(map[uint16]int)
|
|
for _, pos := range [][2]int32{{-8, -8}, {4, -4}} {
|
|
chunk := gen(pos[0], pos[1])
|
|
for y := MinY; y < 128; y++ {
|
|
for x := 0; x < 16; x++ {
|
|
for z := 0; z < 16; z++ {
|
|
counts[chunk.GetBlock(x, y, z)]++
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for state, name := range want {
|
|
if counts[state] == 0 {
|
|
t.Errorf("no %s generated by placed ore features", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPlacedOresAreDeterministic(t *testing.T) {
|
|
gen := NewVanillaGenerator(4242)
|
|
a, b := gen(3, -2), gen(3, -2)
|
|
for y := MinY; y < MinY+WorldHeight; y++ {
|
|
for x := 0; x < 16; x++ {
|
|
for z := 0; z < 16; z++ {
|
|
if got, want := a.GetBlock(x, y, z), b.GetBlock(x, y, z); got != want {
|
|
t.Fatalf("block (%d,%d,%d): first %d second %d", x, y, z, got, want)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestWalkOreBlocksUsesVanillaSphereOrder(t *testing.T) {
|
|
spheres := []oreSphere{
|
|
{x: 0.5, y: 0.5, z: 0.5, radius: 1.1},
|
|
{x: 1.5, y: 0.5, z: 0.5, radius: 1.1},
|
|
}
|
|
var got [][3]int
|
|
walkOreBlocks(spheres, func(x, y, z int) {
|
|
got = append(got, [3]int{x, y, z})
|
|
})
|
|
want := [][3]int{
|
|
{-1, 0, 0},
|
|
{0, -1, 0}, {0, 0, -1}, {0, 0, 0}, {0, 0, 1}, {0, 1, 0},
|
|
{1, 0, 0},
|
|
{1, -1, 0}, {1, 0, -1}, {1, 0, 1}, {1, 1, 0},
|
|
{2, 0, 0},
|
|
}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("walkOreBlocks = %v, want %v", got, want)
|
|
}
|
|
}
|