transformation bug244701;

modeltype A uses ecore('http://www.eclipse.org/emf/2002/Ecore');

mapping main(in model: ecore::EPackage): ecore::EPackage {
	init {
		var a : String;
		var b : Integer;
		var c : Real;
		var d : UnlimitedNatural;
		var e : Boolean;
		var f : OclInvalid;        
		var g : OclVoid;
		var h : Collection(EObject);
		var i : Set(EObject);
		var j : OrderedSet(EObject); 
		var k : Sequence(Integer);
		var l : Bag(String);
		var m : EClass;
		var list : List(String);
		var dict : Dict(String, String);
		result := object EPackage {};
		if (a = '') and (b = 0)
			and (c = 0.0) and (d = 0)
			and not e
			and (g = null) and (f.oclIsInvalid())
			and (h->isEmpty().oclIsInvalid())
			and (i <> null) and (i->isEmpty()) and (i->asSet()= i)
			and (j <> null) and (j->isEmpty()) and (j->asOrderedSet()= j)
			and (k <> null) and (k->isEmpty()) and (k->asSequence()= k)
			and (l <> null) and (l->isEmpty()) and (l->asBag()= l)
			and (m = null) and (list->size() = 0) and (dict->size() = 0) then {
				result.name := 'Success'
			} endif; 
	}
}