diff --git a/basic_functionality_test.go b/basic_functionality_test.go index 3719ca3..42f0a3d 100644 --- a/basic_functionality_test.go +++ b/basic_functionality_test.go @@ -1,19 +1,47 @@ package main import ( + "errors" + "io/fs" "math/rand" "os" "time" + log "github.com/sirupsen/logrus" + "git.nicholasnovak.io/nnovak/spatial-db/storage" "git.nicholasnovak.io/nnovak/spatial-db/world" ) -func populateStorageDir(dir string, maxSpread float64, numPoints int) string { +func populateStorageDir( + dirName string, + maxSpread float64, + numPoints int, + cleanup bool, +) { + log.Debug("Generating new storage directory") + + // Make sure that another directory is not already at that location + if _, err := os.Stat(dirName); err != nil { + if errors.Is(err, fs.ErrNotExist) { + log.Debugf("Making new directory at %s", dirName) + if err := os.Mkdir(dirName, 0755); err != nil { + panic(err) + } + } else { + panic(err) + } + } else { + log.Debug("Directory already exists, skipping generation") + return + } + var server storage.SimpleServer - server.StorageDir = dir - defer os.RemoveAll(server.StorageDir) + server.StorageDir = dirName + if cleanup { + defer os.RemoveAll(server.StorageDir) + } points := make([]world.BlockPos, numPoints) @@ -32,8 +60,7 @@ func populateStorageDir(dir string, maxSpread float64, numPoints int) string { panic(err) } } - - return server.StorageDir + log.Info("Done generating") } // func BenchmarkInsertSomePoints(b *testing.B) { diff --git a/scaling_test.go b/scaling_test.go index e7f5a01..b18a64d 100644 --- a/scaling_test.go +++ b/scaling_test.go @@ -7,16 +7,43 @@ import ( "git.nicholasnovak.io/nnovak/spatial-db/world" ) -func BenchmarkInsertSparsePoints(b *testing.B) { +var ( + emptyDir = "./empty" + smallSparseDir = "./small-sparse" + medSparseDir = "./med-sparse" + largeSparseDir = "./lg-sparse" + smallDenseDir = "./small-dense" + medDenseDir = "./med-dense" + largeDenseDir = "./lg-dense" +) + +const ( + sparse = 1_000 + dense = 10_000 +) + +var pointCounts = []int{200, 1_000, 2_500} + +var dirs = []string{emptyDir, smallSparseDir, medSparseDir, largeSparseDir, + smallDenseDir, medDenseDir, largeDenseDir} + +func init() { + for index, dir := range dirs { + if index > 2 { + populateStorageDir(dir, sparse, pointCounts[index%3], false) + } else { + populateStorageDir(dir, dense, pointCounts[index%3], false) + } + } +} + +func insertPointTemplate(testDir string, b *testing.B) { var server storage.SimpleServer - tempDir := "./data" + server.StorageDir = testDir - server.StorageDir = populateStorageDir(tempDir, 2048, 1_000) b.ResetTimer() - b.Log("Finished generating directory") - for i := 0; i < b.N; i++ { pos := world.RandomBlockPosWithRange(2048) if err := server.ChangeBlock(pos, world.Generic); err != nil { @@ -24,3 +51,27 @@ func BenchmarkInsertSparsePoints(b *testing.B) { } } } + +func BenchmarkSmallSparse(b *testing.B) { + insertPointTemplate(smallSparseDir, b) +} + +func BenchmarkMedSparse(b *testing.B) { + insertPointTemplate(medSparseDir, b) +} + +func BenchmarkLgSparse(b *testing.B) { + insertPointTemplate(largeSparseDir, b) +} + +func BenchmarkSmallDense(b *testing.B) { + insertPointTemplate(smallDenseDir, b) +} + +func BenchmarkMedDense(b *testing.B) { + insertPointTemplate(medDenseDir, b) +} + +func BenchmarkLgDense(b *testing.B) { + insertPointTemplate(largeDenseDir, b) +}