Mercurial > games > semicongine
annotate tests/test_storage.nim @ 1499:1f58458b7ef7 default tip main
did: fix a few issues with tests
| author | sam <sam@basx.dev> |
|---|---|
| date | Tue, 14 Oct 2025 00:27:28 +0700 |
| parents | 63364723d460 |
| children |
| rev | line source |
|---|---|
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
1 import std/strformat |
| 1499 | 2 import std/sequtils |
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
3 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
4 import ../semicongine |
| 1427 | 5 import ../semicongine/storage |
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
6 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
7 proc testSimple(storage: StorageType) = |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
8 const TEST_VALUE = 42 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
9 const KEY = "test" |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
10 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
11 # get default |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
12 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
|
13 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
14 # save and load custom |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
15 store(storage, KEY, TEST_VALUE) |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
16 assert storage.load(KEY, 0) == TEST_VALUE |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
17 |
|
1470
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
18 type ID = distinct int |
|
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
19 proc `==`(a, b: ID): bool = |
|
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
20 `==`(int(a), int(b)) |
|
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
21 |
| 1464 | 22 proc testWorldAPI() = |
| 1465 | 23 type Obj1 = object |
| 24 value: int | |
|
1470
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
25 id: ID |
| 1465 | 26 |
| 27 type Obj2 = object | |
| 1468 | 28 a: string |
| 29 b: Obj1 | |
| 30 c: seq[int] | |
| 31 d: array[3, Obj1] | |
| 32 e: bool | |
| 1465 | 33 |
| 1464 | 34 assert listWorlds().len == 0 |
| 35 | |
|
1470
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
36 const obj1 = Obj1(value: 42, id: ID(1)) |
| 1465 | 37 "testWorld".storeWorld(obj1) |
| 1499 | 38 assert listWorlds()[0][1] == "testWorld" |
| 39 var myWorld: Obj1 | |
| 40 loadWorld[Obj1]("testWorld", myWorld) | |
| 41 assert myWorld == obj1 | |
| 1464 | 42 |
| 1468 | 43 const obj2 = Obj2( |
| 44 a: "Hello world", | |
|
1470
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
45 b: Obj1(value: 20, id: ID(20)), |
| 1468 | 46 c: @[1, 2, 3, 4], |
|
1470
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
47 d: [ |
|
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
48 Obj1(value: 1, id: ID(11)), Obj1(value: 2, id: ID(22)), Obj1(value: 3, id: ID(33)) |
|
63364723d460
fix: make de-/serialization work with all kinds of weird object configurtions
sam <sam@basx.dev>
parents:
1468
diff
changeset
|
49 ], |
| 1468 | 50 e: true, |
| 51 ) | |
| 1465 | 52 "testWorld".storeWorld(obj2) |
| 1499 | 53 assert listWorlds()[0][1] == "testWorld" |
| 54 var otherWorld: Obj2 | |
| 55 loadWorld[Obj2]("testWorld", otherWorld) | |
| 56 assert otherWorld == obj2 | |
| 1464 | 57 |
| 1465 | 58 "earth".storeWorld(obj2) |
| 1499 | 59 assert "earth" in listWorlds().mapIt(it[1]) |
| 60 assert "testWorld" in listWorlds().mapIt(it[1]) | |
| 61 var moreWorld: Obj2 | |
| 62 loadWorld[Obj2]("earth", moreWorld) | |
| 63 assert moreWorld == obj2 | |
| 1464 | 64 |
| 65 "earth".purgeWorld() | |
| 1499 | 66 assert listWorlds()[0][1] == "testWorld" |
| 1464 | 67 |
| 68 "testWorld".purgeWorld() | |
| 69 assert listWorlds().len == 0 | |
| 70 | |
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
71 proc stressTest(storage: StorageType) = |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
72 for i in 1 .. 10000: |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
73 let key = &"key-{i}" |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
74 store(storage, key, i) |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
75 assert storage.load(key, 0) == i |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
76 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
77 proc main() = |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1332
diff
changeset
|
78 initEngine("Test storage") |
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
79 SystemStorage.purge() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
80 echo "SystemStorage: Testing simple store/load" |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
81 SystemStorage.testSimple() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
82 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
83 UserStorage.purge() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
84 echo "UserStorage: Testing simple store/load" |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
85 UserStorage.testSimple() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
86 |
| 1464 | 87 echo "Testing world-storage API" |
| 88 testWorldAPI() | |
| 89 | |
|
1286
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
90 echo "Stress test with 10'000 saves/loads" |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
91 SystemStorage.stressTest() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
92 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
93 SystemStorage.purge() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
94 UserStorage.purge() |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
95 |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
96 when isMainModule: |
|
ad9091fde244
add: storage tests, fix something not worth mentioning
sam <sam@basx.dev>
parents:
diff
changeset
|
97 main() |
