diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2014-02-01 16:46:45 -0800 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2014-02-01 16:46:45 -0800 |
commit | 925d19a8fb7dcdbb299acb1b74e4bd27ad0d76d3 (patch) | |
tree | 94aefc213c1d5ae67dcaa4356f4b90bc5aa055cb | |
parent | 561f6c2d2f46d80f6915b17a51c7a585179b58a3 (diff) | |
parent | 6fda10aed0287d50ebc3c6192d0dd64e710a1f72 (diff) | |
download | Nim-925d19a8fb7dcdbb299acb1b74e4bd27ad0d76d3.tar.gz |
Merge pull request #859 from reactormonk/sets_equivalence
sets equivalence
-rw-r--r-- | lib/pure/collections/sets.nim | 17 | ||||
-rw-r--r-- | tests/sets/testequivalence.nim | 15 |
2 files changed, 32 insertions, 0 deletions
diff --git a/lib/pure/collections/sets.nim b/lib/pure/collections/sets.nim index 7259772aa..e6ab617e5 100644 --- a/lib/pure/collections/sets.nim +++ b/lib/pure/collections/sets.nim @@ -224,3 +224,20 @@ proc toOrderedSet*[A](keys: openArray[A]): TOrderedSet[A] = proc `$`*[A](s: TOrderedSet[A]): string = ## The `$` operator for ordered hash sets. dollarImpl() + +proc `<`*[A](s, t: TSet[A]): bool = + ## Is s a strict subset of t? + s.counter != t.counter and s <= t + +proc `<=`*[A](s, t: TSet[A]): bool = + ## Is s a subset of t? + result = false + if s.counter > t.counter: return + result = true + for item in s: + if not(t.contains(item)): + result = false + return + +proc `==`*[A](s, t: TSet[A]): bool = + s.counter == t.counter and s <= t diff --git a/tests/sets/testequivalence.nim b/tests/sets/testequivalence.nim new file mode 100644 index 000000000..7c5d9e3e9 --- /dev/null +++ b/tests/sets/testequivalence.nim @@ -0,0 +1,15 @@ +discard """ + output: '''''' +""" +import unittest +import sets + +doAssert(toSet(@[1,2,3]) <= toSet(@[1,2,3,4]), "equivalent or subset") +doAssert(toSet(@[1,2,3]) <= toSet(@[1,2,3]), "equivalent or subset") +doAssert((not(toSet(@[1,2,3]) <= toSet(@[1,2]))), "equivalent or subset") +doAssert(toSet(@[1,2,3]) <= toSet(@[1,2,3,4]), "strict subset") +doAssert((not(toSet(@[1,2,3]) < toSet(@[1,2,3]))), "strict subset") +doAssert((not(toSet(@[1,2,3]) < toSet(@[1,2]))), "strict subset") +doAssert((not(toSet(@[1,2,3]) == toSet(@[1,2,3,4]))), "==") +doAssert(toSet(@[1,2,3]) == toSet(@[1,2,3]), "==") +doAssert((not(toSet(@[1,2,3]) == toSet(@[1,2]))), "==") |