1
- import std/ [tables, random, os, times, strformat]
1
+ import std/ [unittest, tables, random, os, times, strformat]
2
2
3
3
import easy_sqlite3
4
4
import easy_sqlite3/ memfs
@@ -37,53 +37,56 @@ proc connectDatabase(): Database =
37
37
else :
38
38
initDatabase(" file:memdb1?mode=memory&cache=shared" , {so_readwrite, so_create, so_uri})
39
39
40
+ test " threads" :
41
+ if defined(macosx):
42
+ skip()
43
+ else :
44
+ var gdb = connectDatabase()
45
+ gdb.create_table()
46
+ gdb.exec " VACUUM"
40
47
41
- var gdb = connectDatabase()
42
- gdb.create_table()
43
- gdb.exec " VACUUM"
44
-
45
- const COUNT = 1000000
46
- const GROUP = 100
48
+ const COUNT = 1000000
49
+ const GROUP = 100
47
50
48
- proc worker_fn() {.thread.} =
49
- echo " thread start"
50
- var tdb = connectDatabase()
51
- var r = initRand(42 )
52
- for _ in 0 ..< (COUNT div GROUP):
53
- retry:
54
- tdb.transactionImmediate:
55
- for _ in 0 ..< GROUP:
56
- let val = r.rand(1048576 )
57
- # increase the chance of collision
58
- if val < 1024 :
59
- sleep(1 )
60
- tdb.insert_data(val)
51
+ proc worker_fn() {.thread.} =
52
+ echo " thread start"
53
+ var tdb = connectDatabase()
54
+ var r = initRand(42 )
55
+ for _ in 0 ..< (COUNT div GROUP):
61
56
retry:
62
- commit()
57
+ tdb.transactionImmediate:
58
+ for _ in 0 ..< GROUP:
59
+ let val = r.rand(1048576 )
60
+ # increase the chance of collision
61
+ if val < 1024 :
62
+ sleep(1 )
63
+ tdb.insert_data(val)
64
+ retry:
65
+ commit()
63
66
64
- var worker: Thread[void ]
65
- createThread(worker, worker_fn)
67
+ var worker: Thread[void ]
68
+ createThread(worker, worker_fn)
69
+
70
+ let init = cpuTime()
71
+ var prev = init
72
+ while true :
73
+ var c: int
74
+ retry:
75
+ c = gdb.count_items().count
76
+ let curr = cpuTime()
77
+ let diff = curr - prev - 0.2
78
+ if diff > 0 :
79
+ when useMemFs:
80
+ echo fmt" { curr - init:>6.1f } s: { c:>7 } "
81
+ else :
82
+ echo fmt" { curr - init:>6.1f } s: { c:>7 } failures: { failedCount} "
83
+ prev = curr - diff
84
+ if c == COUNT:
85
+ break
66
86
67
- let init = cpuTime()
68
- var prev = init
69
- while true :
70
- var c: int
71
- retry:
72
- c = gdb.count_items().count
73
- let curr = cpuTime()
74
- let diff = curr - prev - 0.2
75
- if diff > 0 :
76
87
when useMemFs:
77
- echo fmt" { curr - init:>6.1f } s: { c :>7 } "
88
+ echo fmt" time: { cpuTime() - init:>9.4f } s "
78
89
else :
79
- echo fmt" { curr - init:>6.1f } s: { c:>7 } failures: { failedCount} "
80
- prev = curr - diff
81
- if c == COUNT:
82
- break
83
-
84
- when useMemFs:
85
- echo fmt" time: { cpuTime() - init:>9.4f } s "
86
- else :
87
- echo fmt" time: { cpuTime() - init:>9.4f } s failures: { failedCount} "
90
+ echo fmt" time: { cpuTime() - init:>9.4f } s failures: { failedCount} "
88
91
89
- worker.joinThread()
92
+ worker.joinThread()
0 commit comments