sets equivalence

This commit is contained in:
Simon Hafner
2014-01-31 18:22:27 -06:00
parent e01fb17d02
commit 2c5a2d07fb
2 changed files with 33 additions and 0 deletions

View File

@@ -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 a a strict subset of b?
s.counter != t.counter and s <= t
proc `<=`*[A](s, t: TSet[A]): bool =
## Is a a subset of b?
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

View File

@@ -0,0 +1,16 @@
import unittest
import sets
suite "sets":
test "equivalent or subset":
check toSet(@[1,2,3]) <= toSet(@[1,2,3,4])
check toSet(@[1,2,3]) <= toSet(@[1,2,3])
check(not(toSet(@[1,2,3]) <= toSet(@[1,2])))
test "strict subset":
check toSet(@[1,2,3]) <= toSet(@[1,2,3,4])
check(not(toSet(@[1,2,3]) < toSet(@[1,2,3])))
check(not(toSet(@[1,2,3]) < toSet(@[1,2])))
test "==":
check(not(toSet(@[1,2,3]) == toSet(@[1,2,3,4])))
check toSet(@[1,2,3]) == toSet(@[1,2,3])
check(not(toSet(@[1,2,3]) == toSet(@[1,2])))