Separated tests and benchmark

This commit is contained in:
Nocturn9x 2022-03-16 13:42:30 +01:00
parent f979af98d3
commit 71fa891f9e
2 changed files with 185 additions and 178 deletions

184
bench/linked.nim Normal file
View File

@ -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}"

View File

@ -158,181 +158,4 @@ when isMainModule:
doAssert deque.find(0) == 0
doAssert deque.find(size) == -1
doAssert deque.find(size div 2) == size div 2
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}"
echo &"Tests completed in {cpuTime() - testStart} seconds"