close #16123 std/sets with closures in cpp (#17921)

* close #16123 std/sets with closures in cpp

* fixup
This commit is contained in:
Timothee Cour
2021-05-02 22:07:31 -07:00
committed by GitHub
parent 6d485f545a
commit 0dc534832e

View File

@@ -1,15 +1,12 @@
discard """
targets: "c cpp js"
output: '''
set is empty
'''
"""
import std/[sets, hashes]
from std/sequtils import toSeq
from std/algorithm import sorted
from stdtest/testutils import whenVMorJs
proc sortedPairs[T](t: T): auto = toSeq(t.pairs).sorted
template sortedItems(t: untyped): untyped = sorted(toSeq(t))
@@ -23,10 +20,12 @@ block tsetpop:
discard a.pop()
doAssert len(a) == 0
var msg = ""
try:
echo a.pop()
except KeyError as e:
echo e.msg
msg = e.msg
doAssert msg == "set is empty"
@@ -258,6 +257,7 @@ block: # test correctness after a number of inserts/deletes
template main() =
# xxx move all tests inside this
block:
let a = {true, false}
doAssert $a == "{false, true}"
@@ -273,6 +273,14 @@ template main() =
doAssert $a == "{false}"
doAssert a.len == 1
block: # bug #16123
whenVMorJs: discard
do:
type CallType = proc() {.closure.}
var setA = initHashSet[CallType]()
let foo = proc() = discard
setA.incl(foo)
doAssert setA.contains(foo)
static: main()
main()