BUG DESCRIPTION:
----------------
&& and || operators are expected to always return a single boolean, even when operands have multiple components.
But it is not always the case. Extensive tests reported here-below show that
1) when the LHS operand is false or zeros, || works elementwise instead of scalarwise.
2) when the LHS operand is true or non-zeros, && works elementwise instead of scalarwise.
---------------
m = grand(2,3,"uin",0,9)
z = zeros(2,3)
--> m = grand(2,3,"uin",0,9)
m =
4. 9. 8.
1. 5. 3.
--> z = zeros(2,3)
z =
0. 0. 0.
0. 0. 0.
1) when the LHS operand is false or zeros, || works elementwise instead of scalarwise
-----------------------------------------------------------------------------------
m || %f // scalar returned: OK
m || %t // scalar returned: OK
%f || m // matrix returned: NOK!
%t || m // scalar returned: OK
z || %f // matrix returned: NOK
z || %t // matrix returned: NOK
%f || z // matrix returned: NOK
%t || z // scalar returned: OK
--> m || %f // scalar returned: OK
ans =
T
--> m || %t // scalar returned: OK
ans =
T
--> %f || m // matrix returned: NOK!
ans =
T T T
T T T
--> %t || m // scalar returned: OK
ans =
T
--> z || %f // matrix returned: NOK
ans =
F F F
F F F
--> z || %t // matrix returned: NOK
ans =
T T T
T T T
--> %f || z // matrix returned: NOK
ans =
F F F
F F F
--> %t || z // matrix returned: NOK
ans =
T
2) when the LHS operand is true or non-zeros, && works elementwise instead of scalarwise
-------------------------------------------------------------------------------------
m && %f // matrix returned: NOK!
m && %t // matrix returned: NOK!
%f && m // scalar returned: OK
%t && m // matrix returned: NOK!
z && %f // scalar returned: OK
z && %t // scalar returned: OK
%f && z // scalar returned: OK
%t && z // matrix returned: NOK!
--> m && %f
ans =
F F F
F F F
--> m && %t
ans =
T T T
T T T
--> %f && m
ans =
F
--> %t && m
ans =
T T T
T T T
--> z && %f
ans =
F
--> z && %t
ans =
F
--> %f && z
ans =
F
--> %t && z
ans =
F F F
F F F
ERROR LOG:
----------
HOW TO REPRODUCE THE BUG:
-------------------------
m = [
4. 9. 8.
1. 5. 3.
];
z = zeros(2,3);
// Working cases:
size(m || %f, "*")==1
size(m || %t, "*")==1
size(%t || m, "*")==1
size(%t || z, "*")==1
// Failing cases:
size(%f || m, "*")==1
size(z || %f, "*")==1
size(z || %t, "*")==1
size(%f || z, "*")==1
// Working cases:
size(%f && m, "*")==1
size(z && %f, "*")==1
size(z && %t, "*")==1
size(%f && z, "*")==1
// Failing cases:
size(m && %f, "*")==1
size(m && %t, "*")==1
size(%t && m, "*")==1
size(%t && z, "*")==1
OTHER INFORMATION:
------------------
--> [v,o]=getversion()
o =
!VC++ x64 tk modelicac release Aug 24 2016 03:41:32 !
v =
scilab-master-1471860723