Tests to write:
================
emfServices
	 ? eInvoke(operation, arguments)
	 ? oclIsInState(statespec)
	(LOT1) check return types of EMF services (eClassifiers returns OrderedSet in A3 and Sequence in A4)
sequencesServices
	 ? asBag: order changes
	 ? asSet: order changes
	 ? closure
	(LOT1) test mixed sequences (needs OclAny or something)
orderedSetsServices
	 ? asBag: order changes
	 ? asSet: order changes
	 ? closure
	 intersection(bag)
	 symmetricDifference(s), 
	(LOT1) test mixed ordered sets (needs OclAny or something)

Differences when evaluated in A4:
=================================
orderedSetsServices
	 collections.union(collection): returns nothing[collections -> union(OrderedSet{'a','b','d'}) -> sortedBy(toString())/]

Unsupported in A4:
==================
stringServices
	 lineSeparator
	 replaceFirst
	 strtok
	 substituteFirst
	 tokenizeLine
acceleoServices
	(LOT1) TODO implement getProperties
numericServices
	(LOT1) WIP https://git.eclipse.org/r/#/c/163019/ operations between Real And Integers
emfServices
	 current(element)
	 current(int)
	 eInverse
	 eInverse(filter)
	 eIsProxy
	 eIsSet
	 eSet
	 eUnset
sequencesServices
	 addAll
	 collectNested
	 drop
	 dropRight
	 flatten
	 indexOfSlice
	 lastIndexOf
	 lastIndexOfSlice
	 max
	 min
	 product
	 removeAll
	 selectByKind
	 selectByType
	(LOT1) WIP https://git.eclipse.org/r/#/c/162879/ filter(primitiveType)
orderedSetsServices
	 addAll
	 collectNested
	 drop
	 dropRight
	 flatten
	 indexOfSlice
	 lastIndexOf
	 lastIndexOfSlice
	 max
	 min
	 product
	 removeAll
	 selectByKind
	 selectByType
	(LOT1) WIP https://git.eclipse.org/r/#/c/162879/ filter(primitiveType)
