annotate tests/test_storage.nim @ 1464:3e3192241ea7

add: API for world/level storage
author sam <sam@basx.dev>
date Mon, 24 Mar 2025 22:57:47 +0700
parents 676fc13685a9
children 7b2ec9f3d0f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1286
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
1 import std/strformat
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
2
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
3 import ../semicongine
1427
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
4 import ../semicongine/storage
1286
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
5
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
6 proc testSimple(storage: StorageType) =
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
7 const TEST_VALUE = 42
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
8 const KEY = "test"
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
9
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
10 # get default
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
11 assert storage.load(KEY, 0) == default(type(TEST_VALUE))
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
12
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
13 # save and load custom
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
14 store(storage, KEY, TEST_VALUE)
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
15 assert storage.load(KEY, 0) == TEST_VALUE
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
16
1464
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
17 proc testWorldAPI() =
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
18 assert listWorlds().len == 0
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
19
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
20 "testWorld".storeWorld(42)
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
21 assert listWorlds() == @["testWorld"]
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
22 assert loadWorld[int]("testWorld") == 42
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
23
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
24 "testWorld".storeWorld("hello")
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
25 assert listWorlds() == @["testWorld"]
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
26 assert loadWorld[string]("testWorld") == "hello"
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
27
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
28 "earth".storeWorld("hello")
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
29 assert "earth" in listWorlds()
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
30 assert "testWorld" in listWorlds()
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
31 assert loadWorld[string]("earth") == "hello"
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
32
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
33 "earth".purgeWorld()
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
34 assert listWorlds() == @["testWorld"]
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
35
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
36 "testWorld".purgeWorld()
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
37 assert listWorlds().len == 0
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
38
1286
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
39 proc stressTest(storage: StorageType) =
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
40 for i in 1 .. 10000:
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
41 let key = &"key-{i}"
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
42 store(storage, key, i)
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
43 assert storage.load(key, 0) == i
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
44
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
45 proc main() =
1423
3b8a736c45a7 did: put almost all global state into a single struct
sam <sam@basx.dev>
parents: 1332
diff changeset
46 initEngine("Test storage")
1286
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
47 SystemStorage.purge()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
48 echo "SystemStorage: Testing simple store/load"
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
49 SystemStorage.testSimple()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
50
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
51 UserStorage.purge()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
52 echo "UserStorage: Testing simple store/load"
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
53 UserStorage.testSimple()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
54
1464
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
55 echo "Testing world-storage API"
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
56 testWorldAPI()
3e3192241ea7 add: API for world/level storage
sam <sam@basx.dev>
parents: 1427
diff changeset
57
1286
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
58 echo "Stress test with 10'000 saves/loads"
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
59 SystemStorage.stressTest()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
60
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
61 SystemStorage.purge()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
62 UserStorage.purge()
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
63
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
64 when isMainModule:
ad9091fde244 add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff changeset
65 main()