poset :: POSet :: select_smallest
var s = new POSet[String]
s.add_edge("B", "A")
s.add_edge("C", "A")
s.add_edge("D", "B")
s.add_edge("D", "C")
assert s.select_smallest(["A", "B"]) == ["B"]
assert s.select_smallest(["A", "B", "C"]) == ["B", "C"]
assert s.select_smallest(["B", "C", "D"]) == ["D"]
# Filter elements to return only the smallest ones
#
# ~~~
# var s = new POSet[String]
# s.add_edge("B", "A")
# s.add_edge("C", "A")
# s.add_edge("D", "B")
# s.add_edge("D", "C")
# assert s.select_smallest(["A", "B"]) == ["B"]
# assert s.select_smallest(["A", "B", "C"]) == ["B", "C"]
# assert s.select_smallest(["B", "C", "D"]) == ["D"]
# ~~~
fun select_smallest(elements: Collection[E]): Array[E]
do
var res = new Array[E]
for e in elements do
for f in elements do
if e == f then continue
if has_edge(f, e) then continue label
end
res.add(e)
end label
return res
end
lib/poset/poset.nit:324,2--347,4