sets equivalence
This commit is contained in:
parent
e01fb17d02
commit
2c5a2d07fb
2 changed files with 33 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
16
tests/sets/testequivalence.nim
Normal file
16
tests/sets/testequivalence.nim
Normal 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])))
|
||||
Loading…
Add table
Add a link
Reference in a new issue