summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2014-02-01 16:46:45 -0800
committerAndreas Rumpf <rumpf_a@web.de>2014-02-01 16:46:45 -0800
commit925d19a8fb7dcdbb299acb1b74e4bd27ad0d76d3 (patch)
tree94aefc213c1d5ae67dcaa4356f4b90bc5aa055cb
parent561f6c2d2f46d80f6915b17a51c7a585179b58a3 (diff)
parent6fda10aed0287d50ebc3c6192d0dd64e710a1f72 (diff)
downloadNim-925d19a8fb7dcdbb299acb1b74e4bd27ad0d76d3.tar.gz
Merge pull request #859 from reactormonk/sets_equivalence
sets equivalence
-rw-r--r--lib/pure/collections/sets.nim17
-rw-r--r--tests/sets/testequivalence.nim15
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]))), "==")