From 6b3bdd798d235a465d94ebedbc784d6b41057798 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Sat, 20 Feb 2021 09:02:57 -0800 Subject: [PATCH] enable bsd for tsetutils; improve setutils API (#17098) --- lib/std/setutils.nim | 13 ++++++++----- tests/stdlib/tsetutils.nim | 6 ++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/std/setutils.nim b/lib/std/setutils.nim index 74f0dc8192..d5d60d4ab1 100644 --- a/lib/std/setutils.nim +++ b/lib/std/setutils.nim @@ -38,18 +38,21 @@ template toSet*(iter: untyped): untyped = macro enmRange(enm: typed): untyped = result = newNimNode(nnkCurly).add(enm.getType[1][1..^1]) -proc fullSet*(T: typedesc): auto {.inline.} = - ## Returns a full set of all valid elements. +# proc fullSet*(T: typedesc): set[T] {.inline.} = # xxx would give: Error: ordinal type expected +proc fullSet*[T](U: typedesc[T]): set[T] {.inline.} = + ## Returns a set containing all elements in `U`. runnableExamples: - assert {true, false} == fullSet(bool) + assert bool.fullSet == {true, false} + type A = range[1..3] + assert A.fullSet == {1.A, 2, 3} + assert int8.fullSet.len == 256 when T is Ordinal: {T.low..T.high} else: # Hole filled enum enmRange(T) proc complement*[T](s: set[T]): set[T] {.inline.} = - ## Returns the complement of the set. - ## Can also be thought of as inverting the set. + ## Returns the set complement of `a`. runnableExamples: type Colors = enum red, green = 3, blue diff --git a/tests/stdlib/tsetutils.nim b/tests/stdlib/tsetutils.nim index faf4272105..d5093bf119 100644 --- a/tests/stdlib/tsetutils.nim +++ b/tests/stdlib/tsetutils.nim @@ -1,13 +1,15 @@ discard """ targets: "c js" - disabled: "bsd" # pending #17093 """ + import std/setutils + type Colors = enum red, green = 5, blue = 10 Bar = enum bar0 = -1, bar1, bar2 + template main = block: # toSet doAssert "abcbb".toSet == {'a', 'b', 'c'} @@ -31,4 +33,4 @@ template main = doAssert {'0'..'9'}.complement == {0.char..255.char} - {'0'..'9'} main() -static: main() \ No newline at end of file +static: main()