Mercurial > games > semicongine
comparison tests/test_storage.nim @ 987:49d73ed5a1ec
add: tests and did some simplification of code
| author | sam <sam@basx.dev> |
|---|---|
| date | Sun, 07 Apr 2024 01:17:40 +0700 |
| parents | 5db7721395fc |
| children | 46778940c1d7 |
comparison
equal
deleted
inserted
replaced
| 986:5db7721395fc | 987:49d73ed5a1ec |
|---|---|
| 1 import std/os | 1 import std/os |
| 2 import std/strformat | |
| 2 | 3 |
| 3 import semicongine | 4 import semicongine |
| 4 | 5 |
| 5 proc testSimple(storage: StorageType) = | 6 proc testSimple(storage: StorageType) = |
| 6 const TEST_VALUE = 42 | 7 const TEST_VALUE = 42 |
| 7 const KEY = "test" | 8 const KEY = "test" |
| 8 | 9 |
| 9 # get default | 10 # get default |
| 10 var promise1 = load[int](storage, KEY) | 11 var future1 = load[int](storage, KEY) |
| 11 assert promise1.awaitResult() == default(type(TEST_VALUE)) | 12 assert future1.awaitResult() == default(type(TEST_VALUE)) |
| 12 | 13 |
| 13 # save and load custom | 14 # save and load custom |
| 14 var promise2 = store(storage, KEY, TEST_VALUE) | 15 var future2 = store(storage, KEY, TEST_VALUE) |
| 15 promise2.awaitStored() | 16 future2.awaitStored() |
| 16 promise1 = load[int](storage, KEY) | 17 future1 = load[int](storage, KEY) |
| 17 assert promise1.awaitResult() == TEST_VALUE | 18 assert future1.awaitResult() == TEST_VALUE |
| 18 | 19 |
| 19 proc testBusyWait(storage: StorageType) = | 20 proc testBusyWait(storage: StorageType) = |
| 20 const TEST_VALUE = "43" | 21 const TEST_VALUE = "43" |
| 21 const KEY = "test2" | 22 const KEY = "test2" |
| 22 | 23 |
| 23 # get default | 24 # get default |
| 24 var promise1 = load[string](storage, KEY) | 25 var future1 = load[string](storage, KEY) |
| 25 while not promise1.hasResult(): | 26 while not future1.hasResult(): |
| 26 sleep(1) | 27 sleep(1) |
| 27 assert promise1.getResult() == default(type(TEST_VALUE)) | 28 assert future1.getResult() == default(type(TEST_VALUE)) |
| 28 | 29 |
| 29 # save and load custom | 30 # save and load custom |
| 30 var promise2 = store(storage, KEY, TEST_VALUE) | 31 var future2 = store(storage, KEY, TEST_VALUE) |
| 31 while not promise2.isStored(): | 32 while not future2.isStored(): |
| 32 sleep(1) | 33 sleep(1) |
| 33 promise1 = load[string](storage, KEY) | 34 future1 = load[string](storage, KEY) |
| 34 while not promise1.hasResult(): | 35 while not future1.hasResult(): |
| 35 sleep(1) | 36 sleep(1) |
| 36 assert promise1.awaitResult() == TEST_VALUE | 37 assert future1.awaitResult() == TEST_VALUE |
| 38 | |
| 39 proc stressTest(storage: StorageType) = | |
| 40 for i in 1 .. 10000: | |
| 41 let key = &"key-{i}" | |
| 42 var p = store(storage, key, i) | |
| 43 p.awaitStored() | |
| 44 var p1 = load[int](storage, key) | |
| 45 assert p1.awaitResult() == i | |
| 46 | |
| 47 proc concurrentStressTest(storage: StorageType) = | |
| 48 var storeFutures: seq[StoreFuture[int]] | |
| 49 | |
| 50 for i in 1 .. 10000: | |
| 51 let key = &"key-{i}" | |
| 52 echo key | |
| 53 storeFutures.add store(storage, key, i) | |
| 54 | |
| 55 for i in 1 .. 10000: | |
| 56 echo i | |
| 57 let key = &"key-{i}" | |
| 58 storeFutures[i - 1].awaitStored() | |
| 59 var p1 = load[int](storage, key) | |
| 60 assert p1.awaitResult() == i | |
| 37 | 61 |
| 38 proc main() = | 62 proc main() = |
| 63 SystemStorage.purge() | |
| 39 echo "SystemStorage: Testing simple store/load" | 64 echo "SystemStorage: Testing simple store/load" |
| 40 SystemStorage.testSimple() | 65 SystemStorage.testSimple() |
| 41 echo "SystemStorage: Testing store/load with busy wait" | 66 echo "SystemStorage: Testing store/load with busy wait" |
| 42 SystemStorage.testBusyWait() | 67 SystemStorage.testBusyWait() |
| 43 | 68 |
| 44 UserStorage.purge() | 69 UserStorage.purge() |
| 45 echo "UserStorage: Testing simple store/load" | 70 echo "UserStorage: Testing simple store/load" |
| 46 UserStorage.testSimple() | 71 UserStorage.testSimple() |
| 47 echo "UserStorage: Testing store/load with busy wait" | 72 echo "UserStorage: Testing store/load with busy wait" |
| 48 UserStorage.testBusyWait() | 73 UserStorage.testBusyWait() |
| 74 | |
| 75 echo "Stress test with 10'000 saves/loads" | |
| 76 SystemStorage.stressTest() | |
| 77 | |
| 78 SystemStorage.purge() | |
| 49 UserStorage.purge() | 79 UserStorage.purge() |
| 80 | |
| 81 # TODO: fails currently, but is likely not too important | |
| 82 # echo "Stress test with 10'000 saves/loads and a little concurrency" | |
| 83 # SystemStorage.concurrentStressTest() | |
| 50 | 84 |
| 51 when isMainModule: | 85 when isMainModule: |
| 52 main() | 86 main() |
