Separated tests and benchmark
This commit is contained in:
parent
f979af98d3
commit
71fa891f9e
|
@ -0,0 +1,184 @@
|
||||||
|
import times
|
||||||
|
import stats
|
||||||
|
import random
|
||||||
|
import strformat
|
||||||
|
|
||||||
|
import ../src/nimdeque
|
||||||
|
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
const benchSize = 500000
|
||||||
|
echo &"\nRunning benchmarks with queue size of {benchSize} against a seq"
|
||||||
|
var q = newLinkedDeque[int]()
|
||||||
|
var q2: seq[int] = @[]
|
||||||
|
var t: seq[float] = @[]
|
||||||
|
var tmp: float
|
||||||
|
var st: RunningStat
|
||||||
|
var benchStart = cpuTime()
|
||||||
|
var start = cpuTime()
|
||||||
|
|
||||||
|
echo &" Benchmarking LinkedDeque.add()"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
q.add(i)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking seq.add()"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
q2.add(i)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking LinkedDeque.pop(0)"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
discard q.pop()
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking seq.delete(0)"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
q2.delete(0)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
q2 = @[]
|
||||||
|
echo &" Benchmarking LinkedDeque.addLeft()"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
q.addLeft(i)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking seq.insert(0)"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
q2.insert(i, 0)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo " Benchmarking random access for LinkedDeque (10000 times)"
|
||||||
|
for i in countup(0, 10000):
|
||||||
|
tmp = cpuTime()
|
||||||
|
discard q[rand(benchSize - 1)]
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo " Benchmarking random access for seq (10000 times)"
|
||||||
|
for i in countup(0, 10000):
|
||||||
|
tmp = cpuTime()
|
||||||
|
discard q2[rand(benchSize - 1)]
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking LinkedDeque.pop(^1)"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
discard q.pop(^1)
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
echo &" Benchmarking seq.pop()"
|
||||||
|
for i in countup(0, benchSize - 1):
|
||||||
|
tmp = cpuTime()
|
||||||
|
discard q2.pop()
|
||||||
|
t.add(cpuTime() - tmp)
|
||||||
|
st.push(t)
|
||||||
|
echo &"""
|
||||||
|
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
||||||
|
- min: {st.min}
|
||||||
|
- max: {st.max}
|
||||||
|
- avg: {st.mean()}
|
||||||
|
- stdev: {st.standardDeviation()}"""
|
||||||
|
|
||||||
|
st.clear()
|
||||||
|
t = @[]
|
||||||
|
start = cpuTime()
|
||||||
|
q2 = @[]
|
||||||
|
|
||||||
|
echo &"\nTotal benchmark time: {cpuTime() - benchStart}"
|
179
tests/linked.nim
179
tests/linked.nim
|
@ -158,181 +158,4 @@ when isMainModule:
|
||||||
doAssert deque.find(0) == 0
|
doAssert deque.find(0) == 0
|
||||||
doAssert deque.find(size) == -1
|
doAssert deque.find(size) == -1
|
||||||
doAssert deque.find(size div 2) == size div 2
|
doAssert deque.find(size div 2) == size div 2
|
||||||
echo &"Tests completed in {cpuTime() - testStart} seconds"
|
echo &"Tests completed in {cpuTime() - testStart} seconds"
|
||||||
|
|
||||||
## End of tests, start of benchmark
|
|
||||||
echo &"\nRunning benchmarks with queue size of {benchSize} against a seq"
|
|
||||||
var q = newLinkedDeque[int]()
|
|
||||||
var q2: seq[int] = @[]
|
|
||||||
var t: seq[float] = @[]
|
|
||||||
var tmp: float
|
|
||||||
var st: RunningStat
|
|
||||||
var benchStart = cpuTime()
|
|
||||||
var start = cpuTime()
|
|
||||||
|
|
||||||
echo &" Benchmarking LinkedDeque.add()"
|
|
||||||
for i in countup(0, benchSize - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
q.add(i)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking seq.add()"
|
|
||||||
for i in countup(0, benchSize - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
q2.add(i)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking LinkedDeque.pop(0)"
|
|
||||||
for i in countup(0, size * 10 - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
discard q.pop()
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking seq.delete(0)"
|
|
||||||
for i in countup(0, size * 10 - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
q2.delete(0)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
q2 = @[]
|
|
||||||
echo &" Benchmarking LinkedDeque.addLeft()"
|
|
||||||
for i in countup(0, benchSize - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
q.addLeft(i)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking seq.insert(0)"
|
|
||||||
for i in countup(0, benchSize - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
q2.insert(i, 0)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo " Benchmarking random access for LinkedDeque (10000 times)"
|
|
||||||
for i in countup(0, 10000):
|
|
||||||
tmp = cpuTime()
|
|
||||||
discard q[rand(benchSize - 1)]
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo " Benchmarking random access for seq (10000 times)"
|
|
||||||
for i in countup(0, 10000):
|
|
||||||
tmp = cpuTime()
|
|
||||||
discard q2[rand(benchSize - 1)]
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking LinkedDeque.pop(^1)"
|
|
||||||
for i in countup(0, size * 10 - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
discard q.pop(^1)
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
echo &" Benchmarking seq.pop()"
|
|
||||||
for i in countup(0, size * 10 - 1):
|
|
||||||
tmp = cpuTime()
|
|
||||||
discard q2.pop()
|
|
||||||
t.add(cpuTime() - tmp)
|
|
||||||
st.push(t)
|
|
||||||
echo &"""
|
|
||||||
- Done in {cpuTime() - start} seconds. Results (in seconds):
|
|
||||||
- min: {st.min}
|
|
||||||
- max: {st.max}
|
|
||||||
- avg: {st.mean()}
|
|
||||||
- stdev: {st.standardDeviation()}"""
|
|
||||||
|
|
||||||
st.clear()
|
|
||||||
t = @[]
|
|
||||||
start = cpuTime()
|
|
||||||
q2 = @[]
|
|
||||||
|
|
||||||
echo &"\nTotal benchmark time: {cpuTime() - benchStart}"
|
|
||||||
echo &"Total execution time: {cpuTime() - testStart}"
|
|
Loading…
Reference in New Issue