Mercurial > games > semicongine
view tests/test_storage.nim @ 1465:7b2ec9f3d0f6
add: external serialization library
author | sam <sam@basx.dev> |
---|---|
date | Wed, 26 Mar 2025 00:37:50 +0700 |
parents | 3e3192241ea7 |
children |
line wrap: on
line source
import std/strformat import ../semicongine import ../semicongine/storage proc testSimple(storage: StorageType) = const TEST_VALUE = 42 const KEY = "test" # get default assert storage.load(KEY, 0) == default(type(TEST_VALUE)) # save and load custom store(storage, KEY, TEST_VALUE) assert storage.load(KEY, 0) == TEST_VALUE proc testWorldAPI() = type Obj1 = object value: int type Obj2 = object value: string assert listWorlds().len == 0 const obj1 = Obj1(value: 42) "testWorld".storeWorld(obj1) assert listWorlds() == @["testWorld"] assert loadWorld[Obj1]("testWorld") == obj1 const obj2 = Obj2(value: "Hello world") "testWorld".storeWorld(obj2) assert listWorlds() == @["testWorld"] assert loadWorld[Obj2]("testWorld") == obj2 "earth".storeWorld(obj2) assert "earth" in listWorlds() assert "testWorld" in listWorlds() assert loadWorld[Obj2]("earth") == obj2 "earth".purgeWorld() assert listWorlds() == @["testWorld"] "testWorld".purgeWorld() assert listWorlds().len == 0 proc stressTest(storage: StorageType) = for i in 1 .. 10000: let key = &"key-{i}" store(storage, key, i) assert storage.load(key, 0) == i proc main() = initEngine("Test storage") SystemStorage.purge() echo "SystemStorage: Testing simple store/load" SystemStorage.testSimple() UserStorage.purge() echo "UserStorage: Testing simple store/load" UserStorage.testSimple() echo "Testing world-storage API" testWorldAPI() echo "Stress test with 10'000 saves/loads" SystemStorage.stressTest() SystemStorage.purge() UserStorage.purge() when isMainModule: main()