Last active
February 9, 2019 18:38
-
-
Save brentp/7d440560968c3ac97c40de17200e404a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import times | |
import intsets | |
import tables | |
import sets | |
# cardinality for builtin sets is slow. | |
# nim c -d:release -r t.nim | |
# vs | |
# nim c -d:card -d:release -r t.nim | |
proc aset(): int = | |
var n = 0 | |
var s: set[uint16] = {} | |
var o: set[uint16] = {0'u16,1,2,3,4,5,6,7,8,9,10} | |
for i in 0..10000: | |
for k in 0..24: | |
s.incl(k.uint16) | |
when defined(card): | |
doAssert (s * o).card == 11 | |
for k in 0..24: | |
s.excl(k.uint16) | |
when defined(card): | |
doAssert s.card == 0 | |
n += 1 | |
return n | |
proc hset(): int = | |
var n = 0 | |
var s = initSet[uint16]() | |
var o = initSet[uint16]() | |
for i in 0..10: o.incl(i.uint16) | |
for i in 0..10000: | |
for k in 0..24: | |
s.incl(k.uint16) | |
when defined(card): | |
doAssert (s * o).card == 11 | |
for k in 0..24: | |
s.excl(k.uint16) | |
when defined(card): | |
doAssert s.card == 0 | |
n += 1 | |
return n | |
proc iset(): int = | |
var n = 0 | |
var s = initIntSet() | |
var o = initIntSet() | |
for i in 0..10: o.incl(i) | |
for i in 0..10000: | |
for k in 0..24: | |
s.incl(k) | |
when defined(card): | |
doAssert (s * o).card == 11 | |
for k in 0..24: | |
s.excl(k) | |
when defined(card): | |
doAssert s.card == 0 | |
n += 1 | |
return n | |
var t = cpuTime() | |
echo hset() | |
echo cpuTime() - t | |
t = cpuTime() | |
echo aset() | |
echo cpuTime() - t | |
t = cpuTime() | |
echo iset() | |
echo cpuTime() - t |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment