spatial-db/storage/unity_file_test.go
2023-12-13 23:48:53 -08:00

181 lines
3.8 KiB
Go

package storage
import (
"fmt"
"os"
"path"
"reflect"
"testing"
"github.com/NickyBoy89/spatial-db/world"
)
func TestCreateUnityFile(t *testing.T) {
tempDir, err := os.MkdirTemp("", "unity")
if err != nil {
t.Fatalf("Error creating temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
// Create an empty file
u, err := CreateUnityFile(path.Join(tempDir, "test-unity"))
if err != nil {
t.Fatalf("Error creating unity file: %v", err)
}
if u.Size() != 0 {
t.Fatalf("Expected size of file to be %v, got %v", 0, u.Size())
}
// Save the metadata
if err := u.WriteMetadataFile(path.Join(tempDir, "test-unity.metadata")); err != nil {
t.Fatalf("Got an error saving the empty metadata: %v", err)
}
}
func TestWriteSingleFile(t *testing.T) {
tempDir, err := os.MkdirTemp("", "unity")
if err != nil {
t.Fatalf("Error creating temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
u, err := CreateUnityFile(path.Join(tempDir, "test-unity"))
if err != nil {
t.Fatalf("Error creating unity file: %v", err)
}
// Write a single file
var data world.ChunkData
data.Sections[0].BlockStates[0] = 2
if err := u.WriteChunk(data); err != nil {
t.Fatalf("Error writing chunk: %v", err)
}
// Read the chunk back
readChunk, err := u.ReadChunk(data.Pos)
if err != nil {
t.Fatalf("Error reading chunk: %v", err)
}
// Compare the chunks directly
if !reflect.DeepEqual(data, readChunk) {
t.Fatalf("Chunks differed, sent %v, received %v", data, readChunk)
}
}
func TestWriteMultipleFiles(t *testing.T) {
tempDir, err := os.MkdirTemp("", "unity")
if err != nil {
t.Fatalf("Error creating temporary directory: %v", err)
}
fmt.Println(tempDir)
defer os.RemoveAll(tempDir)
u, err := CreateUnityFile(path.Join(tempDir, "test-unity"))
if err != nil {
t.Fatalf("Error creating unity file: %v", err)
}
var (
chunk1 world.ChunkData
chunk2 world.ChunkData
chunk3 world.ChunkData
)
chunk1.Pos = world.ChunkPos{
X: 0,
Z: 0,
}
chunk1.Sections[0].BlockStates[0] = 2
chunk2.Sections[0].BlockStates[0] = 3
chunk2.Pos = world.ChunkPos{
X: 1,
Z: 0,
}
chunk3.Sections[0].BlockStates[0] = 4
chunk3.Pos = world.ChunkPos{
X: 2,
Z: 0,
}
chunks := []world.ChunkData{chunk1, chunk2, chunk3}
// Write all chunks
for _, data := range chunks {
if err := u.WriteChunk(data); err != nil {
t.Fatalf("Error writing chunk: %v", err)
}
}
// Read the chunks back
for _, data := range chunks {
readChunk, err := u.ReadChunk(data.Pos)
if err != nil {
t.Fatalf("Error reading chunk: %v", err)
}
// Compare the chunks directly
if !reflect.DeepEqual(data, readChunk) {
t.Fatalf("Chunks differed, sent %v, received %v", data, readChunk)
}
}
}
func TestReadAllChunks(t *testing.T) {
tempDir, err := os.MkdirTemp("", "unity")
if err != nil {
t.Fatalf("Error creating temporary directory: %v", err)
}
fmt.Println(tempDir)
defer os.RemoveAll(tempDir)
u, err := CreateUnityFile(path.Join(tempDir, "test-unity"))
if err != nil {
t.Fatalf("Error creating unity file: %v", err)
}
var (
chunk1 world.ChunkData
chunk2 world.ChunkData
chunk3 world.ChunkData
)
chunk1.Pos = world.ChunkPos{
X: 0,
Z: 0,
}
chunk1.Sections[0].BlockStates[0] = 2
chunk2.Sections[0].BlockStates[0] = 3
chunk2.Pos = world.ChunkPos{
X: 1,
Z: 0,
}
chunk3.Sections[0].BlockStates[0] = 4
chunk3.Pos = world.ChunkPos{
X: 2,
Z: 0,
}
chunks := []world.ChunkData{chunk1, chunk2, chunk3}
// Write all chunks
for _, data := range chunks {
if err := u.WriteChunk(data); err != nil {
t.Fatalf("Error writing chunk: %v", err)
}
}
t.Log(chunks)
readChunks, err := u.ReadAllChunks()
if err != nil {
t.Fatalf("Error reading chunks: %v", err)
}
for index, chunk := range readChunks {
if !reflect.DeepEqual(chunk, chunks[index]) {
t.Fatalf("Chunks were not equal")
}
}
}