modeltype Ecore uses "http://www.eclipse.org/emf/2002/Ecore";

transformation bug427348;

main() {
	var context = object EClass{};
	
	do {
		var l : List(Integer);
		var c : Collection(EClass) := Sequence{1..10}->xcollect(i | context.map m1(i.addToList(l)));
		assert fatal (c->asSet()->size() = 10);
	};
	
	do {
		var c : Collection(EClass) := Sequence{11..20}->xcollect(i | context.map m1(List{i}));
		assert fatal (c->asSet()->size() = 10);
	};
	
	do {
		var c : Collection(EClass) := Sequence{21..30}->xcollect(i | context.map m1(List{99}));
		assert fatal (c->asSet()->size() = 1);
	};
	
	do {
		var c : Collection(EClass) := Sequence{1..10}->xcollect(i | context.map m1(Sequence{i}));
		assert fatal (c->asSet()->size() = 10);
	};
	
	do {
		var c : Collection(EClass) := Sequence{21..30}->xcollect(i | context.map m1(Sequence{99}));
		assert fatal (c->asSet()->size() = 1);
	};
	
}

query Integer::addToList(inout list : List(Integer)) : List(Integer) {
	list->add(self);
	return list;
}

mapping EClass::m1(i : List(Integer)) : EClass {
	name := self.name + i->max().toString();
}
