Filter elements to return only the greatest 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_greatest(["A", "B"]) == ["A"]
assert s.select_greatest(["A", "B", "C"]) == ["A"]
assert s.select_greatest(["B", "C", "D"]) == ["B", "C"]

Property definitions

poset $ POSet :: select_greatest
	# Filter elements to return only the greatest 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_greatest(["A", "B"]) == ["A"]
	# assert s.select_greatest(["A", "B", "C"]) == ["A"]
	# assert s.select_greatest(["B", "C", "D"]) == ["B", "C"]
	# ~~~
	fun select_greatest(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(e, f) then continue label
			end
			res.add(e)
		end label
		return res
	end
lib/poset/poset.nit:349,2--372,4