Skip to content

Instantly share code, notes, and snippets.

@brentp
Last active February 9, 2019 18:38
Show Gist options
  • Save brentp/7d440560968c3ac97c40de17200e404a to your computer and use it in GitHub Desktop.
Save brentp/7d440560968c3ac97c40de17200e404a to your computer and use it in GitHub Desktop.
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