| modeltype ECORE "strict" uses "http://www.eclipse.org/emf/2002/Ecore"; |
| |
| |
| transformation bug467600_Collection(); |
| |
| main() { |
| |
| // test Collection operations |
| // |
| do { |
| var c1 : Collection(Integer) := Bag{1}; |
| assert fatal(not c1->includes("")); |
| assert fatal(c1->excludes("")); |
| assert fatal(c1->count("") = 0); |
| |
| var c2 : Bag(String) := Bag{""}; |
| assert fatal(not c1->includesAll(c2)); |
| assert fatal(c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClass := object EClass{}; |
| var c1 : Collection(EClassifier) := Bag{v}; |
| assert fatal(c1->includes(v)); |
| assert fatal(not c1->excludes(v)); |
| assert fatal(c1->count(v) = 1); |
| |
| var c2 : Set(EClass) := Set{v}; |
| assert fatal(c1->includesAll(c2)); |
| assert fatal(not c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClassifier := object EClass{}; |
| var c1 : Collection(EClass) := Bag{v.oclAsType(EClass)}; |
| assert fatal(c1->includes(v)); |
| assert fatal(not c1->excludes(v)); |
| assert fatal(c1->count(v) = 1); |
| |
| var c2 : Sequence(EClassifier) := Sequence{v}; |
| assert fatal(c1->includesAll(c2)); |
| assert fatal(not c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClassifier := object EClass{}; |
| var c1 : Collection(EPackage) := Bag{object EPackage{}}; |
| assert fatal(not c1->includes(v)); |
| assert fatal(c1->excludes(v)); |
| assert fatal(c1->count(v) = 0); |
| |
| var c2 : OrderedSet(EClassifier) := OrderedSet{object EClass{}}; |
| assert fatal(not c1->includesAll(c2)); |
| assert fatal(c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| |
| // test Collection operations on nested collections |
| // |
| do { |
| // Bug in OCL (https://bugs.eclipse.org/bugs/show_bug.cgi?id=469159) |
| // |
| //assert fatal (Bag{Bag{1}}->includes(Bag{1})); |
| assert fatal (Bag{Bag{1}}->excludes(Bag{1.0})); |
| |
| assert fatal (Bag{Set{1}}->includes(Set{1})); |
| assert fatal (Bag{Set{1}}->excludes(Set{1.0})); |
| |
| assert fatal (Bag{Sequence{1}}->includes(Sequence{1})); |
| assert fatal (Bag{Sequence{1}}->excludes(Sequence{1.0})); |
| |
| assert fatal (Bag{OrderedSet{1}}->includes(OrderedSet{1})); |
| assert fatal (Bag{OrderedSet{1}}->excludes(OrderedSet{1.0})); |
| |
| assert fatal (Bag{OrderedSet{1}}->includesAll(Set{OrderedSet{1}})); |
| assert fatal (Bag{OrderedSet{1}}->excludesAll(Set{OrderedSet{1.0}})); |
| }; |
| |
| do { |
| // Bug in OCL (https://bugs.eclipse.org/bugs/show_bug.cgi?id=469159) |
| // |
| //assert fatal (Set{Bag{1}}->includes(Bag{1})); |
| assert fatal (Set{Bag{1}}->excludes(Bag{1.0})); |
| |
| assert fatal (Set{Set{1}}->includes(Set{1})); |
| assert fatal (Set{Set{1}}->excludes(Set{1.0})); |
| |
| assert fatal (Set{Sequence{1}}->includes(Sequence{1})); |
| assert fatal (Set{Sequence{1}}->excludes(Sequence{1.0})); |
| |
| assert fatal (Set{OrderedSet{1}}->includes(OrderedSet{1})); |
| assert fatal (Set{OrderedSet{1}}->excludes(OrderedSet{1.0})); |
| |
| assert fatal (Set{OrderedSet{1}}->includesAll(Set{OrderedSet{1}})); |
| assert fatal (Set{OrderedSet{1}}->excludesAll(Set{OrderedSet{1.0}})); |
| }; |
| |
| do { |
| // Bug in OCL (https://bugs.eclipse.org/bugs/show_bug.cgi?id=469159) |
| // |
| //assert fatal (OrderedSet{Bag{1}}->includes(Bag{1})); |
| assert fatal (OrderedSet{Bag{1}}->excludes(Bag{1.0})); |
| |
| assert fatal (OrderedSet{Set{1}}->includes(Set{1})); |
| assert fatal (OrderedSet{Set{1}}->excludes(Set{1.0})); |
| |
| assert fatal (OrderedSet{Sequence{1}}->includes(Sequence{1})); |
| assert fatal (OrderedSet{Sequence{1}}->excludes(Sequence{1.0})); |
| |
| assert fatal (OrderedSet{OrderedSet{1}}->includes(OrderedSet{1})); |
| assert fatal (OrderedSet{OrderedSet{1}}->excludes(OrderedSet{1.0})); |
| |
| assert fatal (OrderedSet{OrderedSet{1}}->includesAll(Set{OrderedSet{1}})); |
| assert fatal (OrderedSet{OrderedSet{1}}->excludesAll(Set{OrderedSet{1.0}})); |
| }; |
| |
| do { |
| // Bug in OCL (https://bugs.eclipse.org/bugs/show_bug.cgi?id=469159) |
| // |
| assert fatal (Sequence{Bag{1}}->includes(Bag{1})); |
| assert fatal (not Sequence{Bag{1}}->includes(Bag{1.0})); |
| |
| assert fatal (Sequence{Set{1}}->includes(Set{1})); |
| assert fatal (not Sequence{Set{1}}->includes(Set{1.0})); |
| |
| assert fatal (Sequence{Sequence{1}}->includes(Sequence{1})); |
| assert fatal (not Sequence{Sequence{1}}->includes(Sequence{1.0})); |
| |
| assert fatal (Sequence{OrderedSet{1}}->includes(OrderedSet{1})); |
| assert fatal (not Sequence{OrderedSet{1}}->includes(OrderedSet{1.0})); |
| |
| assert fatal (OrderedSet{OrderedSet{1}}->includesAll(Set{OrderedSet{1}})); |
| assert fatal (OrderedSet{OrderedSet{1}}->excludesAll(Set{OrderedSet{1.0}})); |
| }; |
| |
| do { |
| var c1 : Collection(Collection(Integer)) := Set{Sequence{1}}; |
| assert fatal(c1->includes(Sequence{1})); |
| assert fatal(c1->excludes(Bag{1})); |
| assert fatal(c1->count(Sequence{1}) = 1); |
| |
| var c2 : Collection(Sequence(String)) := Set{Sequence{""}}; |
| assert fatal(not c1->includesAll(c2)); |
| assert fatal(c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClass := object EClass{}; |
| var c1 : Collection(Collection(EClassifier)) := Set{Sequence{v}}; |
| assert fatal(c1->includes(Sequence{v})); |
| assert fatal(not c1->excludes(Sequence{v})); |
| assert fatal(c1->count(Sequence{v}) = 1); |
| assert fatal(c1->flatten()->count(v) = 1); |
| |
| var c2 : Collection(Sequence(EClass)) := Sequence{Sequence{v}}; |
| assert fatal(c1->includesAll(c2)); |
| assert fatal(not c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClassifier := object EClass{}; |
| var c1 : Collection(Collection(EClass)) := Sequence{Set{v.oclAsType(EClass)}}; |
| assert fatal(c1->includes(Set{v})); |
| assert fatal(not c1->excludes(Set{v})); |
| assert fatal(c1->count(Set{v}) = 1); |
| |
| var c2 : Bag(Collection(EClassifier)) := Bag{Set{v}}; |
| assert fatal(c1->includesAll(c2)); |
| assert fatal(not c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| do { |
| var v : EClassifier := object EClass{}; |
| var c1 : Collection(Collection(EPackage)) := OrderedSet{Set{object EPackage{}}}; |
| assert fatal(not c1->includes(Set{v})); |
| assert fatal(c1->excludes(Set{v})); |
| assert fatal(c1->count(Set{v}) = 0); |
| |
| var c2 : Collection(OrderedSet(EClassifier)) := Set{OrderedSet{object EClass{}}}; |
| assert fatal(not c1->includesAll(c2)); |
| assert fatal(c1->excludesAll(c2)); |
| assert fatal(c1 <> c2); |
| assert fatal(not (c1 = c2)); |
| }; |
| |
| |
| // test operations from 11.7.1 Collection (OCL 2.4) |
| do { |
| var c1 : Collection(OclAny) := Set{1, "2"}; |
| var c2 : Collection(String) := Set{"1", "2"}; |
| |
| // = (c : Collection(T)) : Boolean |
| assert fatal (not(c1 = c2)); |
| // <> (c : Collection(T)) : Boolean |
| assert fatal (c1 <> c2); |
| // size() : Integer |
| assert fatal (c1->size() = 2); |
| // includes(object : T) : Boolean |
| assert fatal (c1->includes(1)); |
| // excludes(object : T) : Boolean |
| assert fatal (c1->excludes(2)); |
| // count(object : T) : Integer |
| assert fatal (c1->count("2") = 1); |
| // includesAll(c2 : Collection(T)) : Boolean |
| assert fatal (c1->includesAll(Bag{1})); |
| // excludesAll(c2 : Collection(T)) : Boolean |
| assert fatal (c1->excludesAll(Sequence{2})); |
| // isEmpty() : Boolean |
| assert fatal (c1->isEmpty() = false); |
| // notEmpty() : Boolean |
| assert fatal (c1->notEmpty()); |
| // max() : T |
| var max : Integer := Set{1, 2}->max(); |
| assert fatal (max = 2); |
| // min() : T |
| var min : Integer := Set{1, 2}->min(); |
| assert fatal (min = 1); |
| // sum() : T |
| var sum : Integer := Set{1, 2}->sum(); |
| assert fatal (sum = 3); |
| // product(c2: Collection(T2)) : Set( Tuple( first: T, second: T2) ) |
| var prod : Set(Tuple(first:OclAny, second:String)) := c1->product(c2); |
| assert fatal (prod = Set{Tuple{first:OclAny = '2', second:String = '2'}, Tuple{first:OclAny = '2', second:String = '1'}, Tuple{first:OclAny = 1, second:String = '1'}, Tuple{first:OclAny = 1, second:String = '2'}}); |
| // selectByKind(type : Classifier) : Collection(T) |
| var selKind : Collection(Integer) := c1->selectByKind(Integer); |
| assert fatal (selKind = Set{1}); |
| assert fatal (selKind <> Bag{1}); |
| // selectByType(type : Classifier) : Collection(T) |
| var selType : Collection(String) := c1->selectByType(String); |
| assert fatal (selType = Set{"2"}); |
| assert fatal (selType <> Bag{"2"}); |
| // asSet() : Set(T) |
| var set : Set(OclAny) := c1->asSet(); |
| assert fatal (set = c1); |
| // asOrderedSet() : OrderedSet(T) |
| var orderedSet : OrderedSet(OclAny) := c1->asOrderedSet(); |
| //assert fatal (orderedSet = OrderedSet{1, "2"}); |
| // asSequence() : Sequence(T) |
| var sequence : Sequence(OclAny) := c1->asSequence(); |
| //assert fatal (sequence = Sequence{1, "2"}); |
| // asBag() : Bag(T) |
| var bag : Bag(OclAny) := c1->asBag(); |
| //assert fatal (bag = Bag{1, "2"}); |
| // asList() : List(T) |
| var list : List(OclAny) := c1->asList(); |
| // flatten() : Collection(T2) |
| var flat : Collection(OclAny) := c1->flatten(); |
| assert fatal (flat = c1); |
| }; |
| |
| } |
| |