* Bug 16592 fixed: | and & between complex and boolean or [] 24/21624/5
Samuel GOUGEON [Fri, 13 Nov 2020 00:53:21 +0000 (01:53 +0100)]
  http://bugzilla.scilab.org/16592

Change-Id: I6e40de20fcaa68e293c3a36837bca1fa85eaf81b

scilab/CHANGES.md
scilab/modules/ast/tests/unit_tests/and.dia.ref [deleted file]
scilab/modules/ast/tests/unit_tests/and.tst
scilab/modules/ast/tests/unit_tests/or.dia.ref [deleted file]
scilab/modules/ast/tests/unit_tests/or.tst
scilab/modules/overloading/macros/%b_g_s.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_h_s.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%s_g_s.sci
scilab/modules/overloading/macros/%s_h_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%s_h_s.sci

index 13058a9..0b9480d 100644 (file)
@@ -440,7 +440,8 @@ Bug Fixes
 * [#16571](https://bugzilla.scilab.org/16571): `mfile2sci` had several issues when converting the NOT ~ operator: 1) `~(1-1)` was converted into `~1-1` instead of `~(1-1)`  2) ~ applied to an integer expression yielded an error from `convert2double`  3) `~i` was converted into `~%i` instead of `~abs(%i)`.
 * [#16573](https://bugzilla.scilab.org/16573): `mfile2sci`: Some `axis` conversions were wrong or not reliable.
 * [#16586](https://bugzilla.scilab.org/16586): `mfile2sci`: The `prettyprintoutput` flag badly managed appended comments.
-* [#16596](https://bugzilla.scilab.org/16596): Concatenating encoded integers with sparse numeric data was not possible.
+* [#16592](https://bugzilla.scilab.org/16592): %i|[], []|%i, %i&[], and []&%i were wrong. %t|%i, %t&%i, and %i&%t were not defined.
+* [#16596](https://bugzilla.scilab.org/16596): Concatenating encoded integers with sparse numeric data was not possible. 
 * [#16608](https://bugzilla.scilab.org/16608): `union` did not support input boolean, sparse boolean, nor sparse numerical matrices. The result of `union(complexA, complexB)` was wrongly conjugate.
 * [#16609](https://bugzilla.scilab.org/16609): `bitcmp` needed to be upgraded for Scilab 6.
 * [#16612](https://bugzilla.scilab.org/16612): Unlike the `.*.` operator, `kron()` was not defined for sparse numeric matrices.
diff --git a/scilab/modules/ast/tests/unit_tests/and.dia.ref b/scilab/modules/ast/tests/unit_tests/and.dia.ref
deleted file mode 100644 (file)
index 9d89abd..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-// ============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
-//
-//  This file is distributed under the same license as the Scilab package.
-// ============================================================================
-//
-// <-- CLI SHELL MODE -->
-empty = [];
-r = 2;
-R = [1,2;3,4];
-R3(:,:,1) = R;
-R3(:,:,2) = R';
-c = 1 + 2*%i;
-C = [1+2*%i,2+4*%i;3+6*%i,4+8*%i];
-C3(:,:,1) = C;
-C3(:,:,2) = C';
-e = eye();
-ec = (5+%i) * eye();
-p = 1 + %s - %s**2;
-pc = 1 + %s - %s**2 + ( 2 - 3 * %s + 4 * %s**2 ) * %i;
-P = [2*p, -3*p;4*p,-5*p];
-PC = [2*pc, -3*pc;4*pc,-5*pc];
-SP = sparse([1,2;4,5;3,10],[1,2,3]);
-SPC = sparse([1,2;4,5;3,10],[1,2,3]) * ( 1 + 4*%i);
-SPB = sparse([1,2;2,1],[%t;%t],[2,2]);
-i8 = int8(-8);
-ui8 = uint8(8);
-I8 = int8([-8 -16 ; -24 -32]);
-UI8 = uint8([8 16 ; 24 32]);
-I16 = int16([-16 -32 ; -48 -64]);
-UI16 = uint16([16 32 ; 48 64]);
-i16 = int16(-16);
-ui16 = uint16(16);
-i32 = int32(-32);
-ui32 = uint32(32);
-I32 = int32([-32 -64 ; -96 -128]);
-UI32 = uint32([32 64 ; 96 128]);
-str = "string";
-STR = ["string1" "string2";"string3" "string4"];
-b = %f;
-B = [%t %f;%f %t];
-assert_checkequal(empty & empty, []);
-assert_checkequal(empty & r, []);
-assert_checkequal(empty & R, []);
-assert_checkequal(empty & e, []);
-assert_checkequal(empty & b, %f);
-assert_checkequal(empty & B, [%t,%f;%f,%t]);
-assert_checkequal(r & empty, []);
-assert_checkequal(r & r, %t);
-assert_checkequal(r & R, [%t,%t;%t,%t]);
-assert_checkequal(r & e, %t);
-assert_checkequal(r & b, %f);
-assert_checkequal(r & B, [%t,%f;%f,%t]);
-assert_checkequal(R & empty, []);
-assert_checkequal(R & r, [%t,%t;%t,%t]);
-assert_checkequal(R & R, [%t,%t;%t,%t]);
-assert_checkequal(R & e, [%t,%t;%t,%t]);
-assert_checkequal(R & b, [%f,%f;%f,%f]);
-assert_checkequal(R & B, [%t,%f;%f,%t]);
-assert_checkequal(e & empty, []);
-assert_checkequal(e & r, %t);
-assert_checkequal(e & R, [%t,%t;%t,%t]);
-assert_checkequal(e & b, %f);
-assert_checkequal(e & B, [%t,%f;%f,%t]);
-assert_checkequal(b & empty, %f);
-assert_checkequal(b & r, %f);
-assert_checkequal(b & R, [%f,%f;%f,%f]);
-assert_checkequal(b & e, %f);
-assert_checkequal(b & b, %f);
-assert_checkequal(b & B, [%f,%f;%f,%f]);
-assert_checkequal(b & SPB, sparse([1,1], [%f], [2, 2]));
-assert_checkequal(B & empty, [%t,%f;%f,%t]);
-assert_checkequal(B & r, [%t,%f;%f,%t]);
-assert_checkequal(B & R, [%t,%f;%f,%t]);
-assert_checkequal(B & e, [%t,%f;%f,%t]);
-assert_checkequal(B & b, [%f,%f;%f,%f]);
-assert_checkequal(B & B, [%t,%f;%f,%t]);
-assert_checkequal(B & SPB, sparse([1,1], [%f], [2, 2]));
-assert_checkequal(SPB & b, sparse([1,1], [%f], [2, 2]));
-assert_checkequal(SPB & B, sparse([1,1], [%f], [2, 2]));
-assert_checkequal(SPB & SPB, sparse([1,2;2,1],[%t;%t],[2,2]));
-assert_checkequal(i8 & i8, int8(-8));
-assert_checkequal(i8 & I8, int8([-8,-16;-24,-32]));
-assert_checkequal(i8 & ui8, uint8(8));
-assert_checkequal(i8 & UI8, uint8([8,16;24,32]));
-assert_checkequal(i8 & i16, int16(-16));
-assert_checkequal(i8 & I16, int16([-16,-32;-48,-64]));
-assert_checkequal(i8 & ui16, uint16(16));
-assert_checkequal(i8 & UI16, uint16([16,32;48,64]));
-assert_checkequal(i8 & i32, int32(-32));
-assert_checkequal(i8 & I32, int32([-32,-64;-96,-128]));
-assert_checkequal(i8 & ui32, uint32(32));
-assert_checkequal(i8 & UI32, uint32([32,64;96,128]));
-assert_checkequal(I8 & i8, int8([-8,-16;-24,-32]));
-assert_checkequal(I8 & I8, int8([-8,-16;-24,-32]));
-assert_checkequal(I8 & ui8, uint8([8,0;8,0]));
-assert_checkequal(I8 & UI8, uint8([8,16;8,32]));
-assert_checkequal(I8 & i16, int16([-16,-16;-32,-32]));
-assert_checkequal(I8 & I16, int16([-16,-32;-64,-64]));
-assert_checkequal(I8 & ui16, uint16([16,16;0,0]));
-assert_checkequal(I8 & UI16, uint16([16,32;32,64]));
-assert_checkequal(I8 & i32, int32([-32,-32;-32,-32]));
-assert_checkequal(I8 & I32, int32([-32,-64;-96,-128]));
-assert_checkequal(I8 & ui32, uint32([32,32;32,32]));
-assert_checkequal(I8 & UI32, uint32([32,64;96,128]));
-assert_checkequal(ui8 & i8, uint8(8));
-assert_checkequal(ui8 & I8, uint8([8,0;8,0]));
-assert_checkequal(ui8 & ui8, uint8(8));
-assert_checkequal(ui8 & UI8, uint8([8,0;8,0]));
-assert_checkequal(ui8 & i16, uint16(0));
-assert_checkequal(ui8 & I16, uint16([0,0;0,0]));
-assert_checkequal(ui8 & ui16, uint16(0));
-assert_checkequal(ui8 & UI16, uint16([0,0;0,0]));
-assert_checkequal(ui8 & i32, uint32(0));
-assert_checkequal(ui8 & I32, uint32([0,0;0,0]));
-assert_checkequal(ui8 & ui32, uint32(0));
-assert_checkequal(ui8 & UI32, uint32([0,0;0,0]));
-assert_checkequal(UI8 & i8, uint8([8,16;24,32]));
-assert_checkequal(UI8 & I8, uint8([8,16;8,32]));
-assert_checkequal(UI8 & ui8, uint8([8,0;8,0]));
-assert_checkequal(UI8 & UI8, uint8([8,16;24,32]));
-assert_checkequal(UI8 & i16, uint16([0,16;16,32]));
-assert_checkequal(UI8 & I16, uint16([0,0;16,0]));
-assert_checkequal(UI8 & ui16, uint16([0,16;16,0]));
-assert_checkequal(UI8 & UI16, uint16([0,0;16,0]));
-assert_checkequal(UI8 & i32, uint32([0,0;0,32]));
-assert_checkequal(UI8 & I32, uint32([0,0;0,0]));
-assert_checkequal(UI8 & ui32, uint32([0,0;0,32]));
-assert_checkequal(UI8 & UI32, uint32([0,0;0,0]));
-assert_checkequal(i16 & i8, int16(-16));
-assert_checkequal(i16 & I8, int16([-16,-16;-32,-32]));
-assert_checkequal(i16 & ui8, uint16(0));
-assert_checkequal(i16 & UI8, uint16([0,16;16,32]));
-assert_checkequal(i16 & i16, int16(-16));
-assert_checkequal(i16 & I16, int16([-16,-32;-48,-64]));
-assert_checkequal(i16 & ui16, uint16(16));
-assert_checkequal(i16 & UI16, uint16([16,32;48,64]));
-assert_checkequal(i16 & i32, int32(-32));
-assert_checkequal(i16 & I32, int32([-32,-64;-96,-128]));
-assert_checkequal(i16 & ui32, uint32(32));
-assert_checkequal(i16 & UI32, uint32([32,64;96,128]));
-assert_checkequal(I16 & i8, int16([-16,-32;-48,-64]));
-assert_checkequal(I16 & I8, int16([-16,-32;-64,-64]));
-assert_checkequal(I16 & ui8, uint16([0,0;0,0]));
-assert_checkequal(I16 & UI8, uint16([0,0;16,0]));
-assert_checkequal(I16 & i16, int16([-16,-32;-48,-64]));
-assert_checkequal(I16 & I16, int16([-16,-32;-48,-64]));
-assert_checkequal(I16 & ui16, uint16([16,0;16,0]));
-assert_checkequal(I16 & UI16, uint16([16,32;16,64]));
-assert_checkequal(I16 & i32, int32([-32,-32;-64,-64]));
-assert_checkequal(I16 & I32, int32([-32,-64;-128,-128]));
-assert_checkequal(I16 & ui32, uint32([32,32;0,0]));
-assert_checkequal(I16 & UI32, uint32([32,64;64,128]));
-assert_checkequal(ui16 & i8, uint16(16));
-assert_checkequal(ui16 & I8, uint16([16,16;0,0]));
-assert_checkequal(ui16 & ui8, uint16(0));
-assert_checkequal(ui16 & UI8, uint16([0,16;16,0]));
-assert_checkequal(ui16 & i16, uint16(16));
-assert_checkequal(ui16 & I16, uint16([16,0;16,0]));
-assert_checkequal(ui16 & ui16, uint16(16));
-assert_checkequal(ui16 & UI16, uint16([16,0;16,0]));
-assert_checkequal(ui16 & i32, uint32(0));
-assert_checkequal(ui16 & I32, uint32([0,0;0,0]));
-assert_checkequal(ui16 & ui32, uint32(0));
-assert_checkequal(ui16 & UI32, uint32([0,0;0,0]));
-assert_checkequal(UI16 & i8, uint16([16,32;48,64]));
-assert_checkequal(UI16 & I8, uint16([16,32;32,64]));
-assert_checkequal(UI16 & ui8, uint16([0,0;0,0]));
-assert_checkequal(UI16 & UI8, uint16([0,0;16,0]));
-assert_checkequal(UI16 & i16, uint16([16,32;48,64]));
-assert_checkequal(UI16 & I16, uint16([16,32;16,64]));
-assert_checkequal(UI16 & ui16, uint16([16,0;16,0]));
-assert_checkequal(UI16 & UI16, uint16([16,32;48,64]));
-assert_checkequal(UI16 & i32, uint32([0,32;32,64]));
-assert_checkequal(UI16 & I32, uint32([0,0;32,0]));
-assert_checkequal(UI16 & ui32, uint32([0,32;32,0]));
-assert_checkequal(UI16 & UI32, uint32([0,0;32,0]));
-assert_checkequal(i32 & i8, int32(-32));
-assert_checkequal(i32 & I8, int32([-32,-32;-32,-32]));
-assert_checkequal(i32 & ui8, uint32(0));
-assert_checkequal(i32 & UI8, uint32([0,0;0,32]));
-assert_checkequal(i32 & i16, int32(-32));
-assert_checkequal(i32 & I16, int32([-32,-32;-64,-64]));
-assert_checkequal(i32 & ui16, uint32(0));
-assert_checkequal(i32 & UI16, uint32([0,32;32,64]));
-assert_checkequal(i32 & i32, int32(-32));
-assert_checkequal(i32 & I32, int32([-32,-64;-96,-128]));
-assert_checkequal(i32 & ui32, uint32(32));
-assert_checkequal(i32 & UI32, uint32([32,64;96,128]));
-assert_checkequal(I32 & i8, int32([-32,-64;-96,-128]));
-assert_checkequal(I32 & I8, int32([-32,-64;-96,-128]));
-assert_checkequal(I32 & ui8, uint32([0,0;0,0]));
-assert_checkequal(I32 & UI8, uint32([0,0;0,0]));
-assert_checkequal(I32 & i16, int32([-32,-64;-96,-128]));
-assert_checkequal(I32 & I16, int32([-32,-64;-128,-128]));
-assert_checkequal(I32 & ui16, uint32([0,0;0,0]));
-assert_checkequal(I32 & UI16, uint32([0,0;32,0]));
-assert_checkequal(I32 & i32, int32([-32,-64;-96,-128]));
-assert_checkequal(I32 & I32, int32([-32,-64;-96,-128]));
-assert_checkequal(I32 & ui32, uint32([32,0;32,0]));
-assert_checkequal(I32 & UI32, uint32([32,64;32,128]));
-assert_checkequal(ui32 & i8, uint32(32));
-assert_checkequal(ui32 & I8, uint32([32,32;32,32]));
-assert_checkequal(ui32 & ui8, uint32(0));
-assert_checkequal(ui32 & UI8, uint32([0,0;0,32]));
-assert_checkequal(ui32 & i16, uint32(32));
-assert_checkequal(ui32 & I16, uint32([32,32;0,0]));
-assert_checkequal(ui32 & ui16, uint32(0));
-assert_checkequal(ui32 & UI16, uint32([0,32;32,0]));
-assert_checkequal(ui32 & i32, uint32(32));
-assert_checkequal(ui32 & I32, uint32([32,0;32,0]));
-assert_checkequal(ui32 & ui32, uint32(32));
-assert_checkequal(ui32 & UI32, uint32([32,0;32,0]));
-assert_checkequal(UI32 & i8, uint32([32,64;96,128]));
-assert_checkequal(UI32 & I8, uint32([32,64;96,128]));
-assert_checkequal(UI32 & ui8, uint32([0,0;0,0]));
-assert_checkequal(UI32 & UI8, uint32([0,0;0,0]));
-assert_checkequal(UI32 & i16, uint32([32,64;96,128]));
-assert_checkequal(UI32 & I16, uint32([32,64;64,128]));
-assert_checkequal(UI32 & ui16, uint32([0,0;0,0]));
-assert_checkequal(UI32 & UI16, uint32([0,0;32,0]));
-assert_checkequal(UI32 & i32, uint32([32,64;96,128]));
-assert_checkequal(UI32 & I32, uint32([32,64;32,128]));
-assert_checkequal(UI32 & ui32, uint32([32,0;32,0]));
-assert_checkequal(UI32 & UI32, uint32([32,64;96,128]));
index 3e6c624..2523443 100644 (file)
@@ -1,11 +1,18 @@
 // ============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
 //
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Short Description -->
+// Unitary tests of the & operator
+//
+// See also: or_and.tst
 
 empty = [];
 r = 2;
@@ -50,6 +57,8 @@ B = [%t %f;%f %t];
 assert_checkequal(empty & empty, []);
 assert_checkequal(empty & r, []);
 assert_checkequal(empty & R, []);
+assert_checkequal(empty & c, []);
+assert_checkequal(empty & C, []);
 assert_checkequal(empty & e, []);
 assert_checkequal(empty & b, %f);
 assert_checkequal(empty & B, [%t,%f;%f,%t]);
@@ -57,6 +66,8 @@ assert_checkequal(empty & B, [%t,%f;%f,%t]);
 assert_checkequal(r & empty, []);
 assert_checkequal(r & r, %t);
 assert_checkequal(r & R, [%t,%t;%t,%t]);
+assert_checkequal(r & c, %t);
+assert_checkequal(r & C, [%t,%t;%t,%t]);
 assert_checkequal(r & e, %t);
 assert_checkequal(r & b, %f);
 assert_checkequal(r & B, [%t,%f;%f,%t]);
@@ -64,19 +75,43 @@ assert_checkequal(r & B, [%t,%f;%f,%t]);
 assert_checkequal(R & empty, []);
 assert_checkequal(R & r, [%t,%t;%t,%t]);
 assert_checkequal(R & R, [%t,%t;%t,%t]);
+assert_checkequal(R & c, [%t,%t;%t,%t]);
+assert_checkequal(R & C, [%t,%t;%t,%t]);
 assert_checkequal(R & e, [%t,%t;%t,%t]);
 assert_checkequal(R & b, [%f,%f;%f,%f]);
 assert_checkequal(R & B, [%t,%f;%f,%t]);
 
+assert_checkequal(c & empty, []);
+assert_checkequal(c & r, %t);
+assert_checkequal(c & R, [%t,%t;%t,%t]);
+assert_checkequal(c & c, %t);
+assert_checkequal(c & C, [%t,%t;%t,%t]);
+assert_checkequal(c & e, %t);
+assert_checkequal(c & b, %f);
+assert_checkequal(c & B, [%t,%f;%f,%t]);
+
+assert_checkequal(C & empty, []);
+assert_checkequal(C & r, [%t,%t;%t,%t]);
+assert_checkequal(C & R, [%t,%t;%t,%t]);
+assert_checkequal(C & c, [%t,%t;%t,%t]);
+assert_checkequal(C & C, [%t,%t;%t,%t]);
+assert_checkequal(C & e, [%t,%t;%t,%t]);
+assert_checkequal(C & b, [%f,%f;%f,%f]);
+assert_checkequal(C & B, [%t,%f;%f,%t]);
+
 assert_checkequal(e & empty, []);
 assert_checkequal(e & r, %t);
 assert_checkequal(e & R, [%t,%t;%t,%t]);
+assert_checkequal(e & c, %t);
+assert_checkequal(e & C, [%t,%t;%t,%t]);
 assert_checkequal(e & b, %f);
 assert_checkequal(e & B, [%t,%f;%f,%t]);
 
 assert_checkequal(b & empty, %f);
 assert_checkequal(b & r, %f);
 assert_checkequal(b & R, [%f,%f;%f,%f]);
+assert_checkequal(b & c, %f);
+assert_checkequal(b & C, [%f,%f;%f,%f]);
 assert_checkequal(b & e, %f);
 assert_checkequal(b & b, %f);
 assert_checkequal(b & B, [%f,%f;%f,%f]);
@@ -85,6 +120,8 @@ assert_checkequal(b & SPB, sparse([1,1], [%f], [2, 2]));
 assert_checkequal(B & empty, [%t,%f;%f,%t]);
 assert_checkequal(B & r, [%t,%f;%f,%t]);
 assert_checkequal(B & R, [%t,%f;%f,%t]);
+assert_checkequal(B & c, [%t,%f;%f,%t]);
+assert_checkequal(B & C, [%t,%f;%f,%t]);
 assert_checkequal(B & e, [%t,%f;%f,%t]);
 assert_checkequal(B & b, [%f,%f;%f,%f]);
 assert_checkequal(B & B, [%t,%f;%f,%t]);
diff --git a/scilab/modules/ast/tests/unit_tests/or.dia.ref b/scilab/modules/ast/tests/unit_tests/or.dia.ref
deleted file mode 100644 (file)
index e9f89a7..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-// ============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
-//
-//  This file is distributed under the same license as the Scilab package.
-// ============================================================================
-//
-// <-- CLI SHELL MODE -->
-empty = [];
-r = 2;
-R = [1,2;3,4];
-R3(:,:,1) = R;
-R3(:,:,2) = R';
-c = 1 + 2*%i;
-C = [1+2*%i,2+4*%i;3+6*%i,4+8*%i];
-C3(:,:,1) = C;
-C3(:,:,2) = C';
-e = eye();
-ec = (5+%i) * eye();
-p = 1 + %s - %s**2;
-pc = 1 + %s - %s**2 + ( 2 - 3 * %s + 4 * %s**2 ) * %i;
-P = [2*p, -3*p;4*p,-5*p];
-PC = [2*pc, -3*pc;4*pc,-5*pc];
-SP = sparse([1,2;4,5;3,10],[1,2,3]);
-SPC = sparse([1,2;4,5;3,10],[1,2,3]) * ( 1 + 4*%i);
-SPB = sparse([1,2;2,1],[%t;%t],[2,2]);
-i8 = int8(-8);
-ui8 = uint8(8);
-I8 = int8([-8 -16 ; -24 -32]);
-UI8 = uint8([8 16 ; 24 32]);
-I16 = int16([-16 -32 ; -48 -64]);
-UI16 = uint16([16 32 ; 48 64]);
-i16 = int16(-16);
-ui16 = uint16(16);
-i32 = int32(-32);
-ui32 = uint32(32);
-I32 = int32([-32 -64 ; -96 -128]);
-UI32 = uint32([32 64 ; 96 128]);
-str = "string";
-STR = ["string1" "string2";"string3" "string4"];
-b = %f;
-B = [%t %f;%f %t];
-assert_checkequal(empty | empty, []);
-assert_checkequal(empty | r, []);
-assert_checkequal(empty | R, []);
-assert_checkequal(empty | e, []);
-assert_checkequal(empty | b, %t);
-assert_checkequal(empty | B, [%t %t;%t %t]);
-assert_checkequal(r | empty, []);
-assert_checkequal(r | r, %t);
-assert_checkequal(r | R, [%t,%t;%t,%t]);
-assert_checkequal(r | e, %t);
-assert_checkequal(r | b, %t);
-assert_checkequal(r | B, [%t,%t;%t,%t]);
-assert_checkequal(R | empty, []);
-assert_checkequal(R | r, [%t,%t;%t,%t]);
-assert_checkequal(R | R, [%t,%t;%t,%t]);
-assert_checkequal(R | e, [%t,%t;%t,%t]);
-assert_checkequal(R | b, [%t,%t;%t,%t]);
-assert_checkequal(R | B, [%t,%t;%t,%t]);
-assert_checkequal(e | empty, []);
-assert_checkequal(e | r, %t);
-assert_checkequal(e | R, [%t,%t;%t,%t]);
-assert_checkequal(e | b, %t);
-assert_checkequal(e | B, [%t,%t;%t,%t]);
-assert_checkequal(b | empty, %t);
-assert_checkequal(b | r, %t);
-assert_checkequal(b | R, [%t,%t;%t,%t]);
-assert_checkequal(b | e, %t);
-assert_checkequal(b | b, %f);
-assert_checkequal(b | B, [%t,%f;%f,%t]);
-assert_checkequal(b | SPB, sparse([1,2;2,1],[%t;%t],[2,2]));
-assert_checkequal(B | empty, [%t,%t;%t,%t]);
-assert_checkequal(B | r, [%t,%t;%t,%t]);
-assert_checkequal(B | R, [%t,%t;%t,%t]);
-assert_checkequal(B | e, [%t,%t;%t,%t]);
-assert_checkequal(B | b, [%t,%f;%f,%t]);
-assert_checkequal(B | B, [%t,%f;%f,%t]);
-assert_checkequal(B | SPB, sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,2]));
-assert_checkequal(SPB | b, sparse([1,2;2,1],[%t;%t],[2,2]));
-assert_checkequal(SPB | B, sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,2]));
-assert_checkequal(SPB | SPB, sparse([1,2;2,1],[%t;%t],[2,2]));
index 5e0d2cc..f3bb35f 100644 (file)
@@ -1,11 +1,13 @@
 // ============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
 //
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
 
 empty = [];
 r = 2;
@@ -51,6 +53,8 @@ B = [%t %f;%f %t];
 assert_checkequal(empty | empty, []);
 assert_checkequal(empty | r, []);
 assert_checkequal(empty | R, []);
+assert_checkequal(empty | c, []);
+assert_checkequal(empty | C, []);
 assert_checkequal(empty | e, []);
 assert_checkequal(empty | b, %t);
 assert_checkequal(empty | B, [%t %t;%t %t]);
@@ -58,6 +62,8 @@ assert_checkequal(empty | B, [%t %t;%t %t]);
 assert_checkequal(r | empty, []);
 assert_checkequal(r | r, %t);
 assert_checkequal(r | R, [%t,%t;%t,%t]);
+assert_checkequal(r | c, %t);
+assert_checkequal(r | C, [%t,%t;%t,%t]);
 assert_checkequal(r | e, %t);
 assert_checkequal(r | b, %t);
 assert_checkequal(r | B, [%t,%t;%t,%t]);
@@ -65,19 +71,43 @@ assert_checkequal(r | B, [%t,%t;%t,%t]);
 assert_checkequal(R | empty, []);
 assert_checkequal(R | r, [%t,%t;%t,%t]);
 assert_checkequal(R | R, [%t,%t;%t,%t]);
+assert_checkequal(R | c, [%t,%t;%t,%t]);
+assert_checkequal(R | C, [%t,%t;%t,%t]);
 assert_checkequal(R | e, [%t,%t;%t,%t]);
 assert_checkequal(R | b, [%t,%t;%t,%t]);
 assert_checkequal(R | B, [%t,%t;%t,%t]);
 
+assert_checkequal(c | empty, []);
+assert_checkequal(c | r, %t);
+assert_checkequal(c | R, [%t,%t;%t,%t]);
+assert_checkequal(c | c, %t);
+assert_checkequal(c | C, [%t,%t;%t,%t]);
+assert_checkequal(c | e, %t);
+assert_checkequal(c | b, %t);
+assert_checkequal(c | B, [%t,%t;%t,%t]);
+
+assert_checkequal(C | empty, []);
+assert_checkequal(C | r, [%t,%t;%t,%t]);
+assert_checkequal(C | R, [%t,%t;%t,%t]);
+assert_checkequal(C | c, [%t,%t;%t,%t]);
+assert_checkequal(C | C, [%t,%t;%t,%t]);
+assert_checkequal(C | e, [%t,%t;%t,%t]);
+assert_checkequal(C | b, [%t,%t;%t,%t]);
+assert_checkequal(C | B, [%t,%t;%t,%t]);
+
 assert_checkequal(e | empty, []);
 assert_checkequal(e | r, %t);
 assert_checkequal(e | R, [%t,%t;%t,%t]);
+assert_checkequal(e | c, %t);
+assert_checkequal(e | C, [%t,%t;%t,%t]);
 assert_checkequal(e | b, %t);
 assert_checkequal(e | B, [%t,%t;%t,%t]);
 
 assert_checkequal(b | empty, %t);
 assert_checkequal(b | r, %t);
 assert_checkequal(b | R, [%t,%t;%t,%t]);
+assert_checkequal(b | c, %t);
+assert_checkequal(b | C, [%t,%t;%t,%t]);
 assert_checkequal(b | e, %t);
 assert_checkequal(b | b, %f);
 assert_checkequal(b | B, [%t,%f;%f,%t]);
@@ -86,6 +116,8 @@ assert_checkequal(b | SPB, sparse([1,2;2,1],[%t;%t],[2,2]));
 assert_checkequal(B | empty, [%t,%t;%t,%t]);
 assert_checkequal(B | r, [%t,%t;%t,%t]);
 assert_checkequal(B | R, [%t,%t;%t,%t]);
+assert_checkequal(B | c, [%t,%t;%t,%t]);
+assert_checkequal(B | C, [%t,%t;%t,%t]);
 assert_checkequal(B | e, [%t,%t;%t,%t]);
 assert_checkequal(B | b, [%t,%f;%f,%t]);
 assert_checkequal(B | B, [%t,%f;%f,%t]);
diff --git a/scilab/modules/overloading/macros/%b_g_s.sci b/scilab/modules/overloading/macros/%b_g_s.sci
new file mode 100644 (file)
index 0000000..97491a1
--- /dev/null
@@ -0,0 +1,14 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function res = %b_g_s(b1, s2)
+    // bool | complex
+    res = b1 | (s2<>0);
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_h_s.sci b/scilab/modules/overloading/macros/%b_h_s.sci
new file mode 100644 (file)
index 0000000..4f7526a
--- /dev/null
@@ -0,0 +1,14 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function res = %b_h_s(b1, s2)
+    // boolean & complex
+    res = b1 & (s2<>0);
+endfunction
index 3b986b3..bde6995 100644 (file)
@@ -1,8 +1,8 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 // Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function res=%s_g_s(s1,s2)
+function res = %s_g_s(s1,s2)
     // Logical operand on complex numbers
-    res = (s1<>0) | (s2<>0);
+    if s1==[] | s2==[] then
+        res = []
+    else
+        res = (s1<>0) | (s2<>0);
+    end
 endfunction
diff --git a/scilab/modules/overloading/macros/%s_h_b.sci b/scilab/modules/overloading/macros/%s_h_b.sci
new file mode 100644 (file)
index 0000000..f46e9b2
--- /dev/null
@@ -0,0 +1,14 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function res = %s_h_b(s1, b2)
+    // complex & boolean
+    res = (s1<>0) & b2;
+endfunction
index 7b7ef39..0106355 100644 (file)
@@ -1,8 +1,8 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 // Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function res=%s_h_s(s1,s2)
+function res = %s_h_s(s1,s2)
     // Logical operand on complex numbers
-    res = (s1<>0) & (s2<>0);
+    if s1==[] | s2==[] then
+        res = []
+    else
+        res = (s1<>0) & (s2<>0);
+    end
 endfunction