Added startsWith and endsWith collections services.

Change-Id: I2e66c289b430c66c19782a44b8c8b5ee6666a53f
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
index 2f977de..f506de0 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
@@ -2805,6 +2805,91 @@
 		return new ArrayList<T>(sequence.subList(startIndex - 1, endIndex));
 	}
 
+	// @formatter:off
+	@Documentation(
+		value = "Returns \"true\" if the sequence starts with other, \"false\" otherwise",
+		params = {
+			@Param(name = "sequence", value = "The Sequence or OrderedSet"),
+			@Param(name = "other", value = "The other Sequence or OrderedSet")
+		},
+		result = "\\\"true\\\" if the sequence starts with other, \\\"false\\\" otherwise",
+		examples = {
+			@Example(expression = "Sequence{'a', 'b', 'c'}->startsWith('a', 'b')", result = "true")
+		}
+	)
+	// @formatter:on
+	public <T> Boolean startsWith(Collection<T> collection, Collection<T> other) {
+		final boolean res;
+
+		if (other.size() > collection.size()) {
+			res = false;
+		} else {
+			final Iterator<T> collectionIt = collection.iterator();
+			final Iterator<T> otherIt = other.iterator();
+			res = equalsIterator(collectionIt, otherIt);
+		}
+
+		return res;
+	}
+
+	// @formatter:off
+	@Documentation(
+		value = "Returns \"true\" if the sequence ends with other, \"false\" otherwise",
+		params = {
+			@Param(name = "sequence", value = "The Sequence or OrderedSet"),
+			@Param(name = "other", value = "The other Sequence or OrderedSet")
+		},
+		result = "\\\"true\\\" if the sequence ends with other, \\\"false\\\" otherwise",
+		examples = {
+			@Example(expression = "Sequence{'a', 'b', 'c'}->endsWith('b', 'c')", result = "true")
+		}
+	)
+	// @formatter:on
+	public <T> Boolean endsWith(Collection<T> collection, Collection<T> other) {
+		final boolean res;
+
+		if (other.size() > collection.size()) {
+			res = false;
+		} else {
+			final Iterator<T> collectionIt = collection.iterator();
+			final Iterator<T> otherIt = other.iterator();
+			for (int i = 0; i < collection.size() - other.size(); i++) {
+				collectionIt.next();
+			}
+			res = equalsIterator(collectionIt, otherIt);
+		}
+
+		return res;
+	}
+
+	/**
+	 * Tells if both given {@link Iterator} contains the same elements.
+	 * 
+	 * @param <T>
+	 *            collections elements type
+	 * @param collectionIt
+	 *            the first {@link Iterator}
+	 * @param otherIt
+	 *            the second {@link Iterator}
+	 * @return <code>true</code> if both given {@link Iterator} contains the same elements, <code>false</code>
+	 *         otherwise
+	 */
+	private <T> boolean equalsIterator(final Iterator<T> collectionIt, final Iterator<T> otherIt) {
+		boolean res = true;
+
+		while (otherIt.hasNext()) {
+			final T element = collectionIt.next();
+			final T elementOther = otherIt.next();
+			if ((element != null && !element.equals(elementOther)) || (element == null
+					&& elementOther != null)) {
+				res = false;
+				break;
+			}
+		}
+
+		return res;
+	}
+
 	/**
 	 * Evaluates a lambda then uses the result as comparables.
 	 */
@@ -2852,4 +2937,5 @@
 			return result;
 		}
 	}
+
 }
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
index 9ed6b7c..91e62a9 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
@@ -266,7 +266,7 @@
 	public void selfArrowTest() {
 		final ICompletionResult completionResult = engine.getCompletion("self->", 6, variableTypes);
 
-		assertCompletion(completionResult, 46, "", "", 6, 0, "size()", "including()");
+		assertCompletion(completionResult, 48, "", "", 6, 0, "size()", "including()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoFeatureCompletionProposal(completionResult);
 		assertNoEOperationCompletionProposal(completionResult);
@@ -290,7 +290,7 @@
 		final ICompletionResult arrowCompletionResult = engine.getCompletion("Sequence{self}->", 16,
 				variableTypes);
 
-		assertCompletion(arrowCompletionResult, 45, "", "", 16, 0, "size()", "select()", "collect()");
+		assertCompletion(arrowCompletionResult, 47, "", "", 16, 0, "size()", "select()", "collect()");
 	}
 
 	@Test
@@ -561,7 +561,7 @@
 		final ICompletionResult completionResult = engine.getCompletion(
 				"self.eClassifiers->select(p | self->)", 36, variableTypes);
 
-		assertCompletion(completionResult, 46, "", "", 36, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 36, 0, "size()", "first()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoVariableDeclarationCompletionProposal(completionResult);
 	}
@@ -588,7 +588,7 @@
 		final ICompletionResult completionResult = engine.getCompletion(
 				"self.eClassifiers->select(w | self.eClassifiers->select(p | self->))", 66, variableTypes);
 
-		assertCompletion(completionResult, 46, "", "", 66, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 66, 0, "size()", "first()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoVariableDeclarationCompletionProposal(completionResult);
 	}
@@ -913,7 +913,7 @@
 
 		final ICompletionResult completionResult = engine.getCompletion("OrderedSet{}->", 14, types);
 
-		assertCompletion(completionResult, 46, "", "", 14, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 14, 0, "size()", "first()");
 		assertNoEOperationCompletionProposal(completionResult);
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoVariableDeclarationCompletionProposal(completionResult);
@@ -925,7 +925,7 @@
 
 		final ICompletionResult completionResult = engine.getCompletion("Sequence{}->", 12, types);
 
-		assertCompletion(completionResult, 45, "", "", 12, 0, "size()", "first()");
+		assertCompletion(completionResult, 47, "", "", 12, 0, "size()", "first()");
 		assertNoEOperationCompletionProposal(completionResult);
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoVariableDeclarationCompletionProposal(completionResult);
@@ -985,7 +985,7 @@
 		final ICompletionResult completionResult = engine.getCompletion("{ecore::EClass}->", 17,
 				variableTypes);
 
-		assertCompletion(completionResult, 46, "", "", 17, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 17, 0, "size()", "first()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoVariableDeclarationCompletionProposal(completionResult);
 		assertNoFeatureCompletionProposal(completionResult);
@@ -1138,7 +1138,7 @@
 
 		final ICompletionResult completionResult = engine.getCompletion("self->", 6, types);
 
-		assertCompletion(completionResult, 46, "", "", 6, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 6, 0, "size()", "first()");
 		assertNoEOperationCompletionProposal(completionResult);
 		assertNoFeatureCompletionProposal(completionResult);
 		assertNoVariableCompletionProposal(completionResult);
@@ -1154,7 +1154,7 @@
 
 		final ICompletionResult completionResult = engine.getCompletion("self->", 6, types);
 
-		assertCompletion(completionResult, 46, "", "", 6, 0, "size()", "first()");
+		assertCompletion(completionResult, 48, "", "", 6, 0, "size()", "first()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoFeatureCompletionProposal(completionResult);
 		assertNoEOperationCompletionProposal(completionResult);
@@ -1170,7 +1170,7 @@
 
 		final ICompletionResult completionResult = engine.getCompletion("self->", 6, types);
 
-		assertCompletion(completionResult, 45, "", "", 6, 0, "size()", "first()");
+		assertCompletion(completionResult, 47, "", "", 6, 0, "size()", "first()");
 		assertNoVariableCompletionProposal(completionResult);
 		assertNoFeatureCompletionProposal(completionResult);
 		assertNoEOperationCompletionProposal(completionResult);
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
index ec75730..5b4a8c2 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
@@ -5365,4 +5365,151 @@
 		assertEquals(Integer.valueOf(3), it.next());
 		assertEquals(Integer.valueOf(4), it.next());
 	}
+
+	@Test(expected = NullPointerException.class)
+	public void testStartsWithNullNull() {
+		collectionServices.startsWith(null, null);
+	}
+
+	@Test
+	public void testStartsWithSequenceSequence() {
+		final List<Object> collection = new ArrayList<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final List<Object> other = new ArrayList<>();
+		other.add(Integer.valueOf(1));
+		other.add(Integer.valueOf(2));
+
+		final Boolean result = collectionServices.startsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testStartsWithOrederedSetSequence() {
+		final Set<Object> collection = new LinkedHashSet<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final List<Object> other = new ArrayList<>();
+		other.add(Integer.valueOf(1));
+		other.add(Integer.valueOf(2));
+
+		final Boolean result = collectionServices.startsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testStartsWithSequenceOrderedSet() {
+		final List<Object> collection = new ArrayList<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final Set<Object> other = new LinkedHashSet<>();
+		other.add(Integer.valueOf(1));
+		other.add(Integer.valueOf(2));
+
+		final Boolean result = collectionServices.startsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testStartsWithOrderedSetOrderedSet() {
+		final Set<Object> collection = new LinkedHashSet<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final Set<Object> other = new LinkedHashSet<>();
+		other.add(Integer.valueOf(1));
+		other.add(Integer.valueOf(2));
+
+		final Boolean result = collectionServices.startsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void testendsWithNullNull() {
+		collectionServices.endsWith(null, null);
+	}
+
+	@Test
+	public void testendsWithSequenceSequence() {
+		final List<Object> collection = new ArrayList<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final List<Object> other = new ArrayList<>();
+		other.add(Integer.valueOf(3));
+		other.add(Integer.valueOf(4));
+
+		final Boolean result = collectionServices.endsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testendsWithOrederedSetSequence() {
+		final Set<Object> collection = new LinkedHashSet<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final List<Object> other = new ArrayList<>();
+		other.add(Integer.valueOf(3));
+		other.add(Integer.valueOf(4));
+
+		final Boolean result = collectionServices.endsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testendsWithSequenceOrderedSet() {
+		final List<Object> collection = new ArrayList<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final Set<Object> other = new LinkedHashSet<>();
+		other.add(Integer.valueOf(3));
+		other.add(Integer.valueOf(4));
+
+		final Boolean result = collectionServices.endsWith(collection, other);
+
+		assertTrue(result);
+	}
+
+	@Test
+	public void testendsWithOrderedSetOrderedSet() {
+		final Set<Object> collection = new LinkedHashSet<>();
+		collection.add(Integer.valueOf(1));
+		collection.add(Integer.valueOf(2));
+		collection.add(Integer.valueOf(3));
+		collection.add(Integer.valueOf(4));
+
+		final Set<Object> other = new LinkedHashSet<>();
+		other.add(Integer.valueOf(3));
+		other.add(Integer.valueOf(4));
+
+		final Boolean result = collectionServices.endsWith(collection, other);
+
+		assertTrue(result);
+	}
+
 }
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/generated/testOrderedSet b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/generated/testOrderedSet
index 0cc473b..1b2db78 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/generated/testOrderedSet
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/generated/testOrderedSet
@@ -353,4 +353,12 @@
 @Test booleans -> subOrderedSet(1,2) => truefalse
 @Test eClasses -> subOrderedSet(1,2) -> collect(name) => ClasseAClasseB
 @Test collections -> subOrderedSet(1,2) => abcefg
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
 @Test collections.oclAsSet() => abcefg
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/orderedSetsServices.mtl b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/orderedSetsServices.mtl
index a5a5b2f..385144d 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/orderedSetsServices.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/orderedSetsServices/orderedSetsServices.mtl
@@ -393,9 +393,15 @@
 [comment]A4-UNSUPPORTED selectByType[/comment]
 [comment]A4-UNSUPPORTED selectByKind[/comment]
 [comment]A4-UNSUPPORTED addAll[/comment]
-[comment]A4-UNSUPPORTED startsWith[/comment]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED indexOfSlice[/comment]
-[comment]A4-UNSUPPORTED endsWith[/comment]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED dropRight[/comment]
 [comment]A4-UNSUPPORTED drop[/comment]
 [comment]A4-UNSUPPORTED lastIndexOf[/comment]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/generated/testSequence b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/generated/testSequence
index 9650ed9..a7d66c8 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/generated/testSequence
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/generated/testSequence
@@ -355,3 +355,11 @@
 @Test booleans -> subSequence(1,2) => truefalse
 @Test eClasses -> subSequence(1,2) -> collect(name) => ClasseAClasseB
 @Test collections -> subSequence(1,2) => abcefg
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/sequencesServices.mtl b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/sequencesServices.mtl
index 6a48f21..3e307950 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/sequencesServices.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/src/resources/services/sequencesServices/sequencesServices.mtl
@@ -392,9 +392,15 @@
 [comment]A4-UNSUPPORTED selectByType[/comment]
 [comment]A4-UNSUPPORTED selectByKind[/comment]
 [comment]A4-UNSUPPORTED addAll[/comment]
-[comment]A4-UNSUPPORTED startsWith[/comment]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED indexOfSlice[/comment]
-[comment]A4-UNSUPPORTED endsWith[/comment]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED dropRight[/comment]
 [comment]A4-UNSUPPORTED drop[/comment]
 [comment]A4-UNSUPPORTED lastIndexOf[/comment]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/PASS b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/PASS
index 8f40d92..b4ad8d5 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/PASS
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/PASS
@@ -557,6 +557,14 @@
 	booleans -> subSequence(1,2)
 	eClasses -> subSequence(1,2) -> collect(name)
 	collections -> subSequence(1,2)
+	integers -> startsWith(OrderedSet{1, 2})
+	integers -> startsWith(OrderedSet{1, 1})
+	integers -> startsWith(OrderedSet{1, 2})
+	integers -> startsWith(OrderedSet{1, 1})
+	integers -> endsWith(OrderedSet{2, 3})
+	integers -> endsWith(OrderedSet{1, 1})
+	integers -> endsWith(OrderedSet{2, 3})
+	integers -> endsWith(OrderedSet{1, 1})
 orderedSetsServices
 	strings.toString()
 	reals.toString()
@@ -876,4 +884,12 @@
 	booleans -> subOrderedSet(1,2)
 	eClasses -> subOrderedSet(1,2) -> collect(name)
 	collections -> subOrderedSet(1,2)
+	integers -> startsWith(OrderedSet{1, 2})
+	integers -> startsWith(OrderedSet{1, 1})
+	integers -> startsWith(OrderedSet{1, 2})
+	integers -> startsWith(OrderedSet{1, 1})
+	integers -> endsWith(OrderedSet{2, 3})
+	integers -> endsWith(OrderedSet{1, 1})
+	integers -> endsWith(OrderedSet{2, 3})
+	integers -> endsWith(OrderedSet{1, 1})
 	collections.oclAsSet()
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/TODO b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/TODO
index 58bcf8a..decad6b 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/TODO
+++ b/tests/org.eclipse.acceleo.aql.migration.tests.acceleo3/status/TODO
@@ -48,7 +48,6 @@
 	 collectNested
 	 drop
 	 dropRight
-	 endsWith
 	 flatten
 	 indexOfSlice
 	 lastIndexOf
@@ -60,14 +59,12 @@
 	 removeAll
 	 selectByKind
 	 selectByType
-	 startsWith
 	(LOT1) WIP https://git.eclipse.org/r/#/c/162879/ filter(primitiveType)
 orderedSetsServices
 	 addAll
 	 collectNested
 	 drop
 	 dropRight
-	 endsWith
 	 flatten
 	 indexOfSlice
 	 lastIndexOf
@@ -78,5 +75,4 @@
 	 removeAll
 	 selectByKind
 	 selectByType
-	 startsWith
 	(LOT1) WIP https://git.eclipse.org/r/#/c/162879/ filter(primitiveType)
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/generated/testOrderedSet-expected.txt b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/generated/testOrderedSet-expected.txt
index 0cc473b..1b2db78 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/generated/testOrderedSet-expected.txt
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/generated/testOrderedSet-expected.txt
@@ -353,4 +353,12 @@
 @Test booleans -> subOrderedSet(1,2) => truefalse
 @Test eClasses -> subOrderedSet(1,2) -> collect(name) => ClasseAClasseB
 @Test collections -> subOrderedSet(1,2) => abcefg
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
 @Test collections.oclAsSet() => abcefg
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-expected.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-expected.mtl
index 6881aea..a2e4fa6 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-expected.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-expected.mtl
@@ -364,6 +364,14 @@
                 @Test booleans -> subOrderedSet(1,2) => [booleans->subOrderedSet(1, 2)/]
                 @Test eClasses -> subOrderedSet(1,2) -> collect(name) => [eClasses->subOrderedSet(1, 2)->asSequence()->collect(temp65 | temp65.name)/]
                 @Test collections -> subOrderedSet(1,2) => [collections->subOrderedSet(1, 2)/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
                 @Test collections.oclAsSet() => [collections->asSequence()->collect(temp66 | temp66->asSet())/]
               [/let]
             [/let]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-origin.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-origin.mtl
index a5a5b2f..385144d 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-origin.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices-origin.mtl
@@ -393,9 +393,15 @@
 [comment]A4-UNSUPPORTED selectByType[/comment]
 [comment]A4-UNSUPPORTED selectByKind[/comment]
 [comment]A4-UNSUPPORTED addAll[/comment]
-[comment]A4-UNSUPPORTED startsWith[/comment]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED indexOfSlice[/comment]
-[comment]A4-UNSUPPORTED endsWith[/comment]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED dropRight[/comment]
 [comment]A4-UNSUPPORTED drop[/comment]
 [comment]A4-UNSUPPORTED lastIndexOf[/comment]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.emtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.emtl
index 8d120d9..f2dcb04 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.emtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.emtl
@@ -5129,6 +5129,160 @@
                       <referredOperation xsi:type="ecore:EOperation" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)_Class/subOrderedSet"/>
                     </body>
                     <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="@Test integers -> startsWith(OrderedSet{1, 2}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 2}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="@Test integers -> endsWith(OrderedSet{2, 3}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="3">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{2, 3}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="3">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_OrderedSet(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/OrderedSet(Integer)" referredVariable="/0/testOrderedSet/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
                     <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="@Test collections.oclAsSet() => "/>
                     <body xsi:type="ocl.ecore:IteratorExp" name="collect" eType="/7/Sequence(String)">
                       <source xsi:type="ocl.ecore:VariableExp" name="collections" eType="/7/OrderedSet(OrderedSet(String))" referredVariable="/0/testOrderedSet/%/%/%/%/%/%/%/collections"/>
@@ -5370,6 +5524,20 @@
         <eAnnotations source="MTL non-standard"/>
         <eType xsi:type="ocl.ecore:OrderedSetType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)"/>
       </eOperations>
+      <eOperations name="startsWith">
+        <eAnnotations source="MTL non-standard"/>
+        <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+        <eParameters name="subCollection">
+          <eType xsi:type="ocl.ecore:OrderedSetType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)"/>
+        </eParameters>
+      </eOperations>
+      <eOperations name="endsWith">
+        <eAnnotations source="MTL non-standard"/>
+        <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+        <eParameters name="subCollection">
+          <eType xsi:type="ocl.ecore:OrderedSetType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)"/>
+        </eParameters>
+      </eOperations>
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="ecore_EPackage_Class">
       <eAnnotations source="http://www.eclipse.org/ocl/1.1.0/OCL">
@@ -6492,47 +6660,71 @@
     <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
   </ocl.ecore:Variable>
   <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
     <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
   </ocl.ecore:Variable>
   <ecore:EAnnotation source="positions">
     <eAnnotations source="positions.0" references="/0/testOrderedSet">
       <details key="start" value="72"/>
-      <details key="end" value="28693"/>
+      <details key="end" value="29341"/>
       <details key="line" value="3"/>
     </eAnnotations>
     <eAnnotations source="positions.1" references="/0/testOrderedSet/%">
       <details key="start" value="136"/>
-      <details key="end" value="28681"/>
+      <details key="end" value="29329"/>
       <details key="line" value="5"/>
     </eAnnotations>
     <eAnnotations source="positions.2" references="/0/testOrderedSet/%/%">
       <details key="start" value="251"/>
-      <details key="end" value="28673"/>
+      <details key="end" value="29321"/>
       <details key="line" value="7"/>
     </eAnnotations>
     <eAnnotations source="positions.3" references="/0/testOrderedSet/%/%/%">
       <details key="start" value="312"/>
-      <details key="end" value="28667"/>
+      <details key="end" value="29315"/>
       <details key="line" value="8"/>
     </eAnnotations>
     <eAnnotations source="positions.4" references="/0/testOrderedSet/%/%/%/%">
       <details key="start" value="369"/>
-      <details key="end" value="28661"/>
+      <details key="end" value="29309"/>
       <details key="line" value="9"/>
     </eAnnotations>
     <eAnnotations source="positions.5" references="/0/testOrderedSet/%/%/%/%/%">
       <details key="start" value="426"/>
-      <details key="end" value="28655"/>
+      <details key="end" value="29303"/>
       <details key="line" value="10"/>
     </eAnnotations>
     <eAnnotations source="positions.6" references="/0/testOrderedSet/%/%/%/%/%/%">
       <details key="start" value="495"/>
-      <details key="end" value="28649"/>
+      <details key="end" value="29297"/>
       <details key="line" value="11"/>
     </eAnnotations>
     <eAnnotations source="positions.7" references="/0/testOrderedSet/%/%/%/%/%/%/%">
       <details key="start" value="564"/>
-      <details key="end" value="28643"/>
+      <details key="end" value="29291"/>
       <details key="line" value="12"/>
     </eAnnotations>
     <eAnnotations source="positions.8" references="/0/testOrderedSet/%/%/%/%/%/%/%/%">
@@ -16171,206 +16363,456 @@
       <details key="line" value="386"/>
     </eAnnotations>
     <eAnnotations source="positions.1935" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.522">
-      <details key="start" value="28287"/>
-      <details key="end" value="28319"/>
+      <details key="start" value="27972"/>
+      <details key="end" value="28022"/>
+      <details key="line" value="396"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1936" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523">
+      <details key="start" value="28023"/>
+      <details key="end" value="28063"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1937" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523/integers">
+      <details key="start" value="28023"/>
+      <details key="end" value="28031"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1938" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523/%">
+      <details key="start" value="28046"/>
+      <details key="end" value="28062"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1939" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523/%/%/%">
+      <details key="start" value="28057"/>
+      <details key="end" value="28058"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1940" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523/%/%.1/%">
+      <details key="start" value="28060"/>
+      <details key="end" value="28061"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1941" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.524">
+      <details key="start" value="28065"/>
+      <details key="end" value="28116"/>
+      <details key="line" value="397"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1942" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.525">
+      <details key="start" value="28117"/>
+      <details key="end" value="28157"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1943" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.525/integers">
+      <details key="start" value="28117"/>
+      <details key="end" value="28125"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1944" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.525/%">
+      <details key="start" value="28140"/>
+      <details key="end" value="28156"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1945" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.525/%/%/%">
+      <details key="start" value="28151"/>
+      <details key="end" value="28152"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1946" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.525/%/%.1/%">
+      <details key="start" value="28154"/>
+      <details key="end" value="28155"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1947" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.526">
+      <details key="start" value="28159"/>
+      <details key="end" value="28210"/>
+      <details key="line" value="398"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1948" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.527">
+      <details key="start" value="28211"/>
+      <details key="end" value="28251"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1949" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.527/integers">
+      <details key="start" value="28211"/>
+      <details key="end" value="28219"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1950" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.527/%">
+      <details key="start" value="28234"/>
+      <details key="end" value="28250"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1951" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.527/%/%/%">
+      <details key="start" value="28245"/>
+      <details key="end" value="28246"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1952" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.527/%/%.1/%">
+      <details key="start" value="28248"/>
+      <details key="end" value="28249"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1953" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.528">
+      <details key="start" value="28253"/>
+      <details key="end" value="28304"/>
+      <details key="line" value="399"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1954" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.529">
+      <details key="start" value="28305"/>
+      <details key="end" value="28345"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1955" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.529/integers">
+      <details key="start" value="28305"/>
+      <details key="end" value="28313"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1956" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.529/%">
+      <details key="start" value="28328"/>
+      <details key="end" value="28344"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1957" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.529/%/%/%">
+      <details key="start" value="28339"/>
+      <details key="end" value="28340"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1958" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.529/%/%.1/%">
+      <details key="start" value="28342"/>
+      <details key="end" value="28343"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1959" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.530">
+      <details key="start" value="28347"/>
+      <details key="end" value="28348"/>
+      <details key="line" value="400"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1960" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.531">
+      <details key="start" value="28395"/>
+      <details key="end" value="28443"/>
+      <details key="line" value="401"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1961" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.532">
+      <details key="start" value="28444"/>
+      <details key="end" value="28482"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1962" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.532/integers">
+      <details key="start" value="28444"/>
+      <details key="end" value="28452"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1963" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.532/%">
+      <details key="start" value="28465"/>
+      <details key="end" value="28481"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1964" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.532/%/%/%">
+      <details key="start" value="28476"/>
+      <details key="end" value="28477"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1965" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.532/%/%.1/%">
+      <details key="start" value="28479"/>
+      <details key="end" value="28480"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1966" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.533">
+      <details key="start" value="28484"/>
+      <details key="end" value="28533"/>
+      <details key="line" value="402"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1967" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.534">
+      <details key="start" value="28534"/>
+      <details key="end" value="28572"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1968" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.534/integers">
+      <details key="start" value="28534"/>
+      <details key="end" value="28542"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1969" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.534/%">
+      <details key="start" value="28555"/>
+      <details key="end" value="28571"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1970" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.534/%/%/%">
+      <details key="start" value="28566"/>
+      <details key="end" value="28567"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1971" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.534/%/%.1/%">
+      <details key="start" value="28569"/>
+      <details key="end" value="28570"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1972" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.535">
+      <details key="start" value="28574"/>
+      <details key="end" value="28623"/>
       <details key="line" value="403"/>
     </eAnnotations>
-    <eAnnotations source="positions.1936" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42">
-      <details key="start" value="28320"/>
-      <details key="end" value="28342"/>
+    <eAnnotations source="positions.1973" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.536">
+      <details key="start" value="28624"/>
+      <details key="end" value="28662"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1937" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/collections">
-      <details key="start" value="28320"/>
-      <details key="end" value="28331"/>
+    <eAnnotations source="positions.1974" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.536/integers">
+      <details key="start" value="28624"/>
+      <details key="end" value="28632"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1938" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/%">
-      <details key="start" value="-1"/>
-      <details key="end" value="-1"/>
+    <eAnnotations source="positions.1975" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.536/%">
+      <details key="start" value="28645"/>
+      <details key="end" value="28661"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1939" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/%/temp1">
-      <details key="start" value="-1"/>
-      <details key="end" value="-1"/>
+    <eAnnotations source="positions.1976" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.536/%/%/%">
+      <details key="start" value="28656"/>
+      <details key="end" value="28657"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1940" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/temp66">
-      <details key="start" value="-1"/>
-      <details key="end" value="-1"/>
+    <eAnnotations source="positions.1977" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.536/%/%.1/%">
+      <details key="start" value="28659"/>
+      <details key="end" value="28660"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1941" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.523">
-      <details key="start" value="28344"/>
-      <details key="end" value="28345"/>
+    <eAnnotations source="positions.1978" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.537">
+      <details key="start" value="28664"/>
+      <details key="end" value="28713"/>
       <details key="line" value="404"/>
     </eAnnotations>
-    <eAnnotations source="positions.1942" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections">
+    <eAnnotations source="positions.1979" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.538">
+      <details key="start" value="28714"/>
+      <details key="end" value="28752"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1980" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.538/integers">
+      <details key="start" value="28714"/>
+      <details key="end" value="28722"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1981" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.538/%">
+      <details key="start" value="28735"/>
+      <details key="end" value="28751"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1982" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.538/%/%/%">
+      <details key="start" value="28746"/>
+      <details key="end" value="28747"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1983" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.538/%/%.1/%">
+      <details key="start" value="28749"/>
+      <details key="end" value="28750"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1984" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.539">
+      <details key="start" value="28754"/>
+      <details key="end" value="28755"/>
+      <details key="line" value="405"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1985" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.540">
+      <details key="start" value="28935"/>
+      <details key="end" value="28967"/>
+      <details key="line" value="409"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1986" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42">
+      <details key="start" value="28968"/>
+      <details key="end" value="28990"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1987" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/collections">
+      <details key="start" value="28968"/>
+      <details key="end" value="28979"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1988" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/%">
+      <details key="start" value="-1"/>
+      <details key="end" value="-1"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1989" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/%/temp1">
+      <details key="start" value="-1"/>
+      <details key="end" value="-1"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1990" references="/0/testOrderedSet/%/%/%/%/%/%/%/collect.42/temp66">
+      <details key="start" value="-1"/>
+      <details key="end" value="-1"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1991" references="/0/testOrderedSet/%/%/%/%/%/%/%/%.541">
+      <details key="start" value="28992"/>
+      <details key="end" value="28993"/>
+      <details key="line" value="410"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1992" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections">
       <details key="start" value="569"/>
       <details key="end" value="667"/>
       <details key="line" value="12"/>
     </eAnnotations>
-    <eAnnotations source="positions.1943" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%">
+    <eAnnotations source="positions.1993" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%">
       <details key="start" value="617"/>
       <details key="end" value="668"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1944" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%/strings">
+    <eAnnotations source="positions.1994" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%/strings">
       <details key="start" value="628"/>
       <details key="end" value="635"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1945" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%">
+    <eAnnotations source="positions.1995" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%">
       <details key="start" value="636"/>
       <details key="end" value="659"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1946" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%/%">
+    <eAnnotations source="positions.1996" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%/%">
       <details key="start" value="647"/>
       <details key="end" value="650"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1947" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%.1/%">
+    <eAnnotations source="positions.1997" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%.1/%">
       <details key="start" value="651"/>
       <details key="end" value="654"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1948" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%.2/%">
+    <eAnnotations source="positions.1998" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.1/%/%.2/%">
       <details key="start" value="655"/>
       <details key="end" value="658"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1949" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.2/strings">
+    <eAnnotations source="positions.1999" references="/0/testOrderedSet/%/%/%/%/%/%/%/collections/%/%.2/strings">
       <details key="start" value="660"/>
       <details key="end" value="667"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1950" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses">
+    <eAnnotations source="positions.2000" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses">
       <details key="start" value="500"/>
       <details key="end" value="562"/>
       <details key="line" value="11"/>
     </eAnnotations>
-    <eAnnotations source="positions.1951" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%">
+    <eAnnotations source="positions.2001" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%">
       <details key="start" value="533"/>
       <details key="end" value="563"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1952" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%/%">
+    <eAnnotations source="positions.2002" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%/%">
       <details key="start" value="533"/>
       <details key="end" value="547"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1953" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%/%/p">
+    <eAnnotations source="positions.2003" references="/0/testOrderedSet/%/%/%/%/%/%/eClasses/%/%/p">
       <details key="start" value="533"/>
       <details key="end" value="534"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1954" references="/0/testOrderedSet/%/%/%/%/%/booleans">
+    <eAnnotations source="positions.2004" references="/0/testOrderedSet/%/%/%/%/%/booleans">
       <details key="start" value="431"/>
       <details key="end" value="493"/>
       <details key="line" value="10"/>
     </eAnnotations>
-    <eAnnotations source="positions.1955" references="/0/testOrderedSet/%/%/%/%/%/booleans/%">
+    <eAnnotations source="positions.2005" references="/0/testOrderedSet/%/%/%/%/%/booleans/%">
       <details key="start" value="465"/>
       <details key="end" value="494"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1956" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%/%">
+    <eAnnotations source="positions.2006" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%/%">
       <details key="start" value="476"/>
       <details key="end" value="480"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1957" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%.1/%">
+    <eAnnotations source="positions.2007" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%.1/%">
       <details key="start" value="482"/>
       <details key="end" value="487"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1958" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%.2/%">
+    <eAnnotations source="positions.2008" references="/0/testOrderedSet/%/%/%/%/%/booleans/%/%.2/%">
       <details key="start" value="489"/>
       <details key="end" value="493"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1959" references="/0/testOrderedSet/%/%/%/%/reals">
+    <eAnnotations source="positions.2009" references="/0/testOrderedSet/%/%/%/%/reals">
       <details key="start" value="374"/>
       <details key="end" value="424"/>
       <details key="line" value="9"/>
     </eAnnotations>
-    <eAnnotations source="positions.1960" references="/0/testOrderedSet/%/%/%/%/reals/%">
+    <eAnnotations source="positions.2010" references="/0/testOrderedSet/%/%/%/%/reals/%">
       <details key="start" value="402"/>
       <details key="end" value="425"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1961" references="/0/testOrderedSet/%/%/%/%/reals/%/%/%">
+    <eAnnotations source="positions.2011" references="/0/testOrderedSet/%/%/%/%/reals/%/%/%">
       <details key="start" value="413"/>
       <details key="end" value="416"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1962" references="/0/testOrderedSet/%/%/%/%/reals/%/%.1/%">
+    <eAnnotations source="positions.2012" references="/0/testOrderedSet/%/%/%/%/reals/%/%.1/%">
       <details key="start" value="417"/>
       <details key="end" value="420"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1963" references="/0/testOrderedSet/%/%/%/%/reals/%/%.2/%">
+    <eAnnotations source="positions.2013" references="/0/testOrderedSet/%/%/%/%/reals/%/%.2/%">
       <details key="start" value="421"/>
       <details key="end" value="424"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1964" references="/0/testOrderedSet/%/%/%/integers">
+    <eAnnotations source="positions.2014" references="/0/testOrderedSet/%/%/%/integers">
       <details key="start" value="317"/>
       <details key="end" value="367"/>
       <details key="line" value="8"/>
     </eAnnotations>
-    <eAnnotations source="positions.1965" references="/0/testOrderedSet/%/%/%/integers/%">
+    <eAnnotations source="positions.2015" references="/0/testOrderedSet/%/%/%/integers/%">
       <details key="start" value="351"/>
       <details key="end" value="368"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1966" references="/0/testOrderedSet/%/%/%/integers/%/%/%">
+    <eAnnotations source="positions.2016" references="/0/testOrderedSet/%/%/%/integers/%/%/%">
       <details key="start" value="362"/>
       <details key="end" value="363"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1967" references="/0/testOrderedSet/%/%/%/integers/%/%.1/%">
+    <eAnnotations source="positions.2017" references="/0/testOrderedSet/%/%/%/integers/%/%.1/%">
       <details key="start" value="364"/>
       <details key="end" value="365"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1968" references="/0/testOrderedSet/%/%/%/integers/%/%.2/%">
+    <eAnnotations source="positions.2018" references="/0/testOrderedSet/%/%/%/integers/%/%.2/%">
       <details key="start" value="366"/>
       <details key="end" value="367"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1969" references="/0/testOrderedSet/%/%/strings">
+    <eAnnotations source="positions.2019" references="/0/testOrderedSet/%/%/strings">
       <details key="start" value="256"/>
       <details key="end" value="310"/>
       <details key="line" value="7"/>
     </eAnnotations>
-    <eAnnotations source="positions.1970" references="/0/testOrderedSet/%/%/strings/%">
+    <eAnnotations source="positions.2020" references="/0/testOrderedSet/%/%/strings/%">
       <details key="start" value="288"/>
       <details key="end" value="311"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1971" references="/0/testOrderedSet/%/%/strings/%/%/%">
+    <eAnnotations source="positions.2021" references="/0/testOrderedSet/%/%/strings/%/%/%">
       <details key="start" value="299"/>
       <details key="end" value="302"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1972" references="/0/testOrderedSet/%/%/strings/%/%.1/%">
+    <eAnnotations source="positions.2022" references="/0/testOrderedSet/%/%/strings/%/%.1/%">
       <details key="start" value="303"/>
       <details key="end" value="306"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1973" references="/0/testOrderedSet/%/%/strings/%/%.2/%">
+    <eAnnotations source="positions.2023" references="/0/testOrderedSet/%/%/strings/%/%.2/%">
       <details key="start" value="307"/>
       <details key="end" value="310"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1974" references="/0/testOrderedSet/%/%.1">
+    <eAnnotations source="positions.2024" references="/0/testOrderedSet/%/%.1">
       <details key="start" value="143"/>
       <details key="end" value="159"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1975" references="/0/testOrderedSet/p">
+    <eAnnotations source="positions.2025" references="/0/testOrderedSet/p">
       <details key="start" value="104"/>
       <details key="end" value="116"/>
       <details key="line" value="3"/>
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.mtl
index 6881aea..a2e4fa6 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/orderedSetsServices/orderedSetsServices.mtl
@@ -364,6 +364,14 @@
                 @Test booleans -> subOrderedSet(1,2) => [booleans->subOrderedSet(1, 2)/]
                 @Test eClasses -> subOrderedSet(1,2) -> collect(name) => [eClasses->subOrderedSet(1, 2)->asSequence()->collect(temp65 | temp65.name)/]
                 @Test collections -> subOrderedSet(1,2) => [collections->subOrderedSet(1, 2)/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
                 @Test collections.oclAsSet() => [collections->asSequence()->collect(temp66 | temp66->asSet())/]
               [/let]
             [/let]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/generated/testSequence-expected.txt b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/generated/testSequence-expected.txt
index 9650ed9..a7d66c8 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/generated/testSequence-expected.txt
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/generated/testSequence-expected.txt
@@ -355,3 +355,11 @@
 @Test booleans -> subSequence(1,2) => truefalse
 @Test eClasses -> subSequence(1,2) -> collect(name) => ClasseAClasseB
 @Test collections -> subSequence(1,2) => abcefg
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> startsWith(OrderedSet{1, 2}) => true
+@Test integers -> startsWith(OrderedSet{1, 1}) => true
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
+@Test integers -> endsWith(OrderedSet{2, 3}) => true
+@Test integers -> endsWith(OrderedSet{1, 1}) => false
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-expected.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-expected.mtl
index 2d0c2aa..2927dca 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-expected.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-expected.mtl
@@ -366,6 +366,14 @@
                 @Test booleans -> subSequence(1,2) => [booleans->subSequence(1, 2)/]
                 @Test eClasses -> subSequence(1,2) -> collect(name) => [eClasses->subSequence(1, 2)->collect(temp59 | temp59.name)/]
                 @Test collections -> subSequence(1,2) => [collections->subSequence(1, 2)/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
               [/let]
             [/let]
           [/let]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-origin.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-origin.mtl
index 6a48f21..3e307950 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-origin.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices-origin.mtl
@@ -392,9 +392,15 @@
 [comment]A4-UNSUPPORTED selectByType[/comment]
 [comment]A4-UNSUPPORTED selectByKind[/comment]
 [comment]A4-UNSUPPORTED addAll[/comment]
-[comment]A4-UNSUPPORTED startsWith[/comment]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
+@Test integers -> startsWith(OrderedSet{1, 2}) => [integers -> startsWith(OrderedSet{1, 2})/]
+@Test integers -> startsWith(OrderedSet{1, 1}) => [integers -> startsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED indexOfSlice[/comment]
-[comment]A4-UNSUPPORTED endsWith[/comment]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
+@Test integers -> endsWith(OrderedSet{2, 3}) => [integers -> endsWith(OrderedSet{2, 3})/]
+@Test integers -> endsWith(OrderedSet{1, 1}) => [integers -> endsWith(OrderedSet{1, 1})/]
 [comment]A4-UNSUPPORTED dropRight[/comment]
 [comment]A4-UNSUPPORTED drop[/comment]
 [comment]A4-UNSUPPORTED lastIndexOf[/comment]
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.emtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.emtl
index b0b833c..c8dade8 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.emtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.emtl
@@ -5064,6 +5064,160 @@
                       <referredOperation xsi:type="ecore:EOperation" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Sequence(T)_Class/subSequence"/>
                     </body>
                     <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="@Test integers -> startsWith(OrderedSet{1, 2}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 2}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> startsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/startsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="@Test integers -> endsWith(OrderedSet{2, 3}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="3">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{2, 3}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="2">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="3">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;@Test integers -> endsWith(OrderedSet{1, 1}) => "/>
+                    <body xsi:type="ocl.ecore:OperationCallExp" referredOperation="/1/oclstdlib_Sequence(T)_Class/endsWith">
+                      <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+                      <source xsi:type="ocl.ecore:VariableExp" name="integers" eType="/7/Sequence(Integer)" referredVariable="/0/testSequence/%/%/%/integers"/>
+                      <argument xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/OrderedSet(Integer)" kind="OrderedSet">
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                        <part xsi:type="ocl.ecore:CollectionItem">
+                          <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          <item xsi:type="ocl.ecore:IntegerLiteralExp" integerSymbol="1">
+                            <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Integer"/>
+                          </item>
+                        </part>
+                      </argument>
+                    </body>
+                    <body xsi:type="ocl.ecore:StringLiteralExp" stringSymbol="&#xA;"/>
                     <letVariable name="collections" eType="/7/Sequence(Sequence(String))">
                       <initExpression xsi:type="ocl.ecore:CollectionLiteralExp" eType="/7/Sequence(Sequence(String))" kind="Sequence">
                         <part xsi:type="ocl.ecore:CollectionItem" eType="/7/Sequence(String)">
@@ -5290,6 +5444,20 @@
         <eAnnotations source="MTL non-standard"/>
         <eType xsi:type="ocl.ecore:SequenceType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Sequence(T)"/>
       </eOperations>
+      <eOperations name="startsWith">
+        <eAnnotations source="MTL non-standard"/>
+        <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+        <eParameters name="subCollection">
+          <eType xsi:type="ocl.ecore:OrderedSetType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)"/>
+        </eParameters>
+      </eOperations>
+      <eOperations name="endsWith">
+        <eAnnotations source="MTL non-standard"/>
+        <eType xsi:type="ocl.ecore:PrimitiveType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/Boolean"/>
+        <eParameters name="subCollection">
+          <eType xsi:type="ocl.ecore:OrderedSetType" href="http://www.eclipse.org/ocl/1.1.0/oclstdlib.ecore#/0/OrderedSet(T)"/>
+        </eParameters>
+      </eOperations>
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="oclstdlib_OrderedSet(T)_Class">
       <eAnnotations source="http://www.eclipse.org/ocl/1.1.0/OCL">
@@ -6387,47 +6555,71 @@
     <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
   </ocl.ecore:Variable>
   <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
+    <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+  </ocl.ecore:Variable>
+  <ocl.ecore:Variable name="self">
     <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
   </ocl.ecore:Variable>
   <ecore:EAnnotation source="positions">
     <eAnnotations source="positions.0" references="/0/testSequence">
       <details key="start" value="70"/>
-      <details key="end" value="27764"/>
+      <details key="end" value="28412"/>
       <details key="line" value="3"/>
     </eAnnotations>
     <eAnnotations source="positions.1" references="/0/testSequence/%">
       <details key="start" value="132"/>
-      <details key="end" value="27752"/>
+      <details key="end" value="28400"/>
       <details key="line" value="5"/>
     </eAnnotations>
     <eAnnotations source="positions.2" references="/0/testSequence/%/%">
       <details key="start" value="242"/>
-      <details key="end" value="27744"/>
+      <details key="end" value="28392"/>
       <details key="line" value="7"/>
     </eAnnotations>
     <eAnnotations source="positions.3" references="/0/testSequence/%/%/%">
       <details key="start" value="299"/>
-      <details key="end" value="27738"/>
+      <details key="end" value="28386"/>
       <details key="line" value="8"/>
     </eAnnotations>
     <eAnnotations source="positions.4" references="/0/testSequence/%/%/%/%">
       <details key="start" value="352"/>
-      <details key="end" value="27732"/>
+      <details key="end" value="28380"/>
       <details key="line" value="9"/>
     </eAnnotations>
     <eAnnotations source="positions.5" references="/0/testSequence/%/%/%/%/%">
       <details key="start" value="405"/>
-      <details key="end" value="27726"/>
+      <details key="end" value="28374"/>
       <details key="line" value="10"/>
     </eAnnotations>
     <eAnnotations source="positions.6" references="/0/testSequence/%/%/%/%/%/%">
       <details key="start" value="470"/>
-      <details key="end" value="27720"/>
+      <details key="end" value="28368"/>
       <details key="line" value="11"/>
     </eAnnotations>
     <eAnnotations source="positions.7" references="/0/testSequence/%/%/%/%/%/%/%">
       <details key="start" value="535"/>
-      <details key="end" value="27714"/>
+      <details key="end" value="28362"/>
       <details key="line" value="12"/>
     </eAnnotations>
     <eAnnotations source="positions.8" references="/0/testSequence/%/%/%/%/%/%/%/%">
@@ -15950,172 +16142,422 @@
       <details key="end" value="26657"/>
       <details key="line" value="386"/>
     </eAnnotations>
-    <eAnnotations source="positions.1912" references="/0/testSequence/%/%/%/%/%/%/%/collections">
+    <eAnnotations source="positions.1912" references="/0/testSequence/%/%/%/%/%/%/%/%.527">
+      <details key="start" value="27048"/>
+      <details key="end" value="27098"/>
+      <details key="line" value="395"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1913" references="/0/testSequence/%/%/%/%/%/%/%/%.528">
+      <details key="start" value="27099"/>
+      <details key="end" value="27139"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1914" references="/0/testSequence/%/%/%/%/%/%/%/%.528/integers">
+      <details key="start" value="27099"/>
+      <details key="end" value="27107"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1915" references="/0/testSequence/%/%/%/%/%/%/%/%.528/%">
+      <details key="start" value="27122"/>
+      <details key="end" value="27138"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1916" references="/0/testSequence/%/%/%/%/%/%/%/%.528/%/%/%">
+      <details key="start" value="27133"/>
+      <details key="end" value="27134"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1917" references="/0/testSequence/%/%/%/%/%/%/%/%.528/%/%.1/%">
+      <details key="start" value="27136"/>
+      <details key="end" value="27137"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1918" references="/0/testSequence/%/%/%/%/%/%/%/%.529">
+      <details key="start" value="27141"/>
+      <details key="end" value="27192"/>
+      <details key="line" value="396"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1919" references="/0/testSequence/%/%/%/%/%/%/%/%.530">
+      <details key="start" value="27193"/>
+      <details key="end" value="27233"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1920" references="/0/testSequence/%/%/%/%/%/%/%/%.530/integers">
+      <details key="start" value="27193"/>
+      <details key="end" value="27201"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1921" references="/0/testSequence/%/%/%/%/%/%/%/%.530/%">
+      <details key="start" value="27216"/>
+      <details key="end" value="27232"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1922" references="/0/testSequence/%/%/%/%/%/%/%/%.530/%/%/%">
+      <details key="start" value="27227"/>
+      <details key="end" value="27228"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1923" references="/0/testSequence/%/%/%/%/%/%/%/%.530/%/%.1/%">
+      <details key="start" value="27230"/>
+      <details key="end" value="27231"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1924" references="/0/testSequence/%/%/%/%/%/%/%/%.531">
+      <details key="start" value="27235"/>
+      <details key="end" value="27286"/>
+      <details key="line" value="397"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1925" references="/0/testSequence/%/%/%/%/%/%/%/%.532">
+      <details key="start" value="27287"/>
+      <details key="end" value="27327"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1926" references="/0/testSequence/%/%/%/%/%/%/%/%.532/integers">
+      <details key="start" value="27287"/>
+      <details key="end" value="27295"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1927" references="/0/testSequence/%/%/%/%/%/%/%/%.532/%">
+      <details key="start" value="27310"/>
+      <details key="end" value="27326"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1928" references="/0/testSequence/%/%/%/%/%/%/%/%.532/%/%/%">
+      <details key="start" value="27321"/>
+      <details key="end" value="27322"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1929" references="/0/testSequence/%/%/%/%/%/%/%/%.532/%/%.1/%">
+      <details key="start" value="27324"/>
+      <details key="end" value="27325"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1930" references="/0/testSequence/%/%/%/%/%/%/%/%.533">
+      <details key="start" value="27329"/>
+      <details key="end" value="27380"/>
+      <details key="line" value="398"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1931" references="/0/testSequence/%/%/%/%/%/%/%/%.534">
+      <details key="start" value="27381"/>
+      <details key="end" value="27421"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1932" references="/0/testSequence/%/%/%/%/%/%/%/%.534/integers">
+      <details key="start" value="27381"/>
+      <details key="end" value="27389"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1933" references="/0/testSequence/%/%/%/%/%/%/%/%.534/%">
+      <details key="start" value="27404"/>
+      <details key="end" value="27420"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1934" references="/0/testSequence/%/%/%/%/%/%/%/%.534/%/%/%">
+      <details key="start" value="27415"/>
+      <details key="end" value="27416"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1935" references="/0/testSequence/%/%/%/%/%/%/%/%.534/%/%.1/%">
+      <details key="start" value="27418"/>
+      <details key="end" value="27419"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1936" references="/0/testSequence/%/%/%/%/%/%/%/%.535">
+      <details key="start" value="27423"/>
+      <details key="end" value="27424"/>
+      <details key="line" value="399"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1937" references="/0/testSequence/%/%/%/%/%/%/%/%.536">
+      <details key="start" value="27471"/>
+      <details key="end" value="27519"/>
+      <details key="line" value="400"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1938" references="/0/testSequence/%/%/%/%/%/%/%/%.537">
+      <details key="start" value="27520"/>
+      <details key="end" value="27558"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1939" references="/0/testSequence/%/%/%/%/%/%/%/%.537/integers">
+      <details key="start" value="27520"/>
+      <details key="end" value="27528"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1940" references="/0/testSequence/%/%/%/%/%/%/%/%.537/%">
+      <details key="start" value="27541"/>
+      <details key="end" value="27557"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1941" references="/0/testSequence/%/%/%/%/%/%/%/%.537/%/%/%">
+      <details key="start" value="27552"/>
+      <details key="end" value="27553"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1942" references="/0/testSequence/%/%/%/%/%/%/%/%.537/%/%.1/%">
+      <details key="start" value="27555"/>
+      <details key="end" value="27556"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1943" references="/0/testSequence/%/%/%/%/%/%/%/%.538">
+      <details key="start" value="27560"/>
+      <details key="end" value="27609"/>
+      <details key="line" value="401"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1944" references="/0/testSequence/%/%/%/%/%/%/%/%.539">
+      <details key="start" value="27610"/>
+      <details key="end" value="27648"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1945" references="/0/testSequence/%/%/%/%/%/%/%/%.539/integers">
+      <details key="start" value="27610"/>
+      <details key="end" value="27618"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1946" references="/0/testSequence/%/%/%/%/%/%/%/%.539/%">
+      <details key="start" value="27631"/>
+      <details key="end" value="27647"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1947" references="/0/testSequence/%/%/%/%/%/%/%/%.539/%/%/%">
+      <details key="start" value="27642"/>
+      <details key="end" value="27643"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1948" references="/0/testSequence/%/%/%/%/%/%/%/%.539/%/%.1/%">
+      <details key="start" value="27645"/>
+      <details key="end" value="27646"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1949" references="/0/testSequence/%/%/%/%/%/%/%/%.540">
+      <details key="start" value="27650"/>
+      <details key="end" value="27699"/>
+      <details key="line" value="402"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1950" references="/0/testSequence/%/%/%/%/%/%/%/%.541">
+      <details key="start" value="27700"/>
+      <details key="end" value="27738"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1951" references="/0/testSequence/%/%/%/%/%/%/%/%.541/integers">
+      <details key="start" value="27700"/>
+      <details key="end" value="27708"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1952" references="/0/testSequence/%/%/%/%/%/%/%/%.541/%">
+      <details key="start" value="27721"/>
+      <details key="end" value="27737"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1953" references="/0/testSequence/%/%/%/%/%/%/%/%.541/%/%/%">
+      <details key="start" value="27732"/>
+      <details key="end" value="27733"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1954" references="/0/testSequence/%/%/%/%/%/%/%/%.541/%/%.1/%">
+      <details key="start" value="27735"/>
+      <details key="end" value="27736"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1955" references="/0/testSequence/%/%/%/%/%/%/%/%.542">
+      <details key="start" value="27740"/>
+      <details key="end" value="27789"/>
+      <details key="line" value="403"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1956" references="/0/testSequence/%/%/%/%/%/%/%/%.543">
+      <details key="start" value="27790"/>
+      <details key="end" value="27828"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1957" references="/0/testSequence/%/%/%/%/%/%/%/%.543/integers">
+      <details key="start" value="27790"/>
+      <details key="end" value="27798"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1958" references="/0/testSequence/%/%/%/%/%/%/%/%.543/%">
+      <details key="start" value="27811"/>
+      <details key="end" value="27827"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1959" references="/0/testSequence/%/%/%/%/%/%/%/%.543/%/%/%">
+      <details key="start" value="27822"/>
+      <details key="end" value="27823"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1960" references="/0/testSequence/%/%/%/%/%/%/%/%.543/%/%.1/%">
+      <details key="start" value="27825"/>
+      <details key="end" value="27826"/>
+      <details key="line" value="0"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1961" references="/0/testSequence/%/%/%/%/%/%/%/%.544">
+      <details key="start" value="27830"/>
+      <details key="end" value="27831"/>
+      <details key="line" value="404"/>
+    </eAnnotations>
+    <eAnnotations source="positions.1962" references="/0/testSequence/%/%/%/%/%/%/%/collections">
       <details key="start" value="540"/>
       <details key="end" value="630"/>
       <details key="line" value="12"/>
     </eAnnotations>
-    <eAnnotations source="positions.1913" references="/0/testSequence/%/%/%/%/%/%/%/collections/%">
+    <eAnnotations source="positions.1963" references="/0/testSequence/%/%/%/%/%/%/%/collections/%">
       <details key="start" value="584"/>
       <details key="end" value="631"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1914" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%/strings">
+    <eAnnotations source="positions.1964" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%/strings">
       <details key="start" value="593"/>
       <details key="end" value="600"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1915" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%">
+    <eAnnotations source="positions.1965" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%">
       <details key="start" value="601"/>
       <details key="end" value="622"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1916" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%/%">
+    <eAnnotations source="positions.1966" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%/%">
       <details key="start" value="610"/>
       <details key="end" value="613"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1917" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%.1/%">
+    <eAnnotations source="positions.1967" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%.1/%">
       <details key="start" value="614"/>
       <details key="end" value="617"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1918" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%.2/%">
+    <eAnnotations source="positions.1968" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.1/%/%.2/%">
       <details key="start" value="618"/>
       <details key="end" value="621"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1919" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.2/strings">
+    <eAnnotations source="positions.1969" references="/0/testSequence/%/%/%/%/%/%/%/collections/%/%.2/strings">
       <details key="start" value="623"/>
       <details key="end" value="630"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1920" references="/0/testSequence/%/%/%/%/%/%/eClasses">
+    <eAnnotations source="positions.1970" references="/0/testSequence/%/%/%/%/%/%/eClasses">
       <details key="start" value="475"/>
       <details key="end" value="533"/>
       <details key="line" value="11"/>
     </eAnnotations>
-    <eAnnotations source="positions.1921" references="/0/testSequence/%/%/%/%/%/%/eClasses/%">
+    <eAnnotations source="positions.1971" references="/0/testSequence/%/%/%/%/%/%/eClasses/%">
       <details key="start" value="506"/>
       <details key="end" value="534"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1922" references="/0/testSequence/%/%/%/%/%/%/eClasses/%/%">
+    <eAnnotations source="positions.1972" references="/0/testSequence/%/%/%/%/%/%/eClasses/%/%">
       <details key="start" value="506"/>
       <details key="end" value="520"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1923" references="/0/testSequence/%/%/%/%/%/%/eClasses/%/%/p">
+    <eAnnotations source="positions.1973" references="/0/testSequence/%/%/%/%/%/%/eClasses/%/%/p">
       <details key="start" value="506"/>
       <details key="end" value="507"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1924" references="/0/testSequence/%/%/%/%/%/booleans">
+    <eAnnotations source="positions.1974" references="/0/testSequence/%/%/%/%/%/booleans">
       <details key="start" value="410"/>
       <details key="end" value="468"/>
       <details key="line" value="10"/>
     </eAnnotations>
-    <eAnnotations source="positions.1925" references="/0/testSequence/%/%/%/%/%/booleans/%">
+    <eAnnotations source="positions.1975" references="/0/testSequence/%/%/%/%/%/booleans/%">
       <details key="start" value="442"/>
       <details key="end" value="469"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1926" references="/0/testSequence/%/%/%/%/%/booleans/%/%/%">
+    <eAnnotations source="positions.1976" references="/0/testSequence/%/%/%/%/%/booleans/%/%/%">
       <details key="start" value="451"/>
       <details key="end" value="455"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1927" references="/0/testSequence/%/%/%/%/%/booleans/%/%.1/%">
+    <eAnnotations source="positions.1977" references="/0/testSequence/%/%/%/%/%/booleans/%/%.1/%">
       <details key="start" value="457"/>
       <details key="end" value="462"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1928" references="/0/testSequence/%/%/%/%/%/booleans/%/%.2/%">
+    <eAnnotations source="positions.1978" references="/0/testSequence/%/%/%/%/%/booleans/%/%.2/%">
       <details key="start" value="464"/>
       <details key="end" value="468"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1929" references="/0/testSequence/%/%/%/%/reals">
+    <eAnnotations source="positions.1979" references="/0/testSequence/%/%/%/%/reals">
       <details key="start" value="357"/>
       <details key="end" value="403"/>
       <details key="line" value="9"/>
     </eAnnotations>
-    <eAnnotations source="positions.1930" references="/0/testSequence/%/%/%/%/reals/%">
+    <eAnnotations source="positions.1980" references="/0/testSequence/%/%/%/%/reals/%">
       <details key="start" value="383"/>
       <details key="end" value="404"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1931" references="/0/testSequence/%/%/%/%/reals/%/%/%">
+    <eAnnotations source="positions.1981" references="/0/testSequence/%/%/%/%/reals/%/%/%">
       <details key="start" value="392"/>
       <details key="end" value="395"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1932" references="/0/testSequence/%/%/%/%/reals/%/%.1/%">
+    <eAnnotations source="positions.1982" references="/0/testSequence/%/%/%/%/reals/%/%.1/%">
       <details key="start" value="396"/>
       <details key="end" value="399"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1933" references="/0/testSequence/%/%/%/%/reals/%/%.2/%">
+    <eAnnotations source="positions.1983" references="/0/testSequence/%/%/%/%/reals/%/%.2/%">
       <details key="start" value="400"/>
       <details key="end" value="403"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1934" references="/0/testSequence/%/%/%/integers">
+    <eAnnotations source="positions.1984" references="/0/testSequence/%/%/%/integers">
       <details key="start" value="304"/>
       <details key="end" value="350"/>
       <details key="line" value="8"/>
     </eAnnotations>
-    <eAnnotations source="positions.1935" references="/0/testSequence/%/%/%/integers/%">
+    <eAnnotations source="positions.1985" references="/0/testSequence/%/%/%/integers/%">
       <details key="start" value="336"/>
       <details key="end" value="351"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1936" references="/0/testSequence/%/%/%/integers/%/%/%">
+    <eAnnotations source="positions.1986" references="/0/testSequence/%/%/%/integers/%/%/%">
       <details key="start" value="345"/>
       <details key="end" value="346"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1937" references="/0/testSequence/%/%/%/integers/%/%.1/%">
+    <eAnnotations source="positions.1987" references="/0/testSequence/%/%/%/integers/%/%.1/%">
       <details key="start" value="347"/>
       <details key="end" value="348"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1938" references="/0/testSequence/%/%/%/integers/%/%.2/%">
+    <eAnnotations source="positions.1988" references="/0/testSequence/%/%/%/integers/%/%.2/%">
       <details key="start" value="349"/>
       <details key="end" value="350"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1939" references="/0/testSequence/%/%/strings">
+    <eAnnotations source="positions.1989" references="/0/testSequence/%/%/strings">
       <details key="start" value="247"/>
       <details key="end" value="297"/>
       <details key="line" value="7"/>
     </eAnnotations>
-    <eAnnotations source="positions.1940" references="/0/testSequence/%/%/strings/%">
+    <eAnnotations source="positions.1990" references="/0/testSequence/%/%/strings/%">
       <details key="start" value="277"/>
       <details key="end" value="298"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1941" references="/0/testSequence/%/%/strings/%/%/%">
+    <eAnnotations source="positions.1991" references="/0/testSequence/%/%/strings/%/%/%">
       <details key="start" value="286"/>
       <details key="end" value="289"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1942" references="/0/testSequence/%/%/strings/%/%.1/%">
+    <eAnnotations source="positions.1992" references="/0/testSequence/%/%/strings/%/%.1/%">
       <details key="start" value="290"/>
       <details key="end" value="293"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1943" references="/0/testSequence/%/%/strings/%/%.2/%">
+    <eAnnotations source="positions.1993" references="/0/testSequence/%/%/strings/%/%.2/%">
       <details key="start" value="294"/>
       <details key="end" value="297"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1944" references="/0/testSequence/%/%.1">
+    <eAnnotations source="positions.1994" references="/0/testSequence/%/%.1">
       <details key="start" value="139"/>
       <details key="end" value="153"/>
       <details key="line" value="0"/>
     </eAnnotations>
-    <eAnnotations source="positions.1945" references="/0/testSequence/p">
+    <eAnnotations source="positions.1995" references="/0/testSequence/p">
       <details key="start" value="100"/>
       <details key="end" value="112"/>
       <details key="line" value="3"/>
diff --git a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.mtl b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.mtl
index 2d0c2aa..2927dca 100644
--- a/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.mtl
+++ b/tests/org.eclipse.acceleo.aql.migration.tests/resources/services/sequencesServices/sequencesServices.mtl
@@ -366,6 +366,14 @@
                 @Test booleans -> subSequence(1,2) => [booleans->subSequence(1, 2)/]
                 @Test eClasses -> subSequence(1,2) -> collect(name) => [eClasses->subSequence(1, 2)->collect(temp59 | temp59.name)/]
                 @Test collections -> subSequence(1,2) => [collections->subSequence(1, 2)/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> startsWith(OrderedSet{1, 2}) => [integers->startsWith(OrderedSet{1, 2})/]
+                @Test integers -> startsWith(OrderedSet{1, 1}) => [integers->startsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
+                @Test integers -> endsWith(OrderedSet{2, 3}) => [integers->endsWith(OrderedSet{2, 3})/]
+                @Test integers -> endsWith(OrderedSet{1, 1}) => [integers->endsWith(OrderedSet{1, 1})/]
               [/let]
             [/let]
           [/let]