RegionIO/internal/world/decoration_region_test.go

84 lines
2.5 KiB
Go

package world
import (
"reflect"
"testing"
)
func TestDecorationRegionUsesAbsoluteNegativeCoordinates(t *testing.T) {
chunk := NewChunk(-1, -1, BiomePlains)
chunk.SetBlock(15, 12, 15, StateStone)
region, err := newDecorationRegion([]*Chunk{chunk})
if err != nil {
t.Fatal(err)
}
if got := region.getBlock(-1, 12, -1); got != StateStone {
t.Fatalf("block (-1,12,-1) = %d, want stone", got)
}
if biome, ok := region.getBiome(-1, 12, -1); !ok || biome != BiomePlains {
t.Fatalf("biome = %d, %v", biome, ok)
}
}
func TestDecorationRegionEnforcesSourceWriteRadius(t *testing.T) {
var chunks []*Chunk
for cx := int32(-2); cx <= 2; cx++ {
chunks = append(chunks, NewChunk(cx, 0, BiomePlains))
}
region, err := newDecorationRegion(chunks)
if err != nil {
t.Fatal(err)
}
if err := region.setSource(0, 0); err != nil {
t.Fatal(err)
}
if !region.setBlock(-1, 20, 0, StateStone) || !region.setBlock(31, 20, 0, StateDirt) {
t.Fatal("write inside source radius rejected")
}
if region.setBlock(-17, 20, 0, StateStone) || region.setBlock(32, 20, 0, StateStone) {
t.Fatal("write outside source radius accepted")
}
if got := region.getBlock(31, 20, 0); got != StateDirt {
t.Fatalf("shared region mutation = %d, want dirt", got)
}
}
func TestDecorationRegionHeightmapsMatchPlacementSemantics(t *testing.T) {
chunk := NewChunk(0, 0, BiomePlains)
chunk.SetBlock(2, 30, 3, StateStone)
chunk.SetBlock(2, 31, 3, StateWater)
region, err := newDecorationRegion([]*Chunk{chunk})
if err != nil {
t.Fatal(err)
}
if got := region.heightAt("WORLD_SURFACE", 2, 3); got != 32 {
t.Fatalf("WORLD_SURFACE = %d, want 32", got)
}
if got := region.heightAt("OCEAN_FLOOR", 2, 3); got != 31 {
t.Fatalf("OCEAN_FLOOR = %d, want 31", got)
}
if got := region.heightAt("MOTION_BLOCKING", 2, 3); got != 32 {
t.Fatalf("MOTION_BLOCKING = %d, want 32", got)
}
if got := region.heightAt("WORLD_SURFACE", 4, 5); got != MinY {
t.Fatalf("empty height = %d, want %d", got, MinY)
}
}
func TestDecorationRegionSourceBiomesUseThreeByThreeChunks(t *testing.T) {
center := NewChunk(0, 0, BiomePlains)
east := NewChunk(1, 0, biomeIDByName("minecraft:desert"))
outside := NewChunk(2, 0, biomeIDByName("minecraft:forest"))
region, err := newDecorationRegion([]*Chunk{center, east, outside})
if err != nil {
t.Fatal(err)
}
if err := region.setSource(0, 0); err != nil {
t.Fatal(err)
}
got := region.sourceBiomes()
want := []string{"minecraft:plains", "minecraft:desert"}
if !reflect.DeepEqual(got, want) {
t.Fatalf("source biomes = %v, want %v", got, want)
}
}