@@ -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