fix: Fixed decoding for empty files and added temporary directories to tests
This commit is contained in:
		@@ -1,7 +1,9 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"math/rand"
 | 
						"math/rand"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9,18 +11,36 @@ import (
 | 
				
			|||||||
	"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
						"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func setupStorageDir() string {
 | 
				
			||||||
 | 
						dir, err := os.MkdirTemp("", "spatial-db-persistence")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fmt.Printf("Temporary directory is at %s\n", dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						storage.ChunkFileDirectory = dir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return dir
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func BenchmarkInsertSomePoints(b *testing.B) {
 | 
					func BenchmarkInsertSomePoints(b *testing.B) {
 | 
				
			||||||
	var server storage.SimpleServer
 | 
						var server storage.SimpleServer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						stdDev := 65536
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						storage.ChunkFileDirectory = setupStorageDir()
 | 
				
			||||||
 | 
						defer os.RemoveAll(storage.ChunkFileDirectory)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	points := make([]world.BlockPos, b.N)
 | 
						points := make([]world.BlockPos, b.N)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
 | 
						r := rand.New(rand.NewSource(time.Now().UnixNano()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i := 0; i < b.N; i++ {
 | 
						for i := 0; i < b.N; i++ {
 | 
				
			||||||
		points[i] = world.BlockPos{
 | 
							points[i] = world.BlockPos{
 | 
				
			||||||
			X: int(r.NormFloat64()),
 | 
								X: int(r.NormFloat64() * float64(stdDev)),
 | 
				
			||||||
			Y: uint(r.NormFloat64()),
 | 
								Y: uint(r.NormFloat64() * float64(stdDev)),
 | 
				
			||||||
			Z: int(r.NormFloat64()),
 | 
								Z: int(r.NormFloat64() * float64(stdDev)),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,4 +51,6 @@ func BenchmarkInsertSomePoints(b *testing.B) {
 | 
				
			|||||||
			b.Error(err)
 | 
								b.Error(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fmt.Println(os.ReadDir(storage.ChunkFileDirectory))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,10 @@ import (
 | 
				
			|||||||
	"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
						"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						ChunkFileDirectory = "./persistence"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ReadChunkFromFile(chunkFile *os.File) (world.ChunkData, error) {
 | 
					func ReadChunkFromFile(chunkFile *os.File) (world.ChunkData, error) {
 | 
				
			||||||
	var chunkData world.ChunkData
 | 
						var chunkData world.ChunkData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"io/fs"
 | 
						"io/fs"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
						"git.nicholasnovak.io/nnovak/spatial-db/world"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -17,7 +18,7 @@ type SimpleServer struct {
 | 
				
			|||||||
// Filesystem operations
 | 
					// Filesystem operations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
					func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
				
			||||||
	chunkFileName := pos.ToFileName()
 | 
						chunkFileName := filepath.Join(ChunkFileDirectory, pos.ToFileName())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var chunkData world.ChunkData
 | 
						var chunkData world.ChunkData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,6 +35,10 @@ func (s *SimpleServer) FetchChunk(pos world.ChunkPos) (world.ChunkData, error) {
 | 
				
			|||||||
			if err := json.NewEncoder(chunkFile).Encode(chunkData); err != nil {
 | 
								if err := json.NewEncoder(chunkFile).Encode(chunkData); err != nil {
 | 
				
			||||||
				return chunkData, err
 | 
									return chunkData, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if _, err := chunkFile.Seek(0, 0); err != nil {
 | 
				
			||||||
 | 
									return chunkData, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			return chunkData, err
 | 
								return chunkData, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user