blob: 702fb7d27ceec869788090ada5f855a7eb23d42f [file] [log] [blame]
modeltype ecore uses "http://www.eclipse.org/emf/2002/Ecore";
transformation virtualPredefinedTypeOpers(inout model : ecore);
main() {
var seq : Sequence(String) := Sequence { '' };
assert fatal (seq->addOnCollectionString(Set{}) = 'Collection(String)::addOnCollectionString');
assert fatal (seq->addOnSequenceAny() = 'Sequence(OclAny)::addOnSequenceAny()');
assert fatal (Sequence { 1 }->addOnSequenceAny() = 'Sequence(OclAny)::addOnSequenceAny()');
var x:Collection(String) := seq;
assert fatal (x->addOnCollectionAny() = 'Collection(OclAny)::addOnCollectionAny');
assert fatal (Bag{ 'aString' }->addOnCollectionAny() = 'Collection(OclAny)::addOnCollectionAny');
var s : Set(Set(String)) := Set { Set {'element'} };
assert fatal (s->addOnCollectionSetAny(Set {}) = 'Collection(Set(OclAny))::addOnCollectionSetAny');
var oAny : Collection(OclAny) := s.addOnCollectionAny(); -- collect operation calls on elements
assert fatal (oAny->includes('Collection(OclAny)::addOnCollectionAny'));
assert fatal (false.echoMe() = false);
var i : Integer := 1;
var r : Real := 1.5;
assert fatal ( i.addOnInteger(10) = i + 10);
assert fatal ( i.addOnReal(100) = i + 100);
assert fatal ( r.addOnReal(1000) = r + 1000 );
assert fatal ( r.echoMe() = r );
var a : OclAny := 'aString';
assert fatal (a.virtOper() = 'String::virtOper');
assert fatal (true.virtOper() = 'OclAny::virtOper');
assert fatal (Set { 1.2 }->addOnCollectionReal() = 'Collection(Real)::addOnCollectionReal');
-- check conformant integer
assert fatal (Set { 1 }->addOnCollectionReal() = 'Collection(Real)::addOnCollectionReal');
var source : Collection(Real) := Set { 1 };
assert fatal (source->addOnCollectionReal() = 'Collection(Real)::addOnCollectionReal');
}
helper OclAny::echoMe() : OclAny {
return self;
}
helper Integer::addOnInteger(i : Integer) : Integer {
return self + i;
}
helper Real::addOnReal(r : Real) : Real {
return self + r;
}
helper String::virtOper() : String {
return 'String::virtOper';
}
helper OclAny::virtOper() : String {
return 'OclAny::virtOper';
}
helper Collection(OclAny)::addOnCollectionAny() : String {
return 'Collection(OclAny)::addOnCollectionAny';
}
helper Collection(String)::addOnCollectionString(arg : Set(String)) : String {
return 'Collection(String)::addOnCollectionString';
}
helper Collection(Set(OclAny))::addOnCollectionSetAny(arg : Set(OclAny)) : String {
return 'Collection(Set(OclAny))::addOnCollectionSetAny';
}
helper Sequence(OclAny)::addOnSequenceAny() : String {
return 'Sequence(OclAny)::addOnSequenceAny()';
}
query Collection(Real)::addOnCollectionReal() : String {
return 'Collection(Real)::addOnCollectionReal';
}
-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=244730
query Integer::xone() : Integer {
return self.xtwo();
}
query Real::xtwo() : Integer {
return 5;
}