haskellOCL issues
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues
2019-11-30T14:02:53-03:00
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/56
Hacer mas de una validacion en el plugin de eclipse.
2019-11-30T14:02:53-03:00
Jose Sebastian Sanchez Costa
Hacer mas de una validacion en el plugin de eclipse.
Cuando se valida un modelo .xmi:
click derecho sobrel xmi -> HaskellOCL
Este se valida correctamente
Si se intenta validar el mismo o otro valida incorrectamente dando error.
Si se reinicia la instancia de Eclipse y se vuelve a valid...
Cuando se valida un modelo .xmi:
click derecho sobrel xmi -> HaskellOCL
Este se valida correctamente
Si se intenta validar el mismo o otro valida incorrectamente dando error.
Si se reinicia la instancia de Eclipse y se vuelve a validar funciona bien. Pero solo una vez como el caso anterior nombrado en esta issue.
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/55
oclIsTypeOf probadorTipos
2019-11-28T21:54:06-03:00
Jose Sebastian Sanchez Costa
oclIsTypeOf probadorTipos
```
<details key="invariantypeof1" value="self.oclIsTypeOf(Employee)"/>
<details key="invariantypeof2" value="self.oclIsTypeOf(Person)"/>
```
genera
```haskell
invariant2 = context _Employee [invariantypeof1]
invariantypeof...
```
<details key="invariantypeof1" value="self.oclIsTypeOf(Employee)"/>
<details key="invariantypeof2" value="self.oclIsTypeOf(Person)"/>
```
genera
```haskell
invariant2 = context _Employee [invariantypeof1]
invariantypeof1 self = (ocl self |.| (oclIsTypeOf (_Employee)))
invariant3 = context _Employee [invariantypeof2]
invariantypeof2 self = (ocl self |.| (oclIsTypeOf (_Person)))
```
en este modelo
```
haskell
example = Model [
(ModelElement 0 (RootCh (Root [1, 2] [] [3] [4] )))
, (ModelElement 1 (PersonCh (Person 1 Nothing)))
, (ModelElement 2 (PersonCh (Person 2 (Just (EmployeeCh (Employee 2 ))))))
, (ModelElement 3 (CatCh (Cat )))
, (ModelElement 4 (CollectionPeopleCh (CollectionPeople [2, 1] )))
]
```
evalua false
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/54
includes probadorCollection 2
2019-12-01T23:10:13-03:00
Jose Sebastian Sanchez Costa
includes probadorCollection 2
```
<details key="invariantincludes1" value="self.a->includes(self.asingle)"/>
259 invariant3 = context _B [invariantincludes1]
260 invariantincludes1 self = (ocl self |.| a |->| (includes (ocl self |.| asingle)))
ACCELEO.hs:260...
```
<details key="invariantincludes1" value="self.a->includes(self.asingle)"/>
259 invariant3 = context _B [invariantincludes1]
260 invariantincludes1 self = (ocl self |.| a |->| (includes (ocl self |.| asingle)))
ACCELEO.hs:260:59: error:
• Couldn't match type ‘ReaderT
Model Data.Functor.Identity.Identity (Val A_)’
with ‘Val A_’
Expected type: Val A_
Actual type: OCL Model (Val A_)
• In the first argument of ‘includes’, namely
‘(ocl self |.| asingle)’
In the second argument of ‘(|->|)’, namely
‘(includes (ocl self |.| asingle))’
In the expression:
(ocl self |.| a |->| (includes (ocl self |.| asingle)))
<details key="invariantincludes1a" value="Bag{1, 2, 3}->includes(2)"/>
<details key="invariantincludes2a" value="Bag{1, 2, 3}->includes(5)"/>
<details key="invariantincludes3a" value="Bag{1, 2, 3}->includes(3)"/>
<details key="invariantincludes4a" value="Bag{1, 2, 3}->includes(1)"/>
635 invariant128 = context _C [invariantincludes1a]
636 invariantincludes1a self = (oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 2)))
637
638 invariant129 = context _C [invariantincludes2a]
639 invariantincludes2a self = (oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 5)))
640
641 invariant130 = context _C [invariantincludes3a]
642 invariantincludes3a self = (oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 3)))
643
644 invariant131 = context _C [invariantincludes4a]
645 invariantincludes4a self = (oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 1)))
ACCELEO.hs:636:81: error:
• Couldn't match type ‘ReaderT
m3 Data.Functor.Identity.Identity (Val Int)’
with ‘Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer’
Expected type: Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer
Actual type: OCL m3 (Val Int)
• In the first argument of ‘includes’, namely ‘(oclInt 2)’
In the second argument of ‘(|->|)’, namely ‘(includes (oclInt 2))’
In the expression:
(oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 2)))
ACCELEO.hs:639:81: error:
• Couldn't match type ‘ReaderT
m2 Data.Functor.Identity.Identity (Val Int)’
with ‘Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer’
Expected type: Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer
Actual type: OCL m2 (Val Int)
• In the first argument of ‘includes’, namely ‘(oclInt 5)’
In the second argument of ‘(|->|)’, namely ‘(includes (oclInt 5))’
In the expression:
(oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 5)))
ACCELEO.hs:642:81: error:
• Couldn't match type ‘ReaderT
m1 Data.Functor.Identity.Identity (Val Int)’
with ‘Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer’
Expected type: Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer
Actual type: OCL m1 (Val Int)
• In the first argument of ‘includes’, namely ‘(oclInt 3)’
In the second argument of ‘(|->|)’, namely ‘(includes (oclInt 3))’
In the expression:
(oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 3)))
ACCELEO.hs:645:81: error:
• Couldn't match type ‘ReaderT
m0 Data.Functor.Identity.Identity (Val Int)’
with ‘Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer’
Expected type: Val integer-gmp-1.0.0.1:GHC.Integer.Type.Integer
Actual type: OCL m0 (Val Int)
• In the first argument of ‘includes’, namely ‘(oclInt 1)’
In the second argument of ‘(|->|)’, namely ‘(includes (oclInt 1))’
In the expression:
(oclVal (Bag [Val 1, Val 2, Val 3]) |->| (includes (oclInt 1)))
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/52
comparar collections probadorCollection
2019-12-07T12:56:02-03:00
Jose Sebastian Sanchez Costa
comparar collections probadorCollection
```
Deberian dar todas OK
Context C
invariantSelect1a : Bag{1, 2, 3}->select(i : Integer | i > 1 )=Bag{3, 2}
FAIL
Context C
invariantSelect1b : Bag{1, 2, 3}->select(i : Integer | i > 1 )=Bag{2, 3}
OK
Context C
invariantSelect3a : Set...
```
Deberian dar todas OK
Context C
invariantSelect1a : Bag{1, 2, 3}->select(i : Integer | i > 1 )=Bag{3, 2}
FAIL
Context C
invariantSelect1b : Bag{1, 2, 3}->select(i : Integer | i > 1 )=Bag{2, 3}
OK
Context C
invariantSelect3a : Set{1, 2, 3}->select(i : Integer | i > 1 )=Set{3, 2}
FAIL
Context C
invariantSelect3b : Set{1, 2, 3}->select(i : Integer | i > 1 )=Set{2, 3}
OK
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/51
union probadorCollection
2019-12-04T00:49:47-03:00
Jose Sebastian Sanchez Costa
union probadorCollection
```
Todos los siguientes casos deberian dar OK
Context C
invariantUnion0 : Sequence{'a', 'b', 'a'}->union(Sequence{'b', 'c'})=Sequence{'a', 'b', 'a', 'b', 'c'}
FAIL
Context C
invariantUnion0a : Bag{'a', 'b', 'a'}->union(Bag{'b', 'c'})=B...
```
Todos los siguientes casos deberian dar OK
Context C
invariantUnion0 : Sequence{'a', 'b', 'a'}->union(Sequence{'b', 'c'})=Sequence{'a', 'b', 'a', 'b', 'c'}
FAIL
Context C
invariantUnion0a : Bag{'a', 'b', 'a'}->union(Bag{'b', 'c'})=Bag{'a', 'b', 'a', 'b', 'c'}
OK
Context C
invariantUnion0b : Bag{'a', 'b', 'a'}->union(Set{'b', 'c'})=Bag{'b', 'c', 'a', 'b', 'a'}
OK
Context C
invariantUnion0c : OrderedSet{'a', 'b', 'a'}->union(Bag{'b', 'c'})=Bag{'a', 'c', 'b', 'b'}
FAIL
Context C
invariantUnion0d : OrderedSet{'a', 'b', 'a'}->union(Set{'b', 'c'})=Set{'a', 'c', 'b'}
FAIL
Context C
invariantUnion0e : Set{'a', 'b', 'a'}->union(Bag{'b', 'c'})=Bag{'a', 'c', 'b', 'b'}
FAIL
Context C
invariantUnion0f : Set{'a', 'b', 'a'}->union(Set{'b', 'c'})=Set{'a', 'c', 'b'}
FAIL
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/50
symmetricDifferece probadorCollection
2019-12-03T23:25:10-03:00
Jose Sebastian Sanchez Costa
symmetricDifferece probadorCollection
idem #48
```
symmetricDifference idem invariantsubOrderedSet0 invariantSubOrderedSet01a
Context C
invariantSymmetricDifference0a : OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})=Set{'d', 'b'}
FAIL
Context C...
idem #48
```
symmetricDifference idem invariantsubOrderedSet0 invariantSubOrderedSet01a
Context C
invariantSymmetricDifference0a : OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})=Set{'d', 'b'}
FAIL
Context C
invariantSymmetricDifference0b : OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})->size()=0
OK
sin embargo
Context C
invariantSymmetricDifference1a : Set{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})=Set{'d', 'b'}
OK
funciona como se espera
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/49
subsequence probadorCollection
2019-12-03T21:16:55-03:00
Jose Sebastian Sanchez Costa
subsequence probadorCollection
```
Subsequence idem invariantsubOrderedSet0 invariantSubOrderedSet01a
Context C
invariantSubsequence0a : Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3)=Sequence{'b', 'c'}
FAIL
Context C
invariantSubsequence0b : Sequence{'a', 'b', ...
```
Subsequence idem invariantsubOrderedSet0 invariantSubOrderedSet01a
Context C
invariantSubsequence0a : Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3)=Sequence{'b', 'c'}
FAIL
Context C
invariantSubsequence0b : Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3)->size()=0
OK
```
#48 idem
relacionada #9
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/48
subOrderedSet probadorCollection
2019-12-03T20:57:40-03:00
Jose Sebastian Sanchez Costa
subOrderedSet probadorCollection
```
Context C
invariantSubOrderedSet0 : OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3)=OrderedSet{'b', 'c'}
FAIL Esto debería dar OK
Context C
invariantSubOrderedSet01a : OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3)->size()...
```
Context C
invariantSubOrderedSet0 : OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3)=OrderedSet{'b', 'c'}
FAIL Esto debería dar OK
Context C
invariantSubOrderedSet01a : OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3)->size()=0
OK esto deberia dar FAIL
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/46
asSet intersection probadorCollection
2019-12-03T23:23:34-03:00
Jose Sebastian Sanchez Costa
asSet intersection probadorCollection
```
Context C
invariantCIntersection1 : self.ddec.a->intersection(self.a)->asSet() = self.ddec.a->asSet()
FAIL
Context C
invariantCIntersection2 : self.ddec.a->intersection(self.a)->size()=0
OK
<details key="invariantCIntersecti...
```
Context C
invariantCIntersection1 : self.ddec.a->intersection(self.a)->asSet() = self.ddec.a->asSet()
FAIL
Context C
invariantCIntersection2 : self.ddec.a->intersection(self.a)->size()=0
OK
<details key="invariantCIntersection1" value="self.ddec.a->intersection(self.a)->asSet() = self.ddec.a->asSet()"/>
<details key="invariantCIntersection2" value="self.ddec.a->intersection(self.a)->size()=0"/>
Genera
invariant46 = context _C [invariantCIntersection1]
invariantCIntersection1 self = (((ocl self |.| ddec |.| a''' |->| (intersection (ocl self |.| a'))) |->| asSet)) ||==|| ((ocl self |.| ddec |.| a''' |->| asSet))
invariant47 = context _C [invariantCIntersection2]
invariantCIntersection2 self = (((ocl self |.| ddec |.| a''' |->| (intersection (ocl self |.| a'))) |->| size)) |==| (oclInt 0)
Esta retornando una colección vacía
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/37
operacion "-" unaria real y integer probadorHaskellOCL
2019-12-01T21:35:36-03:00
Jose Sebastian Sanchez Costa
operacion "-" unaria real y integer probadorHaskellOCL
contexto Real1 y Integer1
en el real
```
<details key="invariantD7resta1" value="2.0-3.0 = -1.0"/>
```
genera esto
```
invariant4 = context _Real1 [invariantD7resta1]
invariantD7resta1 self = ((oclDouble 2.0) |-| (oclDouble 3.0)) |=...
contexto Real1 y Integer1
en el real
```
<details key="invariantD7resta1" value="2.0-3.0 = -1.0"/>
```
genera esto
```
invariant4 = context _Real1 [invariantD7resta1]
invariantD7resta1 self = ((oclDouble 2.0) |-| (oclDouble 3.0)) |==| ((- (oclDouble 1.0)))
```
da error
tipo de error
```
ACCELEO.hs:241:30: error:
• No instance for (GHC.Num.Num (OCL Model (Val Double)))
arising from a use of ‘invariantD7resta1’
• In the expression: invariantD7resta1
In the second argument of ‘context’, namely ‘[invariantD7resta1]’
In the expression: context _Real1 [invariantD7resta1]
```
tiene que generar
```
invariant4 = context _Real1 [invariantD7resta1]
invariantD7resta1 self = ((oclDouble 2.0) |-| (oclDouble 3.0)) |==| ( (oclDouble (-1.0)))
```
en el Integer
```
<details key="invariantD7resta1" value="2-3 = -1"/>
```
genera
```
invariant14 = context _Integer1 [invariantD7resta1']
invariantD7resta1' self = ((oclInt 2) |-| (oclInt 3)) |==| ((- (oclInt 1)))
```
da el error
```
ACCELEO.hs:272:34: error:
• No instance for (GHC.Num.Num (OCL Model (Val Int)))
arising from a use of ‘invariantD7resta1'’
• In the expression: invariantD7resta1'
In the second argument of ‘context’, namely ‘[invariantD7resta1']’
In the expression: context _Integer1 [invariantD7resta1']
```
tiene que generar
```
invariant14 = context _Integer1 [invariantD7resta1']
invariantD7resta1' self = ((oclInt 2) |-| (oclInt 3)) |==| ( (oclInt (-1)))
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/36
abs probadorHaskellOCL
2019-12-01T21:35:36-03:00
Jose Sebastian Sanchez Costa
abs probadorHaskellOCL
Funciones aritmeticas D.7
Contexto Ineteger1
```
<details key="invariantD7abs1" value="abs(-1) = 1"/>
<details key="invariantD7abs2" value="abs(1) = 1"/>
<details key="invariantD7abs3" value="abs(0-5) = 5"/>
...
Funciones aritmeticas D.7
Contexto Ineteger1
```
<details key="invariantD7abs1" value="abs(-1) = 1"/>
<details key="invariantD7abs2" value="abs(1) = 1"/>
<details key="invariantD7abs3" value="abs(0-5) = 5"/>
<details key="invariantD7abs4" value="abs(2-3) = 1"/>
<details key="invariantD7abs5" value="abs(2+3) = 5"/>
<details key="invariantD7abs1f" value="abs(-1) = -1"/>
<details key="invariantD7abs2f" value="abs(1) = -1"/>
<details key="invariantD7abs3f" value="abs(0-5) = -5"/>
<details key="invariantD7abs4f" value="abs(2-3) = -1"/>
<details key="invariantD7abs5f" value="abs(2+3) = -5"/>
```
no genera nada
Esto otro
```
<details key="invariantD7abs1" value="(-1).abs = 1"/>
<details key="invariantD7abs2" value="(1).abs = 1"/>
```
no genera danda
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/35
boolean implies probadorHaskellOCL
2019-11-28T20:52:53-03:00
Jose Sebastian Sanchez Costa
boolean implies probadorHaskellOCL
```
<details key="invariantToString" value="((1=1) implies (1=1)).toString"/>
```
No genera nada
```
<!--
<details key="invariantIMPLIES1" value="false.implies(false)"/>
<details key="invariantIMPLIES2" value="false...
```
<details key="invariantToString" value="((1=1) implies (1=1)).toString"/>
```
No genera nada
```
<!--
<details key="invariantIMPLIES1" value="false.implies(false)"/>
<details key="invariantIMPLIES2" value="false.implies(true)"/>
<details key="invariantIMPLIES3" value="true.implies(false)"/>
<details key="invariantIMPLIES4" value="true.implies(true)"/>
-->
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/34
max Integer y Double probadorHaskellOCL
2019-11-28T20:51:53-03:00
Jose Sebastian Sanchez Costa
max Integer y Double probadorHaskellOCL
```
no cumple con la firma de la documentacion
self.entero.max(10.1)=10.1
genera
invariant1 = context _Integer1 [invariantInteger1]
invariantInteger1 self = ((ocl self |.| entero' |.| (maxOCL (oclDouble 10.1)))) |==| (oclDouble 10.1)
AC...
```
no cumple con la firma de la documentacion
self.entero.max(10.1)=10.1
genera
invariant1 = context _Integer1 [invariantInteger1]
invariantInteger1 self = ((ocl self |.| entero' |.| (maxOCL (oclDouble 10.1)))) |==| (oclDouble 10.1)
ACCELEO.hs:200:62: error:
• Couldn't match type ‘Double’ with ‘Int’
Expected type: OCL Model (Val Int)
Actual type: OCL Model (Val Double)
• In the first argument of ‘maxOCL’, namely ‘(oclDouble 10.1)’
In the second argument of ‘(|.|)’, namely
‘(maxOCL (oclDouble 10.1))’
In the first argument of ‘(|==|)’, namely
‘((ocl self |.| entero' |.| (maxOCL (oclDouble 10.1))))’
ACCELEO.hs:200:87: error:
• Couldn't match type ‘Double’ with ‘Int’
Expected type: OCL Model (Val Int)
Actual type: OCL Model (Val Double)
• In the second argument of ‘(|==|)’, namely ‘(oclDouble 10.1)’
In the expression:
((ocl self |.| entero' |.| (maxOCL (oclDouble 10.1))))
|==| (oclDouble 10.1)
In an equation for ‘invariantInteger1’:
invariantInteger1 self
= ((ocl self |.| entero' |.| (maxOCL (oclDouble 10.1))))
|==| (oclDouble 10.1)
Parece que hay error de copy paste en la documentacion apendice D.2 OCL
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/33
integer.toString
2019-11-28T20:51:11-03:00
Jose Sebastian Sanchez Costa
integer.toString
Modelo
```
Integer1:
Double: 5.72
Entero: 5
```
```
Falla
self.entero.toString()="5"
no genera nada
```
Modelo
```
Integer1:
Double: 5.72
Entero: 5
```
```
Falla
self.entero.toString()="5"
no genera nada
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/31
real.min real.toString real.floor porbadorHaskellOCL
2019-12-01T19:54:31-03:00
Jose Sebastian Sanchez Costa
real.min real.toString real.floor porbadorHaskellOCL
```
Metamodelo con el unico objeto Real1
Real1:
Double: 2.3
Entero: 2
```
simil a #30
```
self.double.min(2.0)=2.0
self.double.toString()="2.3"
self.double.floor()=2
```
No generan código
```
Metamodelo con el unico objeto Real1
Real1:
Double: 2.3
Entero: 2
```
simil a #30
```
self.double.min(2.0)=2.0
self.double.toString()="2.3"
self.double.floor()=2
```
No generan código
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/30
max real probadorHaskellOCL
2019-11-28T20:47:18-03:00
Jose Sebastian Sanchez Costa
max real probadorHaskellOCL
```
Real:
double: 2.3
No generan nada
Real:
Double: 2.3
Entero: 2
self.double.max(2.0)=2.3
deberia generar
invariant0 = context _Real1 [invariantReal0]
invariantReal1 self = ((ocl self |.| double |.| (maxOCL' (oclDouble 2.0)))) |...
```
Real:
double: 2.3
No generan nada
Real:
Double: 2.3
Entero: 2
self.double.max(2.0)=2.3
deberia generar
invariant0 = context _Real1 [invariantReal0]
invariantReal1 self = ((ocl self |.| double |.| (maxOCL' (oclDouble 2.0)))) |==| (oclDouble 2.3)
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/29
Real.round probadorHaskellOCL
2019-11-28T20:45:50-03:00
Jose Sebastian Sanchez Costa
Real.round probadorHaskellOCL
Contexto Real
```
self.double.round()=self.entero
```
No genera codigo
```
2.3.round()=2
```
genera
```
invariant0 = context _Real1 [invariantReal1]
invariantReal1 self = ((oclDouble 2.3 |.| roundOCL)) |==| (oclInt 2)
```
error en el t...
Contexto Real
```
self.double.round()=self.entero
```
No genera codigo
```
2.3.round()=2
```
genera
```
invariant0 = context _Real1 [invariantReal1]
invariantReal1 self = ((oclDouble 2.3 |.| roundOCL)) |==| (oclInt 2)
```
error en el tipo
```
• Couldn't match type ‘Val Double’
with ‘ReaderT m Data.Functor.Identity.Identity (Val Double)’
Expected type: Val Double -> OCL m (Val Int)
Actual type: OCL m (Val Double) -> OCL m (Val Int)
• In the second argument of ‘(|.|)’, namely ‘roundOCL’
In the first argument of ‘(|==|)’, namely
‘((oclDouble 2.3 |.| roundOCL))’
In the expression: ((oclDouble 2.3 |.| roundOCL)) |==| (oclInt 2)
• Relevant bindings include
invariantReal1 :: t -> OCL m (Val Bool) (bound at ACCELEO.hs:196:1)
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/28
Multiplicidad collections TeamMeeting
2019-11-28T20:41:14-03:00
Jose Sebastian Sanchez Costa
Multiplicidad collections TeamMeeting
```
Por default da error
invariant2 = context _Teammeeting [inv3]
inv3 self = (ocl self |.| participants |->| forAll(\temp1 -> (ocl temp1 |.| team) ||==|| (ocl self |.| for)))
ACCELEO.hs:312:89: error:
• Couldn't match type ‘(...
```
Por default da error
invariant2 = context _Teammeeting [inv3]
inv3 self = (ocl self |.| participants |->| forAll(\temp1 -> (ocl temp1 |.| team) ||==|| (ocl self |.| for)))
ACCELEO.hs:312:89: error:
• Couldn't match type ‘(Team, ModelElement_)’
with ‘Collection Team_’
Expected type: OCL Model (Val (Collection Team_))
Actual type: OCL Model (Val Team_)
• In the second argument of ‘(|==|)’, namely ‘(ocl self |.| for)’
In the expression: (ocl temp1 |.| team) |==| (ocl self |.| for)
In the first argument of ‘forAll’, namely
‘(\ temp1 -> (ocl temp1 |.| team) |==| (ocl self |.| for))’
cuando el modelo es
example = Model [
(ModelElement 0 (RootCh (Root [1, 2, 3, 4, 5, 6, 7] [8, 9, 10] [11, 12, 13] )))
, (ModelElement 1 (PersonCh (Person "John Smith" 53 "Chief" "Male" (Just (TeammemberCh (Teammember "Chief" [11] [8] [] ))))))
, (ModelElement 2 (PersonCh (Person "Zoe Zheng" 38 "Chief" "Female" (Just (TeammemberCh (Teammember "Chief" [12] [9] [9] ))))))
, (ModelElement 3 (PersonCh (Person "Lindsey Scott" 36 "Chief" "Female" (Just (TeammemberCh (Teammember "Chief" [13] [10] [10] ))))))
, (ModelElement 4 (PersonCh (Person "James Pattern" 32 "Salesman" "Male" (Just (TeammemberCh (Teammember "Salesman" [13] [10] [] ))))))
, (ModelElement 5 (PersonCh (Person "May Falkner" 27 "Staff" "Female" (Just (TeammemberCh (Teammember "Staff" [12] [9] [] ))))))
, (ModelElement 6 (PersonCh (Person "Rebecca Anderson" 23 "Developer" "Female" (Just (TeammemberCh (Teammember "Developer" [11] [8] [8] ))))))
, (ModelElement 7 (PersonCh (Person "Jake White" 26 "Developer" "Male" (Just (TeammemberCh (Teammember "Developer" [11] [8] [] ))))))
, (ModelElement 8 (MeetingCh (Meeting "Daily Meeting - IT Department" "05/05/2018" 10 11 True [7, 6, 1] 6 (Just (TeammeetingCh (Teammeeting 11 ))))))
, (ModelElement 9 (MeetingCh (Meeting "Daily Meeting - Marketing Department" "05/05/2018" 14 15 True [2, 5] 2 (Just (TeammeetingCh (Teammeeting 12 ))))))
, (ModelElement 10 (MeetingCh (Meeting "Daily Meeting - Sales Department" "05/05/2018" 8 9 True [4, 3] 3 (Just (TeammeetingCh (Teammeeting 13 ))))))
, (ModelElement 11 (TeamCh (Team "IT" [] [8] )))
, (ModelElement 12 (TeamCh (Team "Marketing" [] [9] )))
, (ModelElement 13 (TeamCh (Team "Sales" [] [10] )))
]
si cambio el modelo a
example = Model [
(ModelElement 0 (RootCh (Root [1, 2, 3, 4, 5, 6, 7] [8, 9, 10] [11, 12, 13] )))
, (ModelElement 1 (PersonCh (Person "John Smith" 53 "Chief" "Male" (Just (TeammemberCh (Teammember "Chief" [11] [8] [] ))))))
, (ModelElement 2 (PersonCh (Person "Zoe Zheng" 38 "Chief" "Female" (Just (TeammemberCh (Teammember "Chief" [12] [9] [9] ))))))
, (ModelElement 3 (PersonCh (Person "Lindsey Scott" 36 "Chief" "Female" (Just (TeammemberCh (Teammember "Chief" [13] [10] [10] ))))))
, (ModelElement 4 (PersonCh (Person "James Pattern" 32 "Salesman" "Male" (Just (TeammemberCh (Teammember "Salesman" [13] [10] [] ))))))
, (ModelElement 5 (PersonCh (Person "May Falkner" 27 "Staff" "Female" (Just (TeammemberCh (Teammember "Staff" [12] [9] [] ))))))
, (ModelElement 6 (PersonCh (Person "Rebecca Anderson" 23 "Developer" "Female" (Just (TeammemberCh (Teammember "Developer" [11] [8] [8] ))))))
, (ModelElement 7 (PersonCh (Person "Jake White" 26 "Developer" "Male" (Just (TeammemberCh (Teammember "Developer" [11] [8] [] ))))))
, (ModelElement 8 (MeetingCh (Meeting "Daily Meeting - IT Department" "05/05/2018" 10 11 True [7, 6, 1] 6 (Just (TeammeetingCh (Teammeeting [11] ))))))
, (ModelElement 9 (MeetingCh (Meeting "Daily Meeting - Marketing Department" "05/05/2018" 14 15 True [2, 5] 2 (Just (TeammeetingCh (Teammeeting [12] ))))))
, (ModelElement 10 (MeetingCh (Meeting "Daily Meeting - Sales Department" "05/05/2018" 8 9 True [4, 3] 3 (Just (TeammeetingCh (Teammeeting [13] ))))))
, (ModelElement 11 (TeamCh (Team "IT" [] [8] )))
, (ModelElement 12 (TeamCh (Team "Marketing" [] [9] )))
, (ModelElement 13 (TeamCh (Team "Sales" [] [10] )))
]
cambia
la multiplicidad de TeamMeeting.for de 1..1 a 0..*
y
la multiplicidad de TeamMember.team de 0..1 a 0..*
```
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/27
collect asSet RoyalandLoyal
2019-11-28T20:40:18-03:00
Jose Sebastian Sanchez Costa
collect asSet RoyalandLoyal
```
inv invariant_nrOfParticipants2 :
self.numberOfCustomers = self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.participants )->asSet()->size()
<details key="invariant_nrOfParticipants2" value="self.numberOf...
```
inv invariant_nrOfParticipants2 :
self.numberOfCustomers = self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.participants )->asSet()->size()
<details key="invariant_nrOfParticipants2" value="self.numberOfCustomers = self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.participants )->asSet()->size()"/>
```
No genera codigo para esta invariante
https://gitlab.fing.edu.uy/open-coal/haskellOCL/-/issues/26
collect select RoyalandLoyal
2019-11-28T20:38:54-03:00
Jose Sebastian Sanchez Costa
collect select RoyalandLoyal
```
inv invariant_ProgramPartner1 :
self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.partners )->select( p : ProgramPartner | p <> self )->isEmpty()
<details key="invariant_ProgramPartner1" value="self.pro...
```
inv invariant_ProgramPartner1 :
self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.partners )->select( p : ProgramPartner | p <> self )->isEmpty()
<details key="invariant_ProgramPartner1" value="self.programs->collect( i_LoyaltyProgram : LoyaltyProgram | i_LoyaltyProgram.partners )->select( p : ProgramPartner | p <> self )->size() = 0"/>
```
genera
```
576
577 invariant10 = context _ProgramPartner [invariant_ProgramPartner1]
578 invariant_ProgramPartner1 self = ((((ocl self |.| programs |->| collect(\i_LoyaltyProgram -> ocl i_LoyaltyProgram |.| partners)) |->| select(\p -> (ocl p) |<>| (ocl self))) |->| size)) |==| (oclInt 0)
579
580
```
```
ACCELEO.hs:577:40: error:
• Couldn't match type ‘(ProgramPartner, ModelElement_)’
with ‘Collection ProgramPartner_’
Expected type: Val ProgramPartner_ -> OCL Model (Val Bool)
Actual type: Val (Collection ProgramPartner_)
-> OCL Model (Val Bool)
• In the expression: invariant_ProgramPartner1
In the second argument of ‘context’, namely
‘[invariant_ProgramPartner1]’
In the expression:
context _ProgramPartner [invariant_ProgramPartner1]
```
Para este modelo
```
example = Model [
(ModelElement 0 (RootCh (Root [1] [2] [3] [4, 5] [6, 7] [8, 9] [10, 11] [12, 13] [14, 15] )))
, (ModelElement 1 (LoyaltyProgramCh (LoyaltyProgram "Programa1" [3] [6, 7] [10, 11] )))
, (ModelElement 2 (CustomerCh (Customer "Edward" "Mr." True 20 [6, 7] [4, 5] )))
, (ModelElement 3 (ProgramPartnerCh (ProgramPartner 1 "Partner1" [1] [8, 9] )))
, (ModelElement 4 (CustomerCardCh (CustomerCard True "Tarjeta1Cliente1" 2 6 [14] )))
, (ModelElement 5 (CustomerCardCh (CustomerCard True "Tarejeta2Cliete1" 2 7 [15] )))
, (ModelElement 6 (MembershipCh (Membership 11 4 [12] 1 2 )))
, (ModelElement 7 (MembershipCh (Membership 10 5 [13] 1 2 )))
, (ModelElement 8 (ServiceCh (Service True 1000 1000 "Service1 cliente1" 9000 3 11 [15] )))
, (ModelElement 9 (ServiceCh (Service True 0 0 "servicio2Cliente1" 0 3 10 [14] )))
, (ModelElement 10 (ServiceLevelCh (ServiceLevel "Silver" 1 [7] [9] )))
, (ModelElement 11 (ServiceLevelCh (ServiceLevel "Gold" 1 [6] [8] )))
, (ModelElement 12 (LoyaltyAccountCh (LoyaltyAccount 0 2 [14] 6 )))
, (ModelElement 13 (LoyaltyAccountCh (LoyaltyAccount 1000 1 [15] 7 )))
, (ModelElement 14 (TransactionCh (Transaction 1000 1000.0 4 12 9 (Just (EarningCh (Earning ))))))
, (ModelElement 15 (TransactionCh (Transaction 2000 0.0 5 13 8 (Just (EarningCh (Earning ))))))
]
```