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"]

Property definitions

poset $ POSet :: select_smallest
	# 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