sources for a benchmark for ocl engine accuracy ... · sources for a benchmark for ocl engine...
TRANSCRIPT
![Page 1: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/1.jpg)
Sources for aBenchmark for OCL Engine
Accuracy, Determinateness, andEfficiency
Martin Gogolla, Mirco Kuhlmann, Fabian Buttner
May 20, 2008
![Page 2: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/2.jpg)
Contents
I. Benchmark Categories Overview 5
1. Covered UML and OCL Elements 6
II. OCL Engine Implementation Accuracy 10
2. Core Benchmark (B1) 112.1. UML Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2. Test State for Checking Invariants . . . . . . . . . . . . . . . . . . . . . 132.3. OCL Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Extended Core Benchmark (B2) 273.1. UML Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2. System State Evolution for Checking Pre- and Postconditions . . . . . . 29
3.2.1. Test State A: Ada’s Birth . . . . . . . . . . . . . . . . . . . . . . 293.2.2. Test State B: Bob’s Birth . . . . . . . . . . . . . . . . . . . . . . 303.2.3. Test State C: Marriage of Ada and Bob . . . . . . . . . . . . . . 303.2.4. Test State D: Cyd’s Birth . . . . . . . . . . . . . . . . . . . . . . 313.2.5. Test State E: Ada’s and Bob’s Divorce . . . . . . . . . . . . . . . 313.2.6. Test State F: Marriage of Ada and Cyd . . . . . . . . . . . . . . 323.2.7. Test State G: Dan’s Birth . . . . . . . . . . . . . . . . . . . . . . 323.2.8. Test State H: Dan’s Birth . . . . . . . . . . . . . . . . . . . . . . 32
3.3. System States for Evaluating OCL Queries . . . . . . . . . . . . . . . . 343.3.1. Test State – Part 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 343.3.2. Test State – Part 2 (continuation) . . . . . . . . . . . . . . . . . 35
3.4. OCL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.1. Queries Based On Test State – Part 1 . . . . . . . . . . . . . . . 353.4.2. Queries Based On Test State – Part 2 . . . . . . . . . . . . . . . 38
4. Advanced Modeling Benchmark (B3) 394.1. UML Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2. System States for Evaluating OCL Queries . . . . . . . . . . . . . . . . 404.3. Test State – Part 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.4. Test State – Part 2 (continuation) . . . . . . . . . . . . . . . . . . . . . 414.5. Test State – Part 3 (continuation) . . . . . . . . . . . . . . . . . . . . . 42
2
![Page 3: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/3.jpg)
4.6. OCL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.6.1. Queries Based On Test State – Part 1 . . . . . . . . . . . . . . . 424.6.2. Queries Based On Test State – Part 2 . . . . . . . . . . . . . . . 434.6.3. Queries Based On Test State – Part 2 . . . . . . . . . . . . . . . 44
5. Three-valued Logic Benchmark (B4) 465.1. OCL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6. OCL Laws Benchmark (B5) 496.1. OCL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.1. Reject to Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496.1.2. Select to Reject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.1.3. Exists to ForAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.1.4. ForAll to Exists . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.1.5. One to Exists and ForAll (extern) . . . . . . . . . . . . . . . . . 736.1.6. One to Exists and ForAll (intern) . . . . . . . . . . . . . . . . . . 806.1.7. Exists to Reject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.1.8. Exists to Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.1.9. ForAll to Reject . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.1.10. ForAll to Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046.1.11. One to Reject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106.1.12. One to Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166.1.13. Exists to Collect and Includes . . . . . . . . . . . . . . . . . . . . 1226.1.14. Exists to Collect and One . . . . . . . . . . . . . . . . . . . . . . 1286.1.15. ForAll to Collect and Excludes . . . . . . . . . . . . . . . . . . . 1346.1.16. ForAll to Collect and One . . . . . . . . . . . . . . . . . . . . . . 1406.1.17. One to Collect . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486.1.18. Collect to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546.1.19. Exists to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1616.1.20. ForAll to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666.1.21. One to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726.1.22. Reject to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816.1.23. Select to Iterate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1896.1.24. Iterate to Iterate with let . . . . . . . . . . . . . . . . . . . . . . 1976.1.25. Singleton to Value . . . . . . . . . . . . . . . . . . . . . . . . . . 202
III. OCL Engine Determinateness Properties 211
7. OCL Queries 2127.1. Conversion to Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . 2127.2. Additional Determinateness Properties . . . . . . . . . . . . . . . . . . . 216
IV. OCL Engine Efficiency 231
3
![Page 4: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/4.jpg)
8. UML Models 2328.1. Model A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2328.2. Model B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
9. System States for Evaluation OCL Queries 2359.1. Test State based on UML Model A . . . . . . . . . . . . . . . . . . . . . 2359.2. Test State based on UML Model B . . . . . . . . . . . . . . . . . . . . . 235
10.OCL Queries 23910.1. Queries based on UML Model A . . . . . . . . . . . . . . . . . . . . . . 23910.2. Queries based on UML Model B . . . . . . . . . . . . . . . . . . . . . . 241
4
![Page 5: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/5.jpg)
Part I.
Benchmark Categories Overview
5
![Page 6: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/6.jpg)
1. Covered UML and OCL Elements
B1 UMLB1 models (class diagram)
B2 enumerationsB2 namesB2 literals
B1 classes B1 operationsB1 names B1 namesB1 attributes B1 parameters
B1 primitive types B1 implicit self parameter onlyB1 String B2 explicit parametersB1 Boolean B1 return types
B2 enumeration types B2 no return typesB1 associations
B1 names B1 arityB1 multiplicities B1 binaryB1 explicit role names B3 ternaryB1 reflexiveness B3 properties (association class)
B1 states (object diagram)B1 objects B1 links
B1 creation B1 insertionB1 attribute values B2 deletion
B1 settingB2 changing
B1 OCLB1 definitions
B1 constraintsB2 pre- and postconditions B1 invariants
B2 @pre B1 namesB2 applied to objects B1 evaluation
B2 namesB2 evaluation
B1 queriesB2 state dependent B4 state independentB2 evaluation
B1 expressionsB1 constructors B1 types
B1 Set{}, Bag{}, Sequence{} B1 basicB1 literals B2 enumeration
6
![Page 7: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/7.jpg)
B1 String, Boolean B1 objectB1 variables B2 OclAnyB2 object identifiers B2 TupleB2 tuples B1 collectionB1 nested constructors B1 Set, Bag, SequenceB1 range expressions B1 element types
B1 Integer B1 homogeneousB1 complex expressions B1 heterogeneous
B1 complex expressions B1 complexB2 Tuple{}
B2 component accessB1 literals
B1 Integer, String, BooleanB2 enumeration
B1 operationsB1 parameters
B1 collections B1 literalsB4 empty B1 variablesB4 singleton B2 object identifiers
B4 including undefined value B2 tuplesB1 excluding undefined value B1 complex expressions
B1 many elementsB4 including undefined valueB1 excluding undefined value
B1 typesB1 class B1 object
B1 allInstances B1 <>B1 parentheses B2 oclIsUndefinedB1 no parentheses B1 user-defined query operations
B2 enumeration B1 BooleanB2 =, <>, oclIsUndefined B1 predicates
B2 Integer B2 =, oclIsUndefinedB1 >= B1 connectivesB4 =, <, -, +, * B1 and, or, implies, not
B1 String B4 xorB1 =, <>, substring B1 bindingB1 size
B1 parenthesesB2 no parenthesis
B2 isUndefinedB1 Collection
B1 Set, Bag, SequenceB1 collection of objects
B1 user-defined query operations B1 =B1 excluding, flatten, includes, including
7
![Page 8: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/8.jpg)
B4 asBag, asSequence, asSet, at, count, excludes, exists, first,B4 last, notEmpty, rejectB1 any B1 forAll
B1 (no) variable declaration B1 one iterator variableB1 (no) type declaration B1 two iterator variablesB1 literal false B1 type declarationsB4 literal true B1 no type declarations
B1 iterate B3 sizeB4 one iterator variableB1 two iterator variablesB1 type declarationsB4 no type declarations
B1 collect, isUnique, one, select B1 isEmptyB1 (no) variable declaration B1 parenthesesB1 (no) type declaration B2 no parentheses
B1 checked relationshipsB4 reject, select B4 exists, forAll B4 one, exists, forAllB4 exists, reject B4 forAll, reject B4 forAll, selectB4 one, reject B4 one, select B4 forAll, collect, oneB4 exists, collect B4 forAll, collect, B4 exists, collect,B4 one, B4 excludes B4 includesB4 collect, iterate B4 exists, iterate B4 forAll, iterateB4 one, iterate B4 reject, iterate B4 select, iterate
B1 other statements and conceptsB1 navigation B1 if-then-else-endif
B1 dot notation B1 letB1 sources B1 variables names
B1 objects B1 variables typesB1 collection constructors B1 collectionsB1 complex expressions B1 nested
B1 attribute access B1 selfB1 role name access B1 explicit
B1 directly B2 implicitB3 in role of [ ] ((2 + n)-ary reflexive association)
B1 operation callsB1 standard operationsB1 user-defined query operations
B1 implicit collect and flattenB1 undefined value
B1 provocationB1 navigation from undefined objectB5 invoking first/last on empty sequenceB1 any(false)
B1 handling (three-valued logic with equality)B1 equality (=)
8
![Page 9: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/9.jpg)
B5 and, or, implies B5 if-then-else-endifB5 left argument B5 first argumentB5 right argument B5 second argument
B6 determinateness propertiesB6 order of elements (Sequence) arranged by
B6 asSequence, asBag->asSequence, iterate, any, flattenB7 evaluation efficiency
9
![Page 10: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/10.jpg)
Part II.
OCL Engine ImplementationAccuracy
10
![Page 11: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/11.jpg)
2. Core Benchmark (B1)
Checks basic properties of the following OCL features:
• basic boolean predicates (=, <>)
• boolean connectives (and, or, not, implies, if then else endif)
• data type operations (size, substring)
• user-defined operations (e.g., in the example domain CivilStatus the operationspouse)
• navigation in expressions with dot (.), arrow (->) and dot shortcut for collect(.)
• collection operations (select, collect, forAll, any, isEmpty, iterate, isUnique,one, includes, including, excluding, flatten)
• data type literals resp. constants (e.g., ’Ada’, 2, false) and collections literals(built with Set{...}, Bag{...}, or Sequence{...}), in particular nested collec-tion literals involving OclAny (e.g., ones having type Bag(Sequence(OclAny)))
• abbreviations (let)
• access to instances of a class (allInstances)
• range expressions (low..high)
Avoids features handled syntactically differently by OCL engines:
• enumerations, undefined value, empty collections
(workarounds for these features)Invariants are divided into two groups:
• proper invariants from the example domain CivilStatus
• query invariants, i.e., invariants simulating queries because not all OCL enginessupport evaluation of queries (checking query evaluation of an OCL engine byformulating query invariants: inv QueryTerm = QueryResult) such invariantshold only in particular system states
A single invariant can appear in 6 different syntactic forms:
• 2 choices for allInstances, 3 choices for collection variables
11
![Page 12: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/12.jpg)
• Person.allInstances according to OCL 1Person.allInstances() according to OCL 2
suffix for invariant name P0 no parentheses for allInstancesP1 parentheses for allInstances
• Naming and typing of variables in collection operationsaPersonSet->select(p:Person|p.gender=’female’)aPersonSet->select(p|p.gender=’female’)aPersonSet->select(gender=’female’)
suffix for invariant name VT typed variableVN named variableVI implicit variable
(sometimes the VI form cannot be used)
The following invariants have to be checked without making any syntactic change tothe invariant text. Number of accepted invariants is a measure for the strength of thesyntax accurateness of the OCL engine.
2.1. UML Model
Figure 2.1.: Class Diagram of the Core Benchmark Model
model CivilStatusWorld
class Person
attributesname:Stringcivstat:Stringgender:Stringalive:Boolean
12
![Page 13: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/13.jpg)
operationsspouse():Person=if self.gender=’female’ then self.husband else self.wife endif
end
association Marriage betweenPerson [0..1] role wifePerson [0..1] role husband
end
2.2. Test State for Checking Invariants
Figure 2.2.: Test State of the Core Benchmark Model
!create ada:Person
!set ada.name:=’Ada’!set ada.gender:=’female’!set ada.alive:=true!set ada.civstat:=’widowed’
!create bob:Person
!set bob.name:=’Bob’!set bob.gender:=’male’!set bob.alive:=true!set bob.civstat:=’divorced’
13
![Page 14: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/14.jpg)
!create cyd:Person
!set cyd.name:=’Cyd’!set cyd.gender:=’male’!set cyd.alive:=false!set cyd.civstat:=’married’
!create dan:Person
!set dan.name:=’Dan’!set dan.gender:=’male’!set dan.alive:=true!set dan.civstat:=’married’
!create eve:Person
!set eve.name:=’Eve’!set eve.gender:=’female’!set eve.alive:=true!set eve.civstat:=’married’
!insert (eve,dan) into Marriage
2.3. OCL Constraints
constraints
-------------------------------------------------------------------------- Invariants from the domain ------------------------------------------------------------------------------------------------------------------
context Person inv enumCivilStatus:self.civstat=’single’ or self.civstat=’married’ orself.civstat=’divorced’ or self.civstat=’widowed’
------------------------------------------------------------------------
context Person inv enumGender:self.gender=’female’ or self.gender=’male’
------------------------------------------------------------------------
context Person inv aliveDefined:self.alive=true or self.alive=false
14
![Page 15: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/15.jpg)
------------------------------------------------------------------------
context Person inv nameCapitalThenSmallLetters_VT:let small:Set(String)=Set{’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,
’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’} inlet capital:Set(String)=Set{’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,
’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’} incapital->includes(self.name.substring(1,1)) andSet{2..self.name.size()}->forAll(i:Integer|small->includes(self.name.substring(i,i))) and
self.name.size()>=1
context Person inv nameCapitalThenSmallLetters_VN:let small:Set(String)=Set{’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,
’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’} inlet capital:Set(String)=Set{’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,
’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’} incapital->includes(self.name.substring(1,1)) andSet{2..self.name.size()}->forAll(i|small->includes(self.name.substring(i,i))) and
self.name.size()>=1
------------------------------------------------------------------------
context Person inv uniqueNameForAll1_P0_VT:Person.allInstances->forAll(self2:Person|self<>self2 implies self.name<>self2.name)
context Person inv uniqueNameForAll1_P0_VN:Person.allInstances->forAll(self2|self<>self2 implies self.name<>self2.name)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv uniqueNameForAll1_P1_VT:Person.allInstances()->forAll(self2:Person|
self<>self2 implies self.name<>self2.name)
context Person inv uniqueNameForAll1_P1_VN:Person.allInstances()->forAll(self2|
15
![Page 16: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/16.jpg)
self<>self2 implies self.name<>self2.name)
------------------------------------------------------------------------
context Person inv uniqueNameForAll2_P0_VT:Person.allInstances->forAll(p1,p2:Person|p1<>p2 implies p1.name<>p2.name)
context Person inv uniqueNameForAll2_P0_VN:Person.allInstances->forAll(p1,p2|p1<>p2 implies p1.name<>p2.name)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv uniqueNameForAll2_P1_VT:Person.allInstances()->forAll(p1,p2:Person|p1<>p2 implies p1.name<>p2.name)
context Person inv uniqueNameForAll2_P1_VN:Person.allInstances()->forAll(p1,p2|p1<>p2 implies p1.name<>p2.name)
------------------------------------------------------------------------
context Person inv uniqueNameIsUnique_P0_VT:Person.allInstances->isUnique(p:Person|p.name)
context Person inv uniqueNameIsUnique_P0_VN:Person.allInstances->isUnique(p|p.name)
context Person inv uniqueNameIsUnique_P0_VI:Person.allInstances->isUnique(name)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv uniqueNameIsUnique_P1_VT:Person.allInstances()->isUnique(p:Person|p.name)
context Person inv uniqueNameIsUnique_P1_VN:Person.allInstances()->isUnique(p|p.name)
context Person inv uniqueNameIsUnique_P1_VI:Person.allInstances()->isUnique(name)
------------------------------------------------------------------------
16
![Page 17: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/17.jpg)
context Person inv uniqueNameOne_P0_VT:Person.allInstances->one(p:Person|self.name=p.name)
context Person inv uniqueNameOne_P0_VN:Person.allInstances->one(p|self.name=p.name)
context Person inv uniqueNameOne_P0_VI:Person.allInstances->one(self.name=name)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv uniqueNameOne_P1_VT:Person.allInstances()->one(p:Person|self.name=p.name)
context Person inv uniqueNameOne_P1_VN:Person.allInstances()->one(p|self.name=p.name)
context Person inv uniqueNameOne_P1_VI:Person.allInstances()->one(self.name=name)
------------------------------------------------------------------------
context Person inv uniqueNameOneNot_P0_VI:not Person.allInstances->one(name=name)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv uniqueNameOneNot_P1_VI:not Person.allInstances()->one(name=name)
------------------------------------------------------------------------
context Person inv femaleHasNoWife:self.gender=’female’ implies self.wife->isEmpty()
------------------------------------------------------------------------
context Person inv maleHasNoHusband:self.gender=’male’ implies self.husband->isEmpty()
-------------------------------------------------------------------------- Invariants encoding queries -----------------------------------------------------------------------------------------------------------------
17
![Page 18: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/18.jpg)
context Person inv abcName_P0_VT:let ada=Person.allInstances->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcName_P0_VN:let ada=Person.allInstances->any(p|p.name=’Ada’) inlet bob=Person.allInstances->any(p|p.name=’Bob’) inlet cyd=Person.allInstances->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcName_P0_VI:let ada=Person.allInstances->any(name=’Ada’) inlet bob=Person.allInstances->any(name=’Bob’) inlet cyd=Person.allInstances->any(name=’Cyd’) inSet{ada,bob,cyd}->collect(name)=Bag{’Ada’,’Bob’,’Cyd’}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv abcName_P1_VT:let ada=Person.allInstances()->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances()->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcName_P1_VN:let ada=Person.allInstances()->any(p|p.name=’Ada’) inlet bob=Person.allInstances()->any(p|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcName_P1_VI:let ada=Person.allInstances()->any(name=’Ada’) inlet bob=Person.allInstances()->any(name=’Bob’) inlet cyd=Person.allInstances()->any(name=’Cyd’) inSet{ada,bob,cyd}->collect(name)=Bag{’Ada’,’Bob’,’Cyd’}
------------------------------------------------------------------------
context Person inv abcNameDotShortcutP0_VT:let ada=Person.allInstances->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
18
![Page 19: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/19.jpg)
context Person inv abcNameDotShortcutP0_VN:let ada=Person.allInstances->any(p|p.name=’Ada’) inlet bob=Person.allInstances->any(p|p.name=’Bob’) inlet cyd=Person.allInstances->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcNameDotShortcutP0_VI:let ada=Person.allInstances->any(name=’Ada’) inlet bob=Person.allInstances->any(name=’Bob’) inlet cyd=Person.allInstances->any(name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv abcNameDotShortcutP1_VT:let ada=Person.allInstances()->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances()->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcNameDotShortcutP1_VN:let ada=Person.allInstances()->any(p|p.name=’Ada’) inlet bob=Person.allInstances()->any(p|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
context Person inv abcNameDotShortcutP1_VI:let ada=Person.allInstances()->any(name=’Ada’) inlet bob=Person.allInstances()->any(name=’Bob’) inlet cyd=Person.allInstances()->any(name=’Cyd’) inSet{ada,bob,cyd}.name=Bag{’Ada’,’Bob’,’Cyd’}
------------------------------------------------------------------------
context Person inv abcAttrs_P0_VT:let ada=Person.allInstances->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p:Person|Sequence{p.name,p.civstat,p.gender,p.alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
19
![Page 20: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/20.jpg)
context Person inv abcAttrs_P0_VN:let ada=Person.allInstances->any(p|p.name=’Ada’) inlet bob=Person.allInstances->any(p|p.name=’Bob’) inlet cyd=Person.allInstances->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p|Sequence{p.name,p.civstat,p.gender,p.alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
context Person inv abcAttrs_P0_VI:let ada=Person.allInstances->any(name=’Ada’) inlet bob=Person.allInstances->any(name=’Bob’) inlet cyd=Person.allInstances->any(name=’Cyd’) inSet{ada,bob,cyd}->collect(Sequence{name,civstat,gender,alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv abcAttrs_P1_VT:let ada=Person.allInstances()->any(p:Person|p.name=’Ada’) inlet bob=Person.allInstances()->any(p:Person|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p:Person|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p:Person|Sequence{p.name,p.civstat,p.gender,p.alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
context Person inv abcAttrs_P1_VN:let ada=Person.allInstances()->any(p|p.name=’Ada’) inlet bob=Person.allInstances()->any(p|p.name=’Bob’) inlet cyd=Person.allInstances()->any(p|p.name=’Cyd’) inSet{ada,bob,cyd}->collect(p|Sequence{p.name,p.civstat,p.gender,p.alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
context Person inv abcAttrs_P1_VI:let ada=Person.allInstances()->any(name=’Ada’) inlet bob=Person.allInstances()->any(name=’Bob’) in
20
![Page 21: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/21.jpg)
let cyd=Person.allInstances()->any(name=’Cyd’) inSet{ada,bob,cyd}->collect(Sequence{name,civstat,gender,alive})=
Bag{Sequence{’Ada’,’widowed’ ,’female’,true },Sequence{’Bob’,’divorced’,’male’ ,true },Sequence{’Cyd’,’married’ ,’male’ ,false}}
------------------------------------------------------------------------
context Person inv personsWithUndefinedHusband_P0_VT:Person.allInstances->select(p:Person|p.husband=Person.allInstances->any(p:Person|p.wife->isEmpty()).wife
)->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusband_P0_VN:Person.allInstances->select(p|p.husband=Person.allInstances->any(p|p.wife->isEmpty()).wife
)->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusband_P0_VI:Person.allInstances->select(husband=Person.allInstances->any(wife->isEmpty()).wife
)->collect(name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv personsWithUndefinedHusband_P1_VT:Person.allInstances()->select(p:Person|p.husband=Person.allInstances()->any(p:Person|p.wife->isEmpty()).wife
)->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusband_P1_VN:Person.allInstances()->select(p|p.husband=Person.allInstances()->any(p|p.wife->isEmpty()).wife
)->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
21
![Page 22: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/22.jpg)
context Person inv personsWithUndefinedHusband_P1_VI:Person.allInstances()->select(husband=Person.allInstances()->any(wife->isEmpty()).wife
)->collect(name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
------------------------------------------------------------------------
context Person inv personsWithUndefinedHusbandAnyFalse_P0_VT:Person.allInstances->select(p:Person|p.husband=Person.allInstances->any(p:Person|false)
)->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusbandAnyFalse_P0_VN:Person.allInstances->select(p|p.husband=Person.allInstances->any(p|false)
)->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusbandAnyFalse_P0_VI:Person.allInstances->select(husband=Person.allInstances->any(false)
)->collect(name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv personsWithUndefinedHusbandAnyFalse_P1_VT:Person.allInstances()->select(p:Person|p.husband=Person.allInstances()->any(p:Person|false)
)->collect(p:Person|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusbandAnyFalse_P1_VN:Person.allInstances()->select(p|p.husband=Person.allInstances()->any(p|false)
)->collect(p|p.name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
context Person inv personsWithUndefinedHusbandAnyFalse_P1_VI:Person.allInstances()->select(
22
![Page 23: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/23.jpg)
husband=Person.allInstances()->any(false))->collect(name)=Bag{’Ada’,’Bob’,’Cyd’,’Dan’}
------------------------------------------------------------------------
context Person inv possiblePairs_P0_VT:let ada=Person.allInstances->any(p:Person|p.name=’Ada’) inlet emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances->iterate(w,h:Person;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair:Sequence(Person)|pair->collect(p:Person|p.name))=Bag{Sequence{’Ada’,’Bob’}}
context Person inv possiblePairs_P0_VN:let ada=Person.allInstances->any(p|p.name=’Ada’) inlet emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances->iterate(w,h;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair|pair->collect(p|p.name))=Bag{Sequence{’Ada’,’Bob’}}
context Person inv possiblePairs_P0_VI:let ada=Person.allInstances->any(name=’Ada’) inlet emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances->iterate(w,h;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair|pair->collect(name))=Bag{Sequence{’Ada’,’Bob’}}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv possiblePairs_P1_VT:let ada=Person.allInstances()->any(p:Person|p.name=’Ada’) in
23
![Page 24: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/24.jpg)
let emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances()->iterate(w,h:Person;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair:Sequence(Person)|pair->collect(p:Person|p.name))=Bag{Sequence{’Ada’,’Bob’}}
context Person inv possiblePairs_P1_VN:let ada=Person.allInstances()->any(p|p.name=’Ada’) inlet emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances()->iterate(w,h;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair|pair->collect(p|p.name))=Bag{Sequence{’Ada’,’Bob’}}
context Person inv possiblePairs_P1_VI:let ada=Person.allInstances()->any(name=’Ada’) inlet emptySeq=Sequence{ada}->excluding(ada) inPerson.allInstances()->iterate(w,h;res:Bag(Sequence(Person))=Bag{emptySeq}->excluding(emptySeq)|if w.gender=’female’ and w.alive and w.civstat<>’married’ and
h.gender=’male’ and h.alive and h.civstat<>’married’then res->including(Sequence{w,h})else res endif)->
collect(pair|pair->collect(name))=Bag{Sequence{’Ada’,’Bob’}}
------------------------------------------------------------------------
context Person inv flatten_P0_VT:let dan=Person.allInstances->any(p:Person|p.name=’Dan’) inlet eve=Person.allInstances->any(p:Person|p.name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->
24
![Page 25: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/25.jpg)
flatten()=Set{dan,eve}
context Person inv flatten_P0_VN:let dan=Person.allInstances->any(p|p.name=’Dan’) inlet eve=Person.allInstances->any(p|p.name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->
flatten()=Set{dan,eve}
context Person inv flatten_P0_VI:let dan=Person.allInstances->any(name=’Dan’) inlet eve=Person.allInstances->any(name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->
flatten()=Set{dan,eve}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
context Person inv flatten_P1_VT:let dan=Person.allInstances()->any(p:Person|p.name=’Dan’) inlet eve=Person.allInstances()->any(p:Person|p.name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->
flatten()=Set{dan,eve}
context Person inv flatten_P1_VN:let dan=Person.allInstances()->any(p|p.name=’Dan’) inlet eve=Person.allInstances()->any(p|p.name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},
25
![Page 26: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/26.jpg)
Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->flatten()=Set{dan,eve}
context Person inv flatten_P1_VI:let dan=Person.allInstances()->any(name=’Dan’) inlet eve=Person.allInstances()->any(name=’Eve’) inSet{Bag{eve},
Bag{eve.spouse()},Bag{eve.spouse().spouse()},Bag{eve.spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse()},Bag{eve.spouse().spouse().spouse().spouse().spouse()}}->
flatten()=Set{dan,eve}
26
![Page 27: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/27.jpg)
3. Extended Core Benchmark (B2)
3.1. UML Model
Figure 3.1.: Class Diagram of the Extended Core Benchmark Model
model CivilStatusWorld
enum CivilStatus {single, married, divorced, widowed}enum Gender {female, male}
class Person
attributesname:Stringcivstat:CivilStatusgender:Genderalive:Boolean
operations
birth(aName:String, aGender:Gender)
27
![Page 28: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/28.jpg)
pre freshUnlinkedPerson: name.isUndefined and civstat.isUndefined andgender.isUndefined and alive.isUndefined andwife.isUndefined and husband.isUndefined
post nameAssigned: name=aName -- equivalent to ’aName=self.name’post civstatAssigned: civstat=#singlepost genderAssigned: gender=aGenderpost isAliveAssigned: alive=true -- equivalent to ’alive’
marry(aSpouse:Person)pre aSpouseDefined: aSpouse.isDefinedpre isAlive: alivepre aSpouseAlive: aSpouse.alivepre isUnmarried: civstat<>#marriedpre aSpouseUnmarried: aSpouse.civstat<>#marriedpre differentGenders: gender<>aSpouse.genderpost isMarried: civstat=#marriedpost femaleHasMarriedHusband: gender=#female implies
husband=aSpouse and husband.civstat=#marriedpost maleHasMarriedWife: gender=#male implies
wife=aSpouse and wife.civstat=#married
divorce()pre isMarried: civstat=#marriedpre isAlive: alivepre husbandAlive: gender=#female implies husband.alivepre wifeAlive: gender=#male implies wife.alivepost isDivorced: civstat=#divorcedpost husbandDivorced: gender=#female implies
husband.isUndefined and [email protected]=#divorcedpost wifeDivorced: gender=#male implies
wife.isUndefined and [email protected]=#divorced
death()pre isAlive: alivepost notAlive: not(alive)post husbandWidowed: gender=#female and husband.isDefined implies
[email protected] and [email protected]=#widowedpost wifeWidowed: gender=#male and wife.isDefined implies
[email protected] and [email protected]=#widowed
spouse():Person=if gender=#female then husband else wife endif
constraintsinv attributesDefined: name.isDefined and civstat.isDefined and
gender.isDefined and alive.isDefined
28
![Page 29: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/29.jpg)
inv nameCapitalThenSmallLetters:let small:Set(String)=Set{’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,
’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’} inlet capital:Set(String)=Set{’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,
’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’} incapital->includes(name.substring(1,1)) andSet{2..name.size}->forAll(i |small->includes(name.substring(i,i)))
inv nameIsUnique: Person.allInstances->forAll(self2|self<>self2 implies self.name<>self2.name)
inv femaleHasNoWife: gender=#female implies wife.isUndefinedinv maleHasNoHusband: gender=#male implies husband.isUndefined
end
association Marriage betweenPerson [0..1] role wifePerson [0..1] role husband
end
3.2. System State Evolution for Checking Pre- andPostconditions
System evolution demonstrated with USE command sequences. Evolution initiated byoperation calls and execution/simulation.
3.2.1. Test State A: Ada’s Birth
Figure 3.2.: Test State A: ada birth(’Ada’,#female)
!create ada:Person
!openter ada birth(’Ada’,#female)
29
![Page 30: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/30.jpg)
read Person_birth.cmd!opexit
Code of Person_birth.cmd:
-- Person::birth(aName:String,aGender:Gender)!set self.name:=aName!set self.civstat:=#single!set self.gender:=aGender!set self.alive:=true
3.2.2. Test State B: Bob’s Birth
Figure 3.3.: Test State B: bob birth(’Bob’,#male)
!create bob:Person
!openter bob birth(’Bob’,#male)read Person_birth.cmd!opexit
3.2.3. Test State C: Marriage of Ada and Bob
Figure 3.4.: Test State C: ada marry(bob)
!openter ada marry(bob)read Person_marry.cmd!opexit
30
![Page 31: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/31.jpg)
Code of Person_marry.cmd:
-- Person::marry(aSpouse:Person)!set self.civstat:=#married!set aSpouse.civstat:=#married!insert (if self.gender=#female then self else aSpouse endif,
if self.gender=#female then aSpouse else self endif) into Marriage
3.2.4. Test State D: Cyd’s Birth
Figure 3.5.: Test State D: cyd birth(’Cyd’,#male)
!create cyd:Person
!openter cyd birth(’Cyd’,#male)read Person_birth.cmd!opexit
3.2.5. Test State E: Ada’s and Bob’s Divorce
Figure 3.6.: Test State E: ada divorce()
31
![Page 32: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/32.jpg)
!openter ada divorce()read Person_divorce.cmd!opexit
Code of Person_divorce.cmd:
-- Person::divorce()!set self.civstat:=#divorced!set self.spouse().civstat:=#divorced!delete (if self.gender=#female then self else self.wife endif,
if self.gender=#female then self.husband else self endif) from Marriage
3.2.6. Test State F: Marriage of Ada and Cyd
Figure 3.7.: Test State F: cyd marry(ada)
!openter cyd marry(ada)read Person_marry.cmd!opexit
3.2.7. Test State G: Dan’s Birth
!create dan:Person
!openter dan birth(’Dan’,#male)read Person_birth.cmd!opexit
3.2.8. Test State H: Dan’s Birth
!openter cyd death()
32
![Page 33: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/33.jpg)
Figure 3.8.: Test State G: dan birth(’Dan’,#male)
Figure 3.9.: Test State H: dan death()
read Person_death_married.cmd!opexit
Code of Person_death_married.cmd:
-- Person::death() -- for married Person objects!set self.alive:=false!set self.spouse().civstat:=#widowed!delete (if self.gender=#female then self else self.wife endif,
if self.gender=#female then self.husband else self endif) from Marriage
33
![Page 34: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/34.jpg)
3.3. System States for Evaluating OCL Queries
3.3.1. Test State – Part 1
This state equals Test State H in Sect 3.2.8.
!create ada:Person
!set ada.name:=’Ada’!set ada.civstat:=#single!set ada.gender:=#female!set ada.alive:=true
!create bob:Person
!set bob.name:=’Bob’!set bob.civstat:=#single!set bob.gender:=#male!set bob.alive:=true
!set ada.civstat:=#married!set bob.civstat:=#married!insert (ada,bob) into Marriage
!create cyd:Person
!set cyd.name:=’Cyd’!set cyd.civstat:=#single!set cyd.gender:=#male!set cyd.alive:=true
!set ada.civstat:=#divorced!set bob.civstat:=#divorced!delete (ada,bob) from Marriage
!set cyd.civstat:=#married!set ada.civstat:=#married!insert (ada,cyd) into Marriage
!create dan:Person
!set dan.name:=’Dan’!set dan.civstat:=#single!set dan.gender:=#male!set dan.alive:=true
34
![Page 35: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/35.jpg)
!set cyd.alive:=false!set ada.civstat:=#widowed!delete (ada,cyd) from Marriage
3.3.2. Test State – Part 2 (continuation)
Figure 3.10.: Test State – Part 2 of the Extended Benchmark Model
!set dan.civstat:=#married!set ada.civstat:=#married!insert (ada,dan) into Marriage
3.4. OCL Queries
3.4.1. Queries Based On Test State – Part 1
?Set{ada,bob,cyd,dan}.name
Expected Result:Bag{’Ada’,’Bob’,’Cyd’,’Dan’} : Bag(String)
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances.name
Expected Result:Bag{’Ada’,’Bob’,’Cyd’,’Dan’} : Bag(String)
. . . . . . . . . . . . . . . . . . . . . . . .
35
![Page 36: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/36.jpg)
?Set{ada,bob,cyd,dan}->collect(name)
Expected Result:Bag{’Ada’,’Bob’,’Cyd’,’Dan’} : Bag(String)
. . . . . . . . . . . . . . . . . . . . . . . .
?Set{ada,bob,cyd,dan}->collect(p|p.name)
Expected Result:Bag{’Ada’,’Bob’,’Cyd’,’Dan’} : Bag(String)
. . . . . . . . . . . . . . . . . . . . . . . .
?Set{ada,bob,cyd,dan}->collect(Sequence{name,civstat,gender,alive})
Expected Result:Bag{Sequence{’Ada’,#widowed, #female,true },
Sequence{’Bob’,#divorced,#male, true },Sequence{’Cyd’,#married, #male, false},Sequence{’Dan’,#single, #male, true }} : Bag(Sequence(OclAny))
. . . . . . . . . . . . . . . . . . . . . . . .
?Set{ada,bob,cyd,dan}->collect(p|Sequence{p.name,p.civstat,p.gender,p.alive})
Expected Result:Bag{Sequence{’Ada’,#widowed, #female,true },
Sequence{’Bob’,#divorced,#male, true },Sequence{’Cyd’,#married, #male, false},Sequence{’Dan’,#single, #male, true }} : Bag(Sequence(OclAny))
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->forAll(p1,p2|p1<>p2 implies p1.name<>p2.name)
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->isUnique(p|p.name)
Expected Result:
36
![Page 37: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/37.jpg)
true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->forAll(p|(p.gender=#female implies p.wife->isEmpty) and(p.gender=#male implies p.husband->isEmpty))
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->select(p|p.alive and p.civstat<>#widowed).civstat
Expected Result:Bag{#divorced,#single} : Bag(CivilStatus)
. . . . . . . . . . . . . . . . . . . . . . . .
?let p1=Person.allInstances->any(true) inlet p2=Person.allInstances->excluding(p1)->any(true) inlet p3=Person.allInstances->excluding(p1)->excluding(p2)->any(true) inlet p4=Person.allInstances->excluding(p1)->excluding(p2)->excluding(p3)->any(true) inSequence{p1,p2,p3,p4}=Person.allInstances->asSequence()
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?let o:OclAny=ada in o
Expected Result:ada : Person
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->iterate(w,h:Person;res:Set(Tuple(bride:Person,bridegroom:Person))=
oclEmpty(Set(Tuple(bride:Person,bridegroom:Person)))|if w.gender=#female and h.gender=#male and
37
![Page 38: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/38.jpg)
w.alive and h.alive andw.civstat<>#married and h.civstat<>#married thenres->including(Tuple{bride:w,bridegroom:h})else res endif)
Expected Result:Set{Tuple{bride:ada,bridegroom:bob},
Tuple{bride:ada,bridegroom:dan}} :Set(Tuple(bride:Person,bridegroom:Person))
. . . . . . . . . . . . . . . . . . . . . . . .
?Sequence{ada.name,ada.civstat,ada.alive,ada.gender,dan.name,dan.civstat,dan.alive,dan.gender}
Expected Result:Sequence{’Ada’,#widowed,true,#female,’Dan’,#single,true,#male} :Sequence(OclAny)
3.4.2. Queries Based On Test State – Part 2
?Sequence{ada,ada.spouse(),dan,dan.spouse()}
Expected Result:Sequence{ada,dan,dan,ada} : Sequence(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?Sequence{ada,ada.spouse(),ada.spouse().spouse(),ada.spouse().spouse().spouse()}
Expected Result:Sequence{ada,dan,ada,dan} : Sequence(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?Person.allInstances->select(husband=Person.allInstances->any(wife->isEmpty).wife)
Expected Result:Set{bob,cyd,dan} : Set(Person)
38
![Page 39: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/39.jpg)
4. Advanced Modeling Benchmark(B3)
4.1. UML Model
Figure 4.1.: Class Diagram of the Advanced Core Benchmark Model
model TernExam
class Personattributes
name:Stringend
associationclass Exam betweenPerson[0..*] role examineePerson[0..*] role examinerPerson[0..*] role recorder
attributesdate:Integer
end
constraints
context Exam inv threeParticipants:self.examinee<>self.examiner and
39
![Page 40: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/40.jpg)
self.examinee<>self.recorder andself.examiner<>self.recorder
context Exam inv threeParticipants2:Set{self.examinee,self.examiner,self.recorder}->size()=3
4.2. System States for Evaluating OCL Queries
4.3. Test State – Part 1
Figure 4.2.: Test State 1 of the Advanced Benchmark Model
!create ada,bob,cyd,dan,eve:Person!set ada.name:=’Ada’!set bob.name:=’Bob’!set cyd.name:=’Cyd’!set dan.name:=’Dan’
40
![Page 41: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/41.jpg)
!set eve.name:=’Eve’
-- Exam(examinee,examiner,recorder)!create ada_bob_cyd:Exam between (ada,bob,cyd)!set ada_bob_cyd.date:=20001023
4.4. Test State – Part 2 (continuation)
Figure 4.3.: Test State 2 of the Advanced Benchmark Model
!create dan_bob_ada:Exam between (dan,bob,ada)!set dan_bob_ada.date:=20040817
!create eve_ada_dan:Exam between (eve,ada,dan)!set eve_ada_dan.date:=20080331
41
![Page 42: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/42.jpg)
4.5. Test State – Part 3 (continuation)
Figure 4.4.: Test State 3 of the Advanced Benchmark Model
!create flo:Person!set flo.name:=’Flo’!create flo_ada_dan:Exam between (flo,ada,dan)!set flo_ada_dan.date:=20080331
4.6. OCL Queries
4.6.1. Queries Based On Test State – Part 1
?ada_bob_cyd.examinee
Expected Result:@ada : Person
42
![Page 43: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/43.jpg)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada_bob_cyd.examiner
Expected Result:@bob : Person
. . . . . . . . . . . . . . . . . . . . . . . .
?ada_bob_cyd.recorder
Expected Result:@cyd : Person
4.6.2. Queries Based On Test State – Part 2
?Exam.allInstances->select(e|e.examinee=ada)
Expected Result:Set{@ada_bob_cyd} : Set(Exam)
. . . . . . . . . . . . . . . . . . . . . . . .
?Exam.allInstances->select(e|e.recorder=ada)
Expected Result:Set{@dan_bob_ada} : Set(Exam)
. . . . . . . . . . . . . . . . . . . . . . . .
?Exam.allInstances->select(e|e.examiner=ada)
Expected Result:Set{@eve_ada_dan} : Set(Exam)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.examinee[examiner]
Expected Result:Set{@eve} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.examinee[recorder]
43
![Page 44: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/44.jpg)
Expected Result:Set{@dan} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.examiner[examinee]
Expected Result:Set{@bob} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.examiner[recorder]
Expected Result:Set{@bob} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.recorder[examinee]
Expected Result:Set{@cyd} : Set(Person)
4.6.3. Queries Based On Test State – Part 2
?ada.recorder[examiner]
Expected Result:Set{@dan} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?ada.recorder[examiner]
Expected Result:Set{@dan} : Set(Person)
. . . . . . . . . . . . . . . . . . . . . . . .
?Exam.allInstances->select(e|e.examiner=ada)->collect(e|e.recorder)
Expected Result:
44
![Page 45: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/45.jpg)
Bag{@dan,@dan} : Bag(Person)
45
![Page 46: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/46.jpg)
5. Three-valued Logic Benchmark(B4)
For further Logic Tests see Sect. IV.
5.1. OCL Queries
-- or
?true or Sequence{true}->excluding(true)->last()
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Sequence{true}->excluding(true)->last() or true
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?let B=Set{Sequence{true}->excluding(true)->last(),false,true} inB->iterate(b1,b2:Boolean;r:Sequence(Boolean)=oclEmpty(Sequence(Boolean))|r->including(b1 or b2))
Expected Result:Sequence{Undefined, Undefined, true,
Undefined, false, true,true, true, true} : Sequence(Boolean)
. . . . . . . . . . . . . . . . . . . . . . . .
-- and
?false and Sequence{true}->excluding(true)->last()
46
![Page 47: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/47.jpg)
Expected Result:false : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Sequence{true}->excluding(true)->last() and false
Expected Result:false : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?let B=Set{Sequence{true}->excluding(true)->last(),false,true} inB->iterate(b1,b2:Boolean;r:Sequence(Boolean)=oclEmpty(Sequence(Boolean))|r->including(b1 and b2))
Expected Result:Sequence{Undefined, false, Undefined,
false, false, false,Undefined, false, true} : Sequence(Boolean)
. . . . . . . . . . . . . . . . . . . . . . . .
-- implies
?false implies Sequence{true}->excluding(true)->last()
Expected Result:false : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?Sequence{true}->excluding(true)->last() implies true
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?let B=Set{Sequence{true}->excluding(true)->last(),false,true} inB->iterate(b1,b2:Boolean;r:Sequence(Boolean)=oclEmpty(Sequence(Boolean))|r->including(b1 implies b2))
47
![Page 48: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/48.jpg)
Expected Result:Sequence{Undefined, Undefined, true,
true, true, true,Undefined, false, true} : Sequence(Boolean)
. . . . . . . . . . . . . . . . . . . . . . . .
-- if then else endif
?if true then false else Sequence{true}->excluding(true)->last() endif
Expected Result:false : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
?if false then Sequence{true}->excluding(true)->last() else true endif
Expected Result:true : Boolean
. . . . . . . . . . . . . . . . . . . . . . . .
-- oclIsUndefined
?Sequence{true}->excluding(true)->last().oclIsUndefined()
Expected Result:true : Boolean
48
![Page 49: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/49.jpg)
6. OCL Laws Benchmark (B5)
6.1. OCL Queries
6.1.1. Reject to Select
-- Collection Operations
-- -- DB related
-- -- -- reject to select
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Singleton
49
![Page 50: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/50.jpg)
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
50
![Page 51: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/51.jpg)
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:
51
![Page 52: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/52.jpg)
true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
52
![Page 53: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/53.jpg)
?let c = Set{1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
53
![Page 54: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/54.jpg)
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
54
![Page 55: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/55.jpg)
?let c = Sequence{2, 3, 4, 5, 2} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->reject(i|i<4) = c->select(i|not(i<4))
Expected Result:true : Boolean
6.1.2. Select to Reject
-- Collection Operations
-- -- DB related
-- -- -- select to reject
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->select(i|i<4) = c->reject(i|not(i<4))
55
![Page 56: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/56.jpg)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)}in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
56
![Page 57: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/57.jpg)
?let c = Bag{1} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:
57
![Page 58: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/58.jpg)
true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
58
![Page 59: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/59.jpg)
?let c = Set{1, 2, 3} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} in c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
59
![Page 60: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/60.jpg)
?let c = Set{2, 3, 4, 5} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} in
60
![Page 61: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/61.jpg)
c->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->select(i|i<4) = c->reject(i|not(i<4))
Expected Result:true : Boolean
6.1.3. Exists to ForAll
-- Collection Operations
-- -- Logic
-- -- -- exists to forAll
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:
61
![Page 62: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/62.jpg)
true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} in
62
![Page 63: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/63.jpg)
c->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
63
![Page 64: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/64.jpg)
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
64
![Page 65: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/65.jpg)
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:
65
![Page 66: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/66.jpg)
true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = not c->forAll(i|not(i<4))
66
![Page 67: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/67.jpg)
Expected Result:true : Boolean
6.1.4. ForAll to Exists
-- Collection Operations
-- -- Logic
-- -- -- forAll to exists
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
67
![Page 68: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/68.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
68
![Page 69: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/69.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
69
![Page 70: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/70.jpg)
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
70
![Page 71: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/71.jpg)
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:
71
![Page 72: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/72.jpg)
true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
72
![Page 73: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/73.jpg)
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) = not c->exists(i|not(i<4))
Expected Result:true : Boolean
6.1.5. One to Exists and ForAll (extern)
-- Collection Operations
-- -- Logic
-- -- -- one to exists and forAll (extern)
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
73
![Page 74: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/74.jpg)
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------------
?let c = Set{1} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
74
![Page 75: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/75.jpg)
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:
75
![Page 76: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/76.jpg)
true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
76
![Page 77: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/77.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
77
![Page 78: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/78.jpg)
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (violating)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (not violating)
?let c = Bag{1, 2, 5, 5} in
78
![Page 79: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/79.jpg)
c->one(i|i<4) =(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 5} inc->one(i|i<4) =
(c->exists(i|i<4) and c->forAll(x,y|x<4 and y<4 implies x = y))
Expected Result:true : Boolean
79
![Page 80: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/80.jpg)
6.1.6. One to Exists and ForAll (intern)
-- Collection Operations
-- -- Logic
-- -- -- one to exists and forAll (intern)
-- -- -- -- Empty
-- -- -- -- -- Set ---------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) =
c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) =
80
![Page 81: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/81.jpg)
c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
81
![Page 82: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/82.jpg)
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) =
c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} in
82
![Page 83: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/83.jpg)
c->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
83
![Page 84: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/84.jpg)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) =
c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:
84
![Page 85: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/85.jpg)
true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) =
c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (violating)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (not violating)
?let c = Bag{1, 2, 5, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 5} in
85
![Page 86: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/86.jpg)
c->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 5} inc->one(i|i<4) =c->exists(x | x<4 and c->forAll(y|y<4 implies x = y))
Expected Result:true : Boolean
6.1.7. Exists to Reject
-- Collection Operations
-- -- Interdisciplinary
-- -- -- exists to reject
-- -- -- -- Empty
86
![Page 87: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/87.jpg)
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
87
![Page 88: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/88.jpg)
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
88
![Page 89: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/89.jpg)
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:
89
![Page 90: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/90.jpg)
true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
90
![Page 91: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/91.jpg)
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
91
![Page 92: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/92.jpg)
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = c->reject(i|i<4)->size()<c->size()
Expected Result:true : Boolean
6.1.8. Exists to Select
-- Collection Operations
-- -- Interdisciplinary
-- -- -- exists to select
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Bag
92
![Page 93: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/93.jpg)
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
93
![Page 94: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/94.jpg)
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
94
![Page 95: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/95.jpg)
?let c = Sequence{4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->select(i|i<4)->notEmpty()
95
![Page 96: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/96.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
96
![Page 97: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/97.jpg)
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
97
![Page 98: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/98.jpg)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = c->select(i|i<4)->notEmpty()
Expected Result:true : Boolean
6.1.9. ForAll to Reject
-- Collection Operations
-- -- Interdisciplinary
-- -- -- forAll to reject
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
98
![Page 99: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/99.jpg)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
99
![Page 100: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/100.jpg)
?let c = Bag{1} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
100
![Page 101: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/101.jpg)
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
101
![Page 102: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/102.jpg)
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
102
![Page 103: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/103.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} in
103
![Page 104: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/104.jpg)
c->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) = c->reject(i|i<4)->isEmpty()
Expected Result:true : Boolean
6.1.10. ForAll to Select
-- Collection Operations
-- -- Interdisciplinary
-- -- -- forAll to select
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:
104
![Page 105: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/105.jpg)
true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} in
105
![Page 106: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/106.jpg)
c->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set -------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:
106
![Page 107: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/107.jpg)
true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
107
![Page 108: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/108.jpg)
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:
108
![Page 109: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/109.jpg)
true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
109
![Page 110: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/110.jpg)
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) = (c->select(i|i<4) = c)
Expected Result:true : Boolean
6.1.11. One to Reject
-- Collection Operations
-- -- Interdisciplinary
-- -- -- one to reject
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
110
![Page 111: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/111.jpg)
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
111
![Page 112: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/112.jpg)
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
112
![Page 113: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/113.jpg)
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
113
![Page 114: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/114.jpg)
c->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
114
![Page 115: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/115.jpg)
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (violating)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (not violating)
?let c = Bag{1, 2, 5, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
115
![Page 116: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/116.jpg)
?let c = Bag{1, 2, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 5} inc->one(i|i<4) = (c->reject(i|i<4)->size() = c->size()-1)
Expected Result:true : Boolean
6.1.12. One to Select
-- Collection Operations
-- -- Interdisciplinary
-- -- -- one to select
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
116
![Page 117: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/117.jpg)
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} in
117
![Page 118: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/118.jpg)
c->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
118
![Page 119: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/119.jpg)
?let c = Bag{4} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
119
![Page 120: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/120.jpg)
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
120
![Page 121: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/121.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (violating)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (not violating)
?let c = Bag{1, 2, 5, 5} in
121
![Page 122: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/122.jpg)
c->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 5} inc->one(i|i<4) = (c->select(i|i<4)->size() = 1)
Expected Result:true : Boolean
6.1.13. Exists to Collect and Includes
-- Collection Operations
-- -- Collect
122
![Page 123: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/123.jpg)
-- -- -- exists to collect and includes
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
123
![Page 124: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/124.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
124
![Page 125: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/125.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
125
![Page 126: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/126.jpg)
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:
126
![Page 127: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/127.jpg)
true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
127
![Page 128: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/128.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->includes(true)
Expected Result:true : Boolean
6.1.14. Exists to Collect and One
-- Collection Operations
-- -- Collect
-- -- -- exists to collect and one
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:
128
![Page 129: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/129.jpg)
true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
129
![Page 130: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/130.jpg)
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:
130
![Page 131: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/131.jpg)
true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
131
![Page 132: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/132.jpg)
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
132
![Page 133: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/133.jpg)
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
133
![Page 134: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/134.jpg)
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = c->collect(i|i<4)->asSet()->one(e|e)
Expected Result:true : Boolean
6.1.15. ForAll to Collect and Excludes
-- Collection Operations
-- -- Collect
-- -- -- forAll to collect and excludes
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
134
![Page 135: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/135.jpg)
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
135
![Page 136: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/136.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
136
![Page 137: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/137.jpg)
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} in
137
![Page 138: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/138.jpg)
c->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
138
![Page 139: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/139.jpg)
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
139
![Page 140: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/140.jpg)
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) = c->collect(i|i<4)->excludes(false)
Expected Result:true : Boolean
6.1.16. ForAll to Collect and One
-- Collection Operations
-- -- Collect
-- -- -- forAll to collect and one
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
140
![Page 141: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/141.jpg)
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
141
![Page 142: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/142.jpg)
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
142
![Page 143: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/143.jpg)
-- -- -- -- -- -- -- Set -------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
143
![Page 144: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/144.jpg)
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) =(let s = c->collect(i|i<4)->asSet() in
c->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) =(let s = c->collect(i|i<4)->asSet() in
c->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
144
![Page 145: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/145.jpg)
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
145
![Page 146: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/146.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:
146
![Page 147: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/147.jpg)
true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) =
(let s = c->collect(i|i<4)->asSet() inc->notEmpty() implies s->one(true) and s->one(e|e))
Expected Result:true : Boolean
147
![Page 148: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/148.jpg)
6.1.17. One to Collect
-- Collection Operations
-- -- Collect
-- -- -- one to collect
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
148
![Page 149: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/149.jpg)
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
149
![Page 150: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/150.jpg)
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
150
![Page 151: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/151.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
151
![Page 152: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/152.jpg)
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
152
![Page 153: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/153.jpg)
-- -- -- -- -- -- -- -- Equal Values (violating)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (not violating)
?let c = Bag{1, 2, 5, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
153
![Page 154: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/154.jpg)
?let c = Sequence{1, 2, 5} inc->one(i|i<4) = (c->collect(i|i<4)->count(true) = 1)
Expected Result:true : Boolean
6.1.18. Collect to Iterate
-- Collection Operations
-- -- Iterate
-- -- -- collect
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- Sequence A
?let c = oclEmpty(Sequence(Integer)) inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:
154
![Page 155: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/155.jpg)
true : Boolean
-- -- -- -- -- Sequence B
?let c = oclEmpty(Sequence(Integer)) inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence A
?let c = Sequence{oclUndefined(Integer)} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
155
![Page 156: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/156.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence B
?let c = Sequence{oclUndefined(Integer)} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence A
?let c = Sequence{2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:
156
![Page 157: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/157.jpg)
true : Boolean
-- -- -- -- -- -- Sequence B
?let c = Sequence{2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 0, 1, 2,oclUndefined(Integer)} in
c->collect(i|i*i) =c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |
157
![Page 158: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/158.jpg)
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence A
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 0, 1, 2,oclUndefined(Integer)} in
c->collect(i|i*i) =c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence B
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 0, 1, 2,oclUndefined(Integer)} in
c->collect(i|i*i) =c->iterate(i;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
158
![Page 159: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/159.jpg)
?let c = Sequence{oclUndefined(Integer), 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{-1, 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{-1, 0, 1, 2, 1} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{-1, 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence A
159
![Page 160: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/160.jpg)
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{-1, 0, 1, 2, 1} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{-1, 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence B
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{-1, 0, 1, 2, 1} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{-1, 0, 1, 2} inc->collect(i|i*i) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->append(i*i))
Expected Result:true : Boolean
160
![Page 161: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/161.jpg)
6.1.19. Exists to Iterate
-- Collection Operations
-- -- Iterate
-- -- -- exists
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
161
![Page 162: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/162.jpg)
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
162
![Page 163: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/163.jpg)
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
163
![Page 164: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/164.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4,oclUndefined(Integer)} in
c->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
164
![Page 165: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/165.jpg)
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 4, 1} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{4, 5, 6} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
165
![Page 166: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/166.jpg)
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{4, 5, 6, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{4, 5, 6} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{4, 5, 6, 4} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{4, 5, 6} inc->exists(i|i<4) = c->iterate(i;r:Boolean = false|r or i<4)
Expected Result:true : Boolean
6.1.20. ForAll to Iterate
-- Collection Operations
-- -- Iterate
-- -- -- forAll
-- -- -- -- Empty
166
![Page 167: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/167.jpg)
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
167
![Page 168: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/168.jpg)
?let c = Sequence{oclUndefined(Integer)} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
168
![Page 169: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/169.jpg)
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:
169
![Page 170: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/170.jpg)
true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
170
![Page 171: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/171.jpg)
?let c = Bag{1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
171
![Page 172: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/172.jpg)
?let c = Bag{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->forAll(i|i<4) = c->iterate(i;r:Boolean = true|r and i<4)
Expected Result:true : Boolean
6.1.21. One to Iterate
-- Collection Operations
172
![Page 173: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/173.jpg)
-- -- Iterate
-- -- -- one
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->one(i|i<4) =c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |
if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->one(i|i<4) =c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |
if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
173
![Page 174: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/174.jpg)
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->one(i|i<4) =
174
![Page 175: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/175.jpg)
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
175
![Page 176: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/176.jpg)
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
176
![Page 177: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/177.jpg)
?let c = Bag{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |
if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5,oclUndefined(Integer)} in
c->one(i|i<4) =c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |
if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,
177
![Page 178: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/178.jpg)
(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 4, 5, 4} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:
178
![Page 179: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/179.jpg)
true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 4, 5, 4} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 4, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1, 2, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
179
![Page 180: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/180.jpg)
?let c = Bag{1, 2, 5, 1} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{1, 2, 5, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{1, 2, 5, 1} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
180
![Page 181: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/181.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{1, 2, 5, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 5} inc->one(i|i<4) =
c->iterate(i; r:Sequence(Boolean) = Sequence{false,false} |if r->first() then Sequence{true,false}else Sequence{r->last() and i<4,(r->last() and i<4) xor (r->last() or i<4)} endif)->last()
Expected Result:true : Boolean
6.1.22. Reject to Iterate
-- Collection Operations
-- -- Iterate
-- -- -- reject
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
181
![Page 182: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/182.jpg)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
182
![Page 183: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/183.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
183
![Page 184: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/184.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{4} inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) =
184
![Page 185: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/185.jpg)
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->reject(i|i<4) =c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->reject(i|i<4) =c->iterate(i;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
185
![Page 186: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/186.jpg)
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{1, 2, 3} inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
186
![Page 187: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/187.jpg)
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{2, 3, 4, 5} inc->reject(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
187
![Page 188: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/188.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{2, 3, 4, 5} inc->reject(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:
188
![Page 189: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/189.jpg)
true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->reject(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r else r->including(i) endif)
Expected Result:true : Boolean
6.1.23. Select to Iterate
-- Collection Operations
-- -- Iterate
-- -- -- select
-- -- -- -- Empty
-- -- -- -- -- Set ------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
189
![Page 190: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/190.jpg)
?let c = oclEmpty(Sequence(Integer)) inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
190
![Page 191: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/191.jpg)
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{1} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
?let c = Bag{1} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{1} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{4} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
191
![Page 192: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/192.jpg)
-- -- -- -- -- -- -- Bag
?let c = Bag{4} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
?let c = Sequence{4} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->select(i|i<4) =c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |
if i<4 then r->including(i) else r endif)
192
![Page 193: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/193.jpg)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3,oclUndefined(Integer)} in
c->select(i|i<4) =c->iterate(i;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 1, 2, 3} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Expression e fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
193
![Page 194: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/194.jpg)
?let c = Set{1, 2, 3} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, 1} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, 1} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
194
![Page 195: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/195.jpg)
?let c = Sequence{1, 2, 3} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- Expression e not fulfilled
-- -- -- -- -- -- -- Set ------------------------------------------
?let c = Set{2, 3, 4, 5} inc->select(i|i<4) =
c->iterate(i; r:Set(Integer) = oclEmpty(Set(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Bag
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Bag{2, 3, 4, 5, 4} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Bag{2, 3, 4, 5, 2} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
195
![Page 196: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/196.jpg)
?let c = Bag{2, 3, 4, 5} inc->select(i|i<4) =
c->iterate(i; r:Bag(Integer) = oclEmpty(Bag(Integer)) |if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- -- Equal Values (both violating)
?let c = Sequence{2, 3, 4, 5, 4} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- Equal Values (both not violating)
?let c = Sequence{2, 3, 4, 5, 2} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
-- -- -- -- -- -- -- -- No Equal Values
?let c = Sequence{2, 3, 4, 5} inc->select(i|i<4) =
c->iterate(i;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
if i<4 then r->including(i) else r endif)
Expected Result:true : Boolean
196
![Page 197: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/197.jpg)
6.1.24. Iterate to Iterate with let
-- Technical Relationships
-- -- iterate with let
-- -- -- Empty
-- -- -- -- Set ---------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- Singleton
197
![Page 198: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/198.jpg)
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{2} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
198
![Page 199: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/199.jpg)
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = Bag{2} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{2} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- Many Elements
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{oclUndefined(Integer), 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
199
![Page 200: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/200.jpg)
Expected Result:true : Boolean
-- -- -- -- -- Bag
-- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, -10,oclUndefined(Integer)} in
c->iterate(elem; r:Bag(Integer) = Bag{1} |r->including(r->size()+elem))
=c->iterate(elem; r:Bag(Integer) = Bag{1} |
let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
-- -- -- -- -- -- Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, -10,oclUndefined(Integer)} in
c->iterate(elem; r:Bag(Integer) = Bag{1} |r->including(r->size()+elem))
=c->iterate(elem; r:Bag(Integer) = Bag{1} |
let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
200
![Page 201: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/201.jpg)
-- -- -- -- -- -- No Equal Values
?let c = Sequence{oclUndefined(Integer), 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{1, 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Bag
-- -- -- -- -- -- Equal Values
?let c = Bag{1, 2, 3, -10, 1} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- -- No Equal Values
?let c = Bag{1, 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))
201
![Page 202: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/202.jpg)
= c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
-- -- -- -- -- -- Equal Values
?let c = Sequence{1, 2, 3, -10, 1} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
-- -- -- -- -- -- No Equal Values
?let c = Sequence{1, 2, 3, -10} inc->iterate(elem; r:Bag(Integer) = Bag{1} |
r->including(r->size()+elem))=
c->iterate(elem; r:Bag(Integer) = Bag{1} |let res = r->including(r->size()+elem) in res)
Expected Result:true : Boolean
6.1.25. Singleton to Value
-- Technical Relationships
-- -- Singleton to Value
-- -- -- Empty
-- -- -- -- Set ---------------------------------------------------
?let c = oclEmpty(Set(Integer)) inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
202
![Page 203: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/203.jpg)
if c->size() = 1 thenc->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = oclEmpty(Set(Integer)) inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = oclEmpty(Bag(Integer)) inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- Sequence
?let c = oclEmpty(Sequence(Integer)) inif c->size() = 1 then c->any(true)
203
![Page 204: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/204.jpg)
else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = oclEmpty(Sequence(Integer)) inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- Singleton
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
204
![Page 205: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/205.jpg)
-- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Bag{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Sequence{oclUndefined(Integer)} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:
205
![Page 206: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/206.jpg)
true : Boolean
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Set{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = Bag{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Bag{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}
206
![Page 207: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/207.jpg)
else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Sequence{2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- Many Elements
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{oclUndefined(Integer), 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer), 2} in
207
![Page 208: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/208.jpg)
if c->size() = 1 then c->any(true) elseoclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer), 2} inif c->size() = 1 then c->any(true) elseoclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Bag{oclUndefined(Integer), 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{oclUndefined(Integer), 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
208
![Page 209: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/209.jpg)
?let c = Sequence{oclUndefined(Integer), 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Set{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Bag
?let c = Bag{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
209
![Page 210: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/210.jpg)
Expected Result:true : Boolean
?let c = Bag{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
-- -- -- -- -- Sequence
?let c = Sequence{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =if c->size() = 1 then
c->iterate(elem; r:Integer = oclUndefined(Integer) | elem)else oclUndefined(Integer) endif
Expected Result:true : Boolean
?let c = Sequence{1, 2} inif c->size() = 1 then c->any(true)else oclUndefined(Integer) endif =
c->iterate(elem;r:Sequence(OclAny) = Sequence{oclUndefined(Integer),false} |if r->at(2) = false then Sequence{elem,true}else Sequence{oclUndefined(Integer),true} endif)->at(1)
Expected Result:true : Boolean
210
![Page 211: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/211.jpg)
Part III.
OCL Engine DeterminatenessProperties
211
![Page 212: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/212.jpg)
7. OCL Queries
7.1. Conversion to Sequence
-- Technical Relationships
-- -- Conversion to Sequences
-- -- -- Empty
-- -- -- -- Set ---------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->asSequence() = c->asBag()->asSequence()
Expected Result:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Result:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->asSequence() =
c->iterate(u;r:Tuple(theSet:Set(Integer), theSeq:Sequence(Integer)) =Tuple{theSet:c,theSeq:oclEmpty(Sequence(Integer))} |
let e = r.theSet->any(true) inTuple{theSet:r.theSet->excluding(e),
theSeq:r.theSeq->including(e)}).theSeq
Expected Result:true : Boolean
212
![Page 213: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/213.jpg)
?let c = oclEmpty(Set(Integer)) inc->asSequence() = Sequence{c}->flatten()
Expected Result:true : Boolean
-- -- -- Singleton
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ------------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->asSequence() = c->asBag()->asSequence()
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->asSequence() =
c->iterate(u;r:Tuple(theSet:Set(Integer),theSeq:Sequence(Integer)) =Tuple{theSet:c,theSeq:oclEmpty(Sequence(Integer))} |
let e = r.theSet->any(true) inTuple{theSet:r.theSet->excluding(e),
theSeq:r.theSeq->including(e)}).theSeq
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->asSequence() = Sequence{c}->flatten()
Expected Result:true : Boolean
213
![Page 214: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/214.jpg)
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ---------------------------------------------
?let c = Set{1} in c->asSequence() = c->asBag()->asSequence()
Expected Result:true : Boolean
?let c = Set{1} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Result:true : Boolean
?let c = Set{1} inc->asSequence() =
c->iterate(u;r:Tuple(theSet:Set(Integer),theSeq:Sequence(Integer)) =Tuple{theSet:c,theSeq:oclEmpty(Sequence(Integer))} |
let e = r.theSet->any(true) inTuple{theSet:r.theSet->excluding(e),
theSeq:r.theSeq->including(e)}).theSeq
Expected Result:true : Boolean
?let c = Set{1} in c->asSequence() = Sequence{c}->flatten()
Expected Result:true : Boolean
-- -- -- Many Elements
-- -- -- -- Includes Undefined
-- -- -- -- -- Set ---------------------------------------------
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->asSequence() = c->asBag()->asSequence()
Expected Result:
214
![Page 215: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/215.jpg)
true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(u;r:Tuple(theSet:Set(Integer),theSeq:Sequence(Integer)) =Tuple{theSet:c,theSeq:oclEmpty(Sequence(Integer))} |
let e = r.theSet->any(true) inTuple{theSet:r.theSet->excluding(e),
theSeq:r.theSeq->including(e)}).theSeq
Expected Result:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->asSequence() = Sequence{c}->flatten()
Expected Result:true : Boolean
-- -- -- -- Excludes Undefined
-- -- -- -- -- Set ---------------------------------------------
?let c = Set{1, -1, 3, 2, 0} inc->asSequence() = c->asBag()->asSequence()
Expected Result:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
215
![Page 216: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/216.jpg)
Expected Result:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(u;r:Tuple(theSet:Set(Integer),theSeq:Sequence(Integer)) =Tuple{theSet:c,theSeq:oclEmpty(Sequence(Integer))} |
let e = r.theSet->any(true) inTuple{theSet:r.theSet->excluding(e),
theSeq:r.theSeq->including(e)}).theSeq
Expected Result:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->asSequence() = Sequence{c}->flatten()
Expected Result:true : Boolean
7.2. Additional Determinateness Properties
-- Technical Relationships
-- -- Determinateness Constraints
-- -- -- In Addition to the Ocl4All 2007 equivalences
-- -- -- -- Empty
-- -- -- -- -- Set -----------------------------------------------------
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asBag()->any(true)
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
216
![Page 217: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/217.jpg)
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asBag()->asSequence()->any(true)
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asBag()->asSequence()->first()
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) = c->asBag()->asSequence()->last()
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
?let c = oclEmpty(Set(Integer)) inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
217
![Page 218: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/218.jpg)
?let c = oclEmpty(Set(Integer)) inSequence{c}->flatten() = c->asBag()->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- Bag
?let c = oclEmpty(Bag(Integer)) inc->asSequence() =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))
Expected Results:true : Boolean
?let c = oclEmpty(Bag(Integer)) inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = oclEmpty(Bag(Integer)) inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = oclEmpty(Bag(Integer)) inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = oclEmpty(Bag(Integer)) inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
218
![Page 219: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/219.jpg)
?let c = oclEmpty(Bag(Integer)) inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- Sequence
-- -- -- -- Singleton
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set --------------------------------------------------
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asBag()->any(true)
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asBag()->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} in
219
![Page 220: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/220.jpg)
c->any(true) = c->asBag()->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) = c->asBag()->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer)} inSequence{c}->flatten() = c->asBag()->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{oclUndefined(Integer)} inc->asSequence() =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer)} inc->any(true) = c->asSequence()->any(true)
220
![Page 221: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/221.jpg)
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer)} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer)} inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer)} inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer)} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Set -----------------------------------------------
?let c = Set{1} inc->any(true) = c->asBag()->any(true)
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asSequence()->any(true)
221
![Page 222: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/222.jpg)
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asBag()->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asBag()->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) = c->asBag()->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{1} inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
?let c = Set{1} inSequence{c}->flatten() = c->asSequence()
222
![Page 223: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/223.jpg)
Expected Results:true : Boolean
?let c = Set{1} inSequence{c}->flatten() = c->asBag()->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- Bag
?let c = Bag{1} inc->asSequence() =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))
Expected Results:true : Boolean
?let c = Bag{1} inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Bag{1} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{1} inc->any(true) = c->asSequence()->last()
Expected Results:true : Boolean
?let c = Bag{1} inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
223
![Page 224: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/224.jpg)
Expected Results:true : Boolean
?let c = Bag{1} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- Many Elements
-- -- -- -- -- Includes Undefined
-- -- -- -- -- -- Set --------------------------------------------------
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asBag()->any(true)false : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->any(true)false : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->last()false : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->first()false : Boolean
224
![Page 225: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/225.jpg)
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))->first()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
?let c = Set{oclUndefined(Integer), 1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asBag()->asSequence()
false : Boolean
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
c->asSequence() =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem)
)
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
c->any(true) = c->asSequence()->any(true)
Expected Results:
225
![Page 226: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/226.jpg)
true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
c->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
c->any(true) = c->asSequence()->last()false : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
c->any(true) =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0,oclUndefined(Integer)} in
Sequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->any(true)
226
![Page 227: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/227.jpg)
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->last()
false : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inc->any(true) =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))->first()
Expected Results:true : Boolean
?let c = Bag{oclUndefined(Integer), 1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
-- -- -- -- -- -- Sequence
-- -- -- -- -- -- -- Equal Values
-- -- -- -- -- -- -- No Equal Values
-- -- -- -- -- Excludes Undefined
-- -- -- -- -- -- Set -----------------------------------------------
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asBag()->any(true)false : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->any(true)
227
![Page 228: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/228.jpg)
Expected Results:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->any(true)
false : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->last()false : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->first()false : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) = c->asBag()->asSequence()->last()
Expected Results:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inc->any(true) =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))->first()
Expected Results:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
?let c = Set{1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asBag()->asSequence()
false : Boolean
228
![Page 229: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/229.jpg)
-- -- -- -- -- -- Bag
-- -- -- -- -- -- -- Equal Values
?let c = Bag{1, -1, 3, 2, 0, 1} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0, 1} inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0, 1} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0, 1} inc->any(true) = c->asSequence()->last()
false : Boolean
?let c = Bag{1, -1, 3, 2, 0, 1} inc->any(true) =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))->first()
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0, 1} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
229
![Page 230: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/230.jpg)
-- -- -- -- -- -- -- No Equal Values
?let c = Bag{1, -1, 3, 2, 0} inc->asSequence() =
c->iterate(elem;r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |
r->including(elem))
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->any(true)
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->first()
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0} inc->any(true) = c->asSequence()->last()
false : Boolean
?let c = Bag{1, -1, 3, 2, 0} inc->any(true) =c->iterate(elem;
r:Sequence(Integer) = oclEmpty(Sequence(Integer)) |r->including(elem))->first()
Expected Results:true : Boolean
?let c = Bag{1, -1, 3, 2, 0} inSequence{c}->flatten() = c->asSequence()
Expected Results:true : Boolean
230
![Page 231: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/231.jpg)
Part IV.
OCL Engine Efficiency
231
![Page 232: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/232.jpg)
8. UML Models
8.1. Model A
Figure 8.1.: Class Diagram of Efficiency Benchmark Model 1
model StringReal
class MathLiboperations----------------------------------------------------------------------root(arg:Real,precision:Real):Real=if arg>0 thenrootAux(arg,
precision,if arg>=1 then 1.0 else arg endif,if arg>=1 then arg else 1.0 endif)
else 0.0 endifrootAux(arg:Real,precision:Real,low:Real,high:Real):Real=let new:Real=(low+high)/2 inif (arg-new*new).abs<=precisionthen newelse rootAux(arg,
precision,if new*new<arg then new else low endif,if new*new<arg then high else new endif)
endif----------------------------------------------------------------------isPrime(arg:Integer):Boolean=if arg<=1 then false else
232
![Page 233: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/233.jpg)
if arg=2 then true else isPrimeAux(arg,2,arg div 2) endif endifisPrimeAux(arg:Integer,cur:Integer,top:Integer):Boolean=
if arg.mod(cur)=0 then false elseif cur+1<=top then isPrimeAux(arg,cur+1,top) else true endif
endif----------------------------------------------------------------------
end
8.2. Model B
Figure 8.2.: Class Diagram of Efficiency Benchmark Model 2
model MapWorld
class Townattributesname:String -- key attribute
operationsconnect():Set(Town)=fst->union(snd)
connectPlus():Set(Town)=connectPlusAux(connect())
connectPlusAux(aSet:Set(Town)):Set(Town)=let oneStep:Set(Town)=aSet->collect(t|t.connect())->flatten()->asSet() inif oneStep->exists(t|aSet->excludes(t)) thenconnectPlusAux(aSet->union(oneStep))else aSet endif
end
association Road betweenTown[0..*] role fstTown[0..*] role snd
end
233
![Page 234: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/234.jpg)
constraints
context Town inv uniqueName: Town.allInstances->isUnique(t|t.name)
234
![Page 235: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/235.jpg)
9. System States for Evaluation OCLQueries
9.1. Test State based on UML Model A
Figure 9.1.: Test State of the Efficiency Benchmark Model A
!create m:MathLib
9.2. Test State based on UML Model B
!create Town1,Town2,Town3,Town4,Town5,Town6,Town7,Town8,Town9,Town10,Town11,Town12,Town13,Town14,Town15,Town16,Town17,Town18,Town19,Town20,Town21,Town22,Town23,Town24,Town25,Town26,Town27,Town28,Town29,Town30,Town31,Town32,Town33,Town34,Town35,Town36,Town37,Town38,Town39,Town40,Town41,Town42 : Town
!set Town1.name := ’Mild Goosemont north of the Ford’!set Town2.name := ’Foggy Horseport close to the Lake’!set Town3.name := ’Great Gooseport behind the Castle’!set Town4.name := ’Mild Bearport under the River’!set Town5.name := ’Windy Bearville west of the Hill’!set Town6.name := ’Hot Dogport above the Cave’!set Town7.name := ’Mild Cowmont east of the Mountain’!set Town8.name := ’Windy Gooseharbour next to the Cave’!set Town9.name := ’Rainy Gooseharbour under the Ford’!set Town10.name := ’Windy Sparrowport next to the Ford’!set Town11.name := ’Great Horseharbour above the Lake’!set Town12.name := ’Snowy Lionharbour close to the Desert’!set Town13.name := ’Foggy Cowmont east of the Mountain’
235
![Page 236: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/236.jpg)
!set Town14.name := ’Great Lionville west of the Castle’!set Town15.name := ’Great Dogfield east of the Cave’!set Town16.name := ’Small Cowfield behind the Creek’!set Town17.name := ’Great Cowharbour next to the Castle’!set Town18.name := ’Hot Dogport under the Castle’!set Town19.name := ’Hot Lionville north of the Mountain’!set Town20.name := ’Sunny Chickenford close to the Cave’!set Town21.name := ’Hot Cowwood behind the Lake’!set Town22.name := ’Rainy Eagleport east of the Hill’!set Town23.name := ’Foggy Bearburg north of the Hill’!set Town24.name := ’Rainy Eaglemont above the Mountain’!set Town25.name := ’Mild Falconfield close to the Hill’!set Town26.name := ’Snowy Bearview north of the River’!set Town27.name := ’Rainy Bearmont under the Creek’!set Town28.name := ’Cold Lionharbour far from the Castle’!set Town29.name := ’Hot Horseport far from the Mountain’!set Town30.name := ’Mild Falconwood behind the River’!set Town31.name := ’Great Eagleford west of the Mountain’!set Town32.name := ’Cold Sparrowwood south of the Lake’!set Town33.name := ’Hot Falconharbour above the Hill’!set Town34.name := ’Rainy Eaglegreen next to the River’!set Town35.name := ’Small Horseharbour north of the Desert’!set Town36.name := ’Rainy Cowmont west of the Mountain’!set Town37.name := ’Rainy Gooseville under the Mountain’!set Town38.name := ’Snowy Lionharbour east of the Sea’!set Town39.name := ’Hot Bearfield east of the Cave’!set Town40.name := ’Hot Bearview above the Desert’!set Town41.name := ’Small Horsegreen north of the Sea’!set Town42.name := ’Hot Sparrowville south of the Desert’
!insert (Town31,Town8) into Road!insert (Town38,Town2) into Road!insert (Town36,Town16) into Road!insert (Town32,Town7) into Road!insert (Town17,Town6) into Road!insert (Town32,Town17) into Road!insert (Town19,Town23) into Road!insert (Town9,Town16) into Road!insert (Town31,Town17) into Road!insert (Town15,Town30) into Road!insert (Town1,Town38) into Road!insert (Town11,Town9) into Road!insert (Town27,Town35) into Road!insert (Town4,Town33) into Road!insert (Town25,Town21) into Road
236
![Page 237: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/237.jpg)
!insert (Town6,Town35) into Road!insert (Town8,Town7) into Road!insert (Town24,Town7) into Road!insert (Town4,Town29) into Road!insert (Town17,Town12) into Road!insert (Town1,Town3) into Road!insert (Town42,Town17) into Road!insert (Town9,Town26) into Road!insert (Town38,Town41) into Road!insert (Town14,Town18) into Road!insert (Town14,Town28) into Road!insert (Town2,Town18) into Road!insert (Town8,Town42) into Road!insert (Town28,Town2) into Road!insert (Town5,Town13) into Road!insert (Town16,Town29) into Road!insert (Town29,Town1) into Road!insert (Town40,Town13) into Road!insert (Town15,Town10) into Road!insert (Town16,Town13) into Road!insert (Town24,Town37) into Road!insert (Town13,Town22) into Road!insert (Town1,Town39) into Road!insert (Town34,Town31) into Road!insert (Town19,Town39) into Road!insert (Town36,Town9) into Road!insert (Town11,Town18) into Road
237
![Page 238: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/238.jpg)
Figure 9.2.: Test State of the Efficiency Benchmark Model B
238
![Page 239: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/239.jpg)
10. OCL Queries
10.1. Queries based on UML Model A
--------------------------------------------------------------------- Identifiers in this file have been shortened ---------------------------------------------------------------------------------------- Build truth tables for boolean connectives ----------------------------------------------------------------------------------------?Sequence{1..16}->iterate(i:Integer;
res:Sequence(Sequence(Boolean))=Set{false,true,oclUndefined(Boolean)}->iterate(b1,b2:Boolean;res:Sequence(Sequence(Boolean))=oclEmpty(Sequence(Sequence(Boolean)))|res->including(Sequence{b1,b2,not(b1),b1 and b2,b1 or b2,b1 xor b2,b1 implies b2,b1=b2,b1<>b2}))|res)
Expected Result:Sequence{Sequence{Undef,Undef,Undef,Undef,Undef,Undef,Undef,true, false},Sequence{Undef,false,Undef,false,Undef,Undef,Undef,false,true },Sequence{Undef,true, Undef,Undef,true, Undef,true, false,true },Sequence{false,Undef,true, false,Undef,Undef,true, false,true },Sequence{false,false,true, false,false,false,true, true, false},Sequence{false,true, true, false,true, true, true, false,true },Sequence{true, Undef,false,Undef,true, Undef,Undef,false,true },Sequence{true, false,false,false,true, true, false,false,true },Sequence{true, true, false,true, true, false,true, true, false}} :
Sequence(Sequence(Boolean))
--------------------------------------------------------------------- Invert a long string --------------------------------------------------------------------------------------------------------------?let base:String=’0123456789’.concat(’abcdefghijklmnopqrstuvwxyz’).
concat(’ABCDEFGHIJKLMNOPQRSTUVWXYZ’) inlet count:Integer=16 inlet longstr:String=Set{1..count}->iterate(i:Integer;res:String=’’|res.concat(base)) in
Set{1..longstr.size()}->iterate(i:Integer;res:String=’’|
239
![Page 240: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/240.jpg)
res.concat(longstr.substring(longstr.size()+1-i,longstr.size()+1-i)))
Expected Result:’ZYX ... 210’ : String
--------------------------------------------------------------------- Compute all prime numbers up to a given upper bound -------------------------------------------------------------------------------
?Sequence{1..2048}->iterate(i:Integer;res:Sequence(Integer)=oclEmpty(Sequence(Integer))|if m.isPrime(i) then res->including(i) else res endif)
Expected Result:Sequence{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97, ..., 2003,2011,2017,2027,2029,2039} :Sequence(Integer)
?Sequence{1..16}->iterate(i;res:Sequence(Sequence(OclAny))=oclEmpty(Sequence(Sequence(OclAny)))|res->including(Sequence{i,m.isPrime(i)}))->select(last()=true)
Expected Result:Sequence{Sequence{2,true},Sequence{3,true},Sequence{5,true},
Sequence{7,true},Sequence{11,true},Sequence{13,true}} :Sequence(Sequence(OclAny))
--------------------------------------------------------------------- Compute the root of 10.89 with precision 1/10^16 ----------------------------------------------------------------------------------
?Set{1..16}->iterate(i;res:Real=m.root(10.89,
1/(10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10))|res)
Expected Result:3.300000000066939 : Real
--------------------------------------------------------------------- USE and Java are already bad in computing 3.3*3.3=10.89 ---------------------------------------------------------------------------?3.3*3.3
Expected Result:
240
![Page 241: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/241.jpg)
10.889999999999999 : Real
10.2. Queries based on UML Model B
?Town.allInstances->collect(t|t.connectPlus()->size())->asSet()
Expected Result:Set{0,2,3,13,23} : Set(Integer)
. . . . . . . . . . . . . . . . . . . . . . . .
?Set{1..1024*1024}->iterate(i;res:Bag(Set(Town))=Town.allInstances->collect(t|t.connectPlus())|res)
Expected Result:Bag{Set{},Set{Town21,Town25}, ...
Set{Town1,Town11,Town13,Town14,Town16,Town18,Town19,Town2,Town22,Town23,Town26,Town28,Town29,Town3,Town33,Town36,Town38,Town39,Town4,Town40,Town41,Town5,Town9}} :
Bag(Set(Town))
. . . . . . . . . . . . . . . . . . . . . . . .
?Town.allInstances->select(t|t.connectPlus()->size()=0)
Expected Result:Set{Town20} : Set(Town)
. . . . . . . . . . . . . . . . . . . . . . . .
?Town.allInstances->select(t|t.connectPlus()->size()=2)
Expected Result:Set{Town21,Town25} : Set(Town)
. . . . . . . . . . . . . . . . . . . . . . . .
?Town.allInstances->select(t|t.connectPlus()->size()=3)
Expected Result:Set{Town10,Town15,Town30} : Set(Town)
. . . . . . . . . . . . . . . . . . . . . . . .
241
![Page 242: Sources for a Benchmark for OCL Engine Accuracy ... · Sources for a Benchmark for OCL Engine Accuracy, Determinateness, and E ciency Martin Gogolla, Mirco Kuhlmann, Fabian Buttner](https://reader034.vdocuments.us/reader034/viewer/2022050600/5fa79dc930a79e110f290695/html5/thumbnails/242.jpg)
?Town.allInstances->select(t|t.connectPlus()->size()=13)
Expected Result:Set{Town12,Town17,Town24,Town27,Town31,Town32,Town34,Town35,
Town37,Town42,Town6,Town7,Town8} : Set(Town)
. . . . . . . . . . . . . . . . . . . . . . . .
?Town.allInstances->select(t|t.connectPlus()->size()=23)
Expected Result:Set{Town1,Town11,Town13,Town14,Town16,Town18,Town19,Town2,Town22,
Town23,Town26,Town28,Town29,Town3,Town33,Town36,Town38,Town39,Town4,Town40,Town41,Town5,Town9} : Set(Town)
. . . . . . . . . . . . . . . . . . . . . . . .
?Town.allInstances->collect(t|Seq{t,t.connect()->size()})->
sortedBy(s|s->last()->oclAsType(Integer))
Expected Result:Seq{Seq{Town20,0},Seq{Town10,1},Seq{Town12,1},Seq{Town21,1},
Seq{Town22,1},Seq{Town23,1},Seq{Town25,1},Seq{Town26,1},Seq{Town27,1},Seq{Town3 ,1},Seq{Town30,1},Seq{Town33,1},Seq{Town34,1},Seq{Town37,1},Seq{Town40,1},Seq{Town41,1},Seq{Town5 ,1},Seq{Town11,2},Seq{Town14,2},Seq{Town15,2},Seq{Town19,2},Seq{Town24,2},Seq{Town28,2},Seq{Town32,2},Seq{Town35,2},Seq{Town36,2},Seq{Town39,2},Seq{Town4 ,2},Seq{Town42,2},Seq{Town6 ,2},Seq{Town18,3},Seq{Town2 ,3},Seq{Town29,3},Seq{Town31,3},Seq{Town38,3},Seq{Town7 ,3},Seq{Town8 ,3},Seq{Town1 ,4},Seq{Town13,4},Seq{Town16,4},Seq{Town9 ,4},Seq{Town17,5}} : Seq(Seq(OclAny))
242