185 lines
4.7 KiB
Nim
185 lines
4.7 KiB
Nim
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}"
|