Skip to content

Commit a117432

Browse files
committed
collection/union_find: Add contracts usage
Signed-off-by: Florian Deljarry <[email protected]>
1 parent 21de975 commit a117432

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

lib/core/collection/union_find.nit

+13-3
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ class DisjointSet[E]
8888
# Get the root node of an element
8989
# require: `has(e)`
9090
private fun find(e:E): DisjointSetNode
91+
is
92+
expects(nodes.has_key(e))
9193
do
92-
assert nodes.has_key(e)
9394
var ne = nodes[e]
9495
if ne.parent == ne then return ne
9596
var res = nfind(ne)
@@ -101,6 +102,8 @@ class DisjointSet[E]
101102
# Use *path compression* to flatten the structure
102103
# ENSURE: `result.parent == result`
103104
private fun nfind(ne: DisjointSetNode): DisjointSetNode
105+
is
106+
ensures(result.parent == result)
104107
do
105108
var nf = ne.parent
106109
if nf == ne then return ne
@@ -126,7 +129,10 @@ class DisjointSet[E]
126129
# Initially it is in its own disjoint subset
127130
#
128131
# ENSURE: `has(e)`
129-
redef fun add(e) do
132+
redef fun add(e)
133+
is
134+
ensures(self.has(e))
135+
do
130136
if nodes.has_key(e) then return
131137
var ne = new DisjointSetNode
132138
nodes[e] = ne
@@ -199,6 +205,8 @@ class DisjointSet[E]
199205
# Combine the subsets of `e` and `f`
200206
# ENSURE: `in_same_subset(e,f)`
201207
fun union(e,f:E)
208+
is
209+
ensures(in_same_subset(e,f))
202210
do
203211
var ne = find(e)
204212
var nf = find(f)
@@ -223,8 +231,10 @@ class DisjointSet[E]
223231
end
224232

225233
# Combine the subsets of all elements of `es`
226-
# ENSURE: `all_in_same_subset(cs)`
234+
# ENSURE: `all_in_same_subset(es)`
227235
fun union_all(es:Collection[E])
236+
is
237+
ensures(all_in_same_subset(es))
228238
do
229239
if es.is_empty then return
230240
var f = es.first

0 commit comments

Comments
 (0)