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