missing overload for sum with scalar sparse 25/21325/2
Antoine ELIAS [Fri, 14 Feb 2020 08:11:52 +0000 (09:11 +0100)]
Change-Id: I9dc202e597bec59ad3c6725cbf27d38acd7e403c

scilab/modules/ast/tests/unit_tests/addition.dia.ref [deleted file]
scilab/modules/ast/tests/unit_tests/addition.tst
scilab/modules/overloading/macros/%sp_a_sp.sci [new file with mode: 0644]

diff --git a/scilab/modules/ast/tests/unit_tests/addition.dia.ref b/scilab/modules/ast/tests/unit_tests/addition.dia.ref
deleted file mode 100644 (file)
index 4551c8b..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-// ============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2012 - DIGITEO - Antoine ELIAS
-//
-//  This file is distributed under the same license as the Scilab package.
-// ============================================================================
-// <-- CLI SHELL MODE -->
-s = %s;
-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);
-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"];
-warning("off"); // WARNING_EMPTY_OPS
-assert_checkequal(empty + empty, []);
-assert_checkequal(empty + r, []);
-assert_checkequal(empty + c,  empty);
-assert_checkequal(empty + R, []);
-assert_checkequal(empty + C, []);
-assert_checkequal(empty + e, []);
-assert_checkequal(empty + ec, []);
-assert_checkequal(empty + p, []);
-assert_checkequal(empty + pc, []);
-assert_checkequal(empty + P, []);
-assert_checkequal(empty + PC, []);
-assert_checkequal(empty + SP, []);
-assert_checkequal(empty + SPC, []);
-assert_checkequal(empty + i8, []);
-assert_checkequal(empty + I8, []);
-assert_checkequal(empty + ui8, []);
-assert_checkequal(empty + UI8, []);
-assert_checkequal(empty + i16, []);
-assert_checkequal(empty + I16, []);
-assert_checkequal(empty + ui16, []);
-assert_checkequal(empty + UI16, []);
-assert_checkequal(empty + i32, []);
-assert_checkequal(empty + I32, []);
-assert_checkequal(empty + ui32, []);
-assert_checkequal(empty + UI32, []);
-assert_checkequal(r + empty, []);
-assert_checkequal(r + r, 4);
-assert_checkequal(r + c,  3+%i*2);
-assert_checkequal(r + R, [3,4;5,6]);
-assert_checkequal(r + C, [ 3+%i*2, 4+%i*4; 5+%i*6, 6+%i*8]);
-assert_checkequal(r + e, 3);
-assert_checkequal(r + ec,  7+%i);
-assert_checkequal(r + p, 3+s-s^2);
-assert_checkequal(r + pc, 3+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(r + P, [4+2*s-2*s^2,-1-3*s+3*s^2;6+4*s-4*s^2,-3-5*s+5*s^2]);
-assert_checkequal(r + PC, [4+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;6+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-3-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(r + SP, [2,3,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,5;2,2,2,2,4,2,2,2,2,2]);
-assert_checkequal(r + SPC, [ 2, 3+%i*4, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 5+%i*12; 2, 2, 2, 2, 4+%i*8, 2, 2, 2, 2, 2]);
-assert_checkequal(r + i8, int8(-6));
-assert_checkequal(r + I8, int8([-6,-14;-22,-30]));
-assert_checkequal(r + ui8, uint8(10));
-assert_checkequal(r + UI8, uint8([10,18;26,34]));
-assert_checkequal(r + i16, int16(-14));
-assert_checkequal(r + I16, int16([-14,-30;-46,-62]));
-assert_checkequal(r + ui16, uint16(18));
-assert_checkequal(r + UI16, uint16([18,34;50,66]));
-assert_checkequal(r + i32, int32(-30));
-assert_checkequal(r + I32, int32([-30,-62;-94,-126]));
-assert_checkequal(r + ui32, uint32(34));
-assert_checkequal(r + UI32, uint32([34,66;98,130]));
-assert_checkequal(c + empty,  empty);
-assert_checkequal(c + r,  3+%i*2);
-assert_checkequal(c + c,  2+%i*4);
-assert_checkequal(c + R, [ 2+%i*2, 3+%i*2; 4+%i*2, 5+%i*2]);
-assert_checkequal(c + C, [ 2+%i*4, 3+%i*6; 4+%i*8, 5+%i*10]);
-assert_checkequal(c + e,  2+%i*2);
-assert_checkequal(c + ec,  6+%i*3);
-assert_checkequal(c + p, 2+%i*2+s-s^2);
-assert_checkequal(c + pc, 2+%i*4+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(c + P, [3+%i*2+2*s-2*s^2,-2+%i*2-3*s+3*s^2;5+%i*2+4*s-4*s^2,-4+%i*2-5*s+5*s^2]);
-assert_checkequal(c + PC, [3+%i*6+(2-%i*6)*s+(-2+%i*8)*s^2,-2-%i*4+(-3+%i*9)*s+(3-%i*12)*s^2;5+%i*10+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*8+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(c + SP, [ 1+%i*2, 2+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
-assert_checkequal(c + SPC, [ 1+%i*2, 2+%i*6, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*14; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*10, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
-assert_checkequal(R + empty, []);
-assert_checkequal(R + r, [3,4;5,6]);
-assert_checkequal(R + c, [ 2+%i*2, 3+%i*2; 4+%i*2, 5+%i*2]);
-assert_checkequal(R + R, [2,4;6,8]);
-assert_checkequal(R + C, [ 2+%i*2, 4+%i*4; 6+%i*6, 8+%i*8]);
-assert_checkequal(R + e, [2,2;3,5]);
-assert_checkequal(R + ec, [ 6+%i, 2; 3, 9+%i]);
-assert_checkequal(R + p, [2+s-s^2,3+s-s^2;4+s-s^2,5+s-s^2]);
-assert_checkequal(R + pc, [2+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2,3+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2;4+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2,5+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2]);
-assert_checkequal(R + P, [3+2*s-2*s^2,-1-3*s+3*s^2;7+4*s-4*s^2,-1-5*s+5*s^2]);
-assert_checkequal(R + PC, [3+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;7+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-1-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(R + i8, int8([-7,-6;-5,-4]));
-assert_checkequal(R + I8, int8([-7,-14;-21,-28]));
-assert_checkequal(R + ui8, uint8([9,10;11,12]));
-assert_checkequal(R + UI8, uint8([9,18;27,36]));
-assert_checkequal(R + i16, int16([-15,-14;-13,-12]));
-assert_checkequal(R + I16, int16([-15,-30;-45,-60]));
-assert_checkequal(R + ui16, uint16([17,18;19,20]));
-assert_checkequal(R + UI16, uint16([17,34;51,68]));
-assert_checkequal(R + i32, int32([-31,-30;-29,-28]));
-assert_checkequal(R + I32, int32([-31,-62;-93,-124]));
-assert_checkequal(R + ui32, uint32([33,34;35,36]));
-assert_checkequal(R + UI32, uint32([33,66;99,132]));
-assert_checkequal(C + empty, []);
-assert_checkequal(C + r, [ 3+%i*2, 4+%i*4; 5+%i*6, 6+%i*8]);
-assert_checkequal(C + c, [ 2+%i*4, 3+%i*6; 4+%i*8, 5+%i*10]);
-assert_checkequal(C + R, [ 2+%i*2, 4+%i*4; 6+%i*6, 8+%i*8]);
-assert_checkequal(C + C, [ 2+%i*4, 4+%i*8; 6+%i*12, 8+%i*16]);
-assert_checkequal(C + e, [ 2+%i*2, 2+%i*4; 3+%i*6, 5+%i*8]);
-assert_checkequal(C + ec, [ 6+%i*3, 2+%i*4; 3+%i*6, 9+%i*9]);
-assert_checkequal(C + p, [2+%i*2+s-s^2,3+%i*4+s-s^2;4+%i*6+s-s^2,5+%i*8+s-s^2]);
-assert_checkequal(C + pc, [2+%i*4+(1-%i*3)*s+(-1+%i*4)*s^2,3+%i*6+(1-%i*3)*s+(-1+%i*4)*s^2;4+%i*8+(1-%i*3)*s+(-1+%i*4)*s^2,5+%i*10+(1-%i*3)*s+(-1+%i*4)*s^2]);
-assert_checkequal(C + P, [3+%i*2+2*s-2*s^2,-1+%i*4-3*s+3*s^2;7+%i*6+4*s-4*s^2,-1+%i*8-5*s+5*s^2]);
-assert_checkequal(C + PC, [3+%i*6+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*2+(-3+%i*9)*s+(3-%i*12)*s^2;7+%i*14+(4-%i*12)*s+(-4+%i*16)*s^2,-1-%i*2+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(e + empty, []);
-assert_checkequal(e + r, 3);
-assert_checkequal(e + c,  2+%i*2);
-assert_checkequal(e + R, [2,2;3,5]);
-assert_checkequal(e + C, [ 2+%i*2, 2+%i*4; 3+%i*6, 5+%i*8]);
-assert_checkequal(e + e, (2)*eye());
-assert_checkequal(e + ec, ( 6+%i)*eye());
-assert_checkequal(e + p, 2+s-s^2);
-assert_checkequal(e + pc, 2+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(e + P, [3+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,-4-5*s+5*s^2]);
-assert_checkequal(e + PC, [3+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(e + SP, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[1;1;1;1;3;1;2],[4,10]));
-assert_checkequal(e + SPC, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 1; 1+%i*4; 1; 1; 3+%i*12; 1; 2+%i*8],[4,10]));
-assert_checkequal(ec + empty, []);
-assert_checkequal(ec + r,  7+%i);
-assert_checkequal(ec + c,  6+%i*3);
-assert_checkequal(ec + R, [ 6+%i, 2; 3, 9+%i]);
-assert_checkequal(ec + C, [ 6+%i*3, 2+%i*4; 3+%i*6, 9+%i*9]);
-assert_checkequal(ec + e, ( 6+%i)*eye());
-assert_checkequal(ec + ec, ( 10+%i*2)*eye());
-assert_checkequal(ec + p, 6+%i+s-s^2);
-assert_checkequal(ec + pc, 6+%i*3+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(ec + P, [7+%i+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,%i-5*s+5*s^2]);
-assert_checkequal(ec + PC, [7+%i*5+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-%i*9+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(ec + SP, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1; 5+%i; 5+%i; 3; 5+%i; 2],[4,10]));
-assert_checkequal(ec + SPC, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1+%i*4; 5+%i; 5+%i; 3+%i*12; 5+%i; 2+%i*8],[4,10]));
-assert_checkequal(p + empty, []);
-assert_checkequal(p + r, 3+s-s^2);
-assert_checkequal(p + c, 2+%i*2+s-s^2);
-assert_checkequal(p + R, [2+s-s^2,3+s-s^2;4+s-s^2,5+s-s^2]);
-assert_checkequal(p + C, [2+%i*2+s-s^2,3+%i*4+s-s^2;4+%i*6+s-s^2,5+%i*8+s-s^2]);
-assert_checkequal(p + e, 2+s-s^2);
-assert_checkequal(p + ec, 6+%i+s-s^2);
-assert_checkequal(p + p, 2+2*s-2*s^2);
-assert_checkequal(p + pc, 2+%i*2+(2-%i*3)*s+(-2+%i*4)*s^2);
-assert_checkequal(p + P, [3+3*s-3*s^2,-2-2*s+2*s^2;5+5*s-5*s^2,-4-4*s+4*s^2]);
-assert_checkequal(p + PC, [3+%i*4+(3-%i*6)*s+(-3+%i*8)*s^2,-2-%i*6+(-2+%i*9)*s+(2-%i*12)*s^2;5+%i*8+(5-%i*12)*s+(-5+%i*16)*s^2,-4-%i*10+(-4+%i*15)*s+(4-%i*20)*s^2]);
-assert_checkequal(pc + empty, []);
-assert_checkequal(pc + r, 3+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(pc + c, 2+%i*4+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(pc + R, [2+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2,3+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2;4+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2,5+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2]);
-assert_checkequal(pc + C, [2+%i*4+(1-%i*3)*s+(-1+%i*4)*s^2,3+%i*6+(1-%i*3)*s+(-1+%i*4)*s^2;4+%i*8+(1-%i*3)*s+(-1+%i*4)*s^2,5+%i*10+(1-%i*3)*s+(-1+%i*4)*s^2]);
-assert_checkequal(pc + e, 2+%i*2+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(pc + ec, 6+%i*3+(1-%i*3)*s+(-1+%i*4)*s^2);
-assert_checkequal(pc + p, 2+%i*2+(2-%i*3)*s+(-2+%i*4)*s^2);
-assert_checkequal(pc + pc, 2+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2);
-assert_checkequal(pc + P, [3+%i*2+(3-%i*3)*s+(-3+%i*4)*s^2,-2+%i*2+(-2-%i*3)*s+(2+%i*4)*s^2;5+%i*2+(5-%i*3)*s+(-5+%i*4)*s^2,-4+%i*2+(-4-%i*3)*s+(4+%i*4)*s^2]);
-assert_checkequal(pc + PC, [3+%i*6+(3-%i*9)*s+(-3+%i*12)*s^2,-2-%i*4+(-2+%i*6)*s+(2-%i*8)*s^2;5+%i*10+(5-%i*15)*s+(-5+%i*20)*s^2,-4-%i*8+(-4+%i*12)*s+(4-%i*16)*s^2]);
-assert_checkequal(P + empty, []);
-assert_checkequal(P + r, [4+2*s-2*s^2,-1-3*s+3*s^2;6+4*s-4*s^2,-3-5*s+5*s^2]);
-assert_checkequal(P + c, [3+%i*2+2*s-2*s^2,-2+%i*2-3*s+3*s^2;5+%i*2+4*s-4*s^2,-4+%i*2-5*s+5*s^2]);
-assert_checkequal(P + R, [3+2*s-2*s^2,-1-3*s+3*s^2;7+4*s-4*s^2,-1-5*s+5*s^2]);
-assert_checkequal(P + C, [3+%i*2+2*s-2*s^2,-1+%i*4-3*s+3*s^2;7+%i*6+4*s-4*s^2,-1+%i*8-5*s+5*s^2]);
-assert_checkequal(P + e, [3+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,-4-5*s+5*s^2]);
-assert_checkequal(P + ec, [7+%i+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,%i-5*s+5*s^2]);
-assert_checkequal(P + p, [3+3*s-3*s^2,-2-2*s+2*s^2;5+5*s-5*s^2,-4-4*s+4*s^2]);
-assert_checkequal(P + pc, [3+%i*2+(3-%i*3)*s+(-3+%i*4)*s^2,-2+%i*2+(-2-%i*3)*s+(2+%i*4)*s^2;5+%i*2+(5-%i*3)*s+(-5+%i*4)*s^2,-4+%i*2+(-4-%i*3)*s+(4+%i*4)*s^2]);
-assert_checkequal(P + P, [4+4*s-4*s^2,-6-6*s+6*s^2;8+8*s-8*s^2,-10-10*s+10*s^2]);
-assert_checkequal(P + PC, [4+%i*4+(4-%i*6)*s+(-4+%i*8)*s^2,-6-%i*6+(-6+%i*9)*s+(6-%i*12)*s^2;8+%i*8+(8-%i*12)*s+(-8+%i*16)*s^2,-10-%i*10+(-10+%i*15)*s+(10-%i*20)*s^2]);
-assert_checkequal(PC + empty, []);
-assert_checkequal(PC + r, [4+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;6+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-3-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + c, [3+%i*6+(2-%i*6)*s+(-2+%i*8)*s^2,-2-%i*4+(-3+%i*9)*s+(3-%i*12)*s^2;5+%i*10+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*8+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + R, [3+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;7+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-1-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + C, [3+%i*6+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*2+(-3+%i*9)*s+(3-%i*12)*s^2;7+%i*14+(4-%i*12)*s+(-4+%i*16)*s^2,-1-%i*2+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + e, [3+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + ec, [7+%i*5+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-%i*9+(-5+%i*15)*s+(5-%i*20)*s^2]);
-assert_checkequal(PC + p, [3+%i*4+(3-%i*6)*s+(-3+%i*8)*s^2,-2-%i*6+(-2+%i*9)*s+(2-%i*12)*s^2;5+%i*8+(5-%i*12)*s+(-5+%i*16)*s^2,-4-%i*10+(-4+%i*15)*s+(4-%i*20)*s^2]);
-assert_checkequal(PC + pc, [3+%i*6+(3-%i*9)*s+(-3+%i*12)*s^2,-2-%i*4+(-2+%i*6)*s+(2-%i*8)*s^2;5+%i*10+(5-%i*15)*s+(-5+%i*20)*s^2,-4-%i*8+(-4+%i*12)*s+(4-%i*16)*s^2]);
-assert_checkequal(PC + P, [4+%i*4+(4-%i*6)*s+(-4+%i*8)*s^2,-6-%i*6+(-6+%i*9)*s+(6-%i*12)*s^2;8+%i*8+(8-%i*12)*s+(-8+%i*16)*s^2,-10-%i*10+(-10+%i*15)*s+(10-%i*20)*s^2]);
-assert_checkequal(PC + PC, [4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-6-%i*12+(-6+%i*18)*s+(6-%i*24)*s^2;8+%i*16+(8-%i*24)*s+(-8+%i*32)*s^2,-10-%i*20+(-10+%i*30)*s+(10-%i*40)*s^2]);
-assert_checkequal(SP + empty, []);
-assert_checkequal(SP + r, [2,3,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,5;2,2,2,2,4,2,2,2,2,2]);
-assert_checkequal(SP + c, [ 1+%i*2, 2+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
-assert_checkequal(SP + e, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[1;1;1;1;3;1;2],[4,10]));
-assert_checkequal(SP + ec, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1; 5+%i; 5+%i; 3; 5+%i; 2],[4,10]));
-assert_checkequal(SP + SP, sparse([1,2;3,10;4,5],[2;6;4],[4,10]));
-assert_checkequal(SP + SPC, sparse([1,2;3,10;4,5],[ 2+%i*4; 6+%i*12; 4+%i*8],[4,10]));
-assert_checkequal(SPC + empty, []);
-assert_checkequal(SPC + r, [ 2, 3+%i*4, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 5+%i*12; 2, 2, 2, 2, 4+%i*8, 2, 2, 2, 2, 2]);
-assert_checkequal(SPC + c, [ 1+%i*2, 2+%i*6, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*14; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*10, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
-assert_checkequal(SPC + e, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 1; 1+%i*4; 1; 1; 3+%i*12; 1; 2+%i*8],[4,10]));
-assert_checkequal(SPC + ec, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1+%i*4; 5+%i; 5+%i; 3+%i*12; 5+%i; 2+%i*8],[4,10]));
-assert_checkequal(SPC + SP, sparse([1,2;3,10;4,5],[ 2+%i*4; 6+%i*12; 4+%i*8],[4,10]));
-assert_checkequal(SPC + SPC, sparse([1,2;3,10;4,5],[ 2+%i*8; 6+%i*24; 4+%i*16],[4,10]));
-assert_checkequal(i8 + empty, []);
-assert_checkequal(i8 + r, int8(-6));
-assert_checkequal(i8 + R, int8([-7,-6;-5,-4]));
-assert_checkequal(i8 + i8, int8(-16));
-assert_checkequal(i8 + I8, int8([-16,-24;-32,-40]));
-assert_checkequal(i8 + ui8, uint8(0));
-assert_checkequal(i8 + UI8, uint8([0,8;16,24]));
-assert_checkequal(i8 + i16, int16(-24));
-assert_checkequal(i8 + I16, int16([-24,-40;-56,-72]));
-assert_checkequal(i8 + ui16, uint16(8));
-assert_checkequal(i8 + UI16, uint16([8,24;40,56]));
-assert_checkequal(i8 + i32, int32(-40));
-assert_checkequal(i8 + I32, int32([-40,-72;-104,-136]));
-assert_checkequal(i8 + ui32, uint32(24));
-assert_checkequal(i8 + UI32, uint32([24,56;88,120]));
-assert_checkequal(I8 + empty, []);
-assert_checkequal(I8 + r, int8([-6,-14;-22,-30]));
-assert_checkequal(I8 + R, int8([-7,-14;-21,-28]));
-assert_checkequal(I8 + i8, int8([-16,-24;-32,-40]));
-assert_checkequal(I8 + I8, int8([-16,-32;-48,-64]));
-assert_checkequal(I8 + ui8, uint8([0,248;240,232]));
-assert_checkequal(I8 + UI8, uint8([0,0;0,0]));
-assert_checkequal(I8 + i16, int16([-24,-32;-40,-48]));
-assert_checkequal(I8 + I16, int16([-24,-48;-72,-96]));
-assert_checkequal(I8 + ui16, uint16([8,0;65528,65520]));
-assert_checkequal(I8 + UI16, uint16([8,16;24,32]));
-assert_checkequal(I8 + i32, int32([-40,-48;-56,-64]));
-assert_checkequal(I8 + I32, int32([-40,-80;-120,-160]));
-assert_checkequal(I8 + ui32, uint32([24,16;8,0]));
-assert_checkequal(I8 + UI32, uint32([24,48;72,96]));
-assert_checkequal(ui8 + empty, []);
-assert_checkequal(ui8 + r, uint8(10));
-assert_checkequal(ui8 + R, uint8([9,10;11,12]));
-assert_checkequal(ui8 + i8, uint8(0));
-assert_checkequal(ui8 + I8, uint8([0,248;240,232]));
-assert_checkequal(ui8 + ui8, uint8(16));
-assert_checkequal(ui8 + UI8, uint8([16,24;32,40]));
-assert_checkequal(ui8 + i16, uint16(65528));
-assert_checkequal(ui8 + I16, uint16([65528,65512;65496,65480]));
-assert_checkequal(ui8 + ui16, uint16(24));
-assert_checkequal(ui8 + UI16, uint16([24,40;56,72]));
-assert_checkequal(ui8 + i32, uint32(4294967272));
-assert_checkequal(ui8 + I32, uint32([4294967272,4294967240;4294967208,4294967176]));
-assert_checkequal(ui8 + ui32, uint32(40));
-assert_checkequal(ui8 + UI32, uint32([40,72;104,136]));
-assert_checkequal(UI8 + empty, []);
-assert_checkequal(UI8 + r, uint8([10,18;26,34]));
-assert_checkequal(UI8 + R, uint8([9,18;27,36]));
-assert_checkequal(UI8 + i8, uint8([0,8;16,24]));
-assert_checkequal(UI8 + I8, uint8([0,0;0,0]));
-assert_checkequal(UI8 + ui8, uint8([16,24;32,40]));
-assert_checkequal(UI8 + UI8, uint8([16,32;48,64]));
-assert_checkequal(UI8 + i16, uint16([65528,0;8,16]));
-assert_checkequal(UI8 + I16, uint16([65528,65520;65512,65504]));
-assert_checkequal(UI8 + ui16, uint16([24,32;40,48]));
-assert_checkequal(UI8 + UI16, uint16([24,48;72,96]));
-assert_checkequal(UI8 + i32, uint32([4294967272,4294967280;4294967288,0]));
-assert_checkequal(UI8 + I32, uint32([4294967272,4294967248;4294967224,4294967200]));
-assert_checkequal(UI8 + ui32, uint32([40,48;56,64]));
-assert_checkequal(UI8 + UI32, uint32([40,80;120,160]));
-assert_checkequal(i16 + empty, []);
-assert_checkequal(i16 + r, int16(-14));
-assert_checkequal(i16 + R, int16([-15,-14;-13,-12]));
-assert_checkequal(i16 + i8, int16(-24));
-assert_checkequal(i16 + I8, int16([-24,-32;-40,-48]));
-assert_checkequal(i16 + ui8, uint16(65528));
-assert_checkequal(i16 + UI8, uint16([65528,0;8,16]));
-assert_checkequal(i16 + i16, int16(-32));
-assert_checkequal(i16 + I16, int16([-32,-48;-64,-80]));
-assert_checkequal(i16 + ui16, uint16(0));
-assert_checkequal(i16 + UI16, uint16([0,16;32,48]));
-assert_checkequal(i16 + i32, int32(-48));
-assert_checkequal(i16 + I32, int32([-48,-80;-112,-144]));
-assert_checkequal(i16 + ui32, uint32(16));
-assert_checkequal(i16 + UI32, uint32([16,48;80,112]));
-assert_checkequal(I16 + empty, []);
-assert_checkequal(I16 + r, int16([-14,-30;-46,-62]));
-assert_checkequal(I16 + R, int16([-15,-30;-45,-60]));
-assert_checkequal(I16 + i8, int16([-24,-40;-56,-72]));
-assert_checkequal(I16 + I8, int16([-24,-48;-72,-96]));
-assert_checkequal(I16 + ui8, uint16([65528,65512;65496,65480]));
-assert_checkequal(I16 + UI8, uint16([65528,65520;65512,65504]));
-assert_checkequal(I16 + i16, int16([-32,-48;-64,-80]));
-assert_checkequal(I16 + I16, int16([-32,-64;-96,-128]));
-assert_checkequal(I16 + ui16, uint16([0,65520;65504,65488]));
-assert_checkequal(I16 + UI16, uint16([0,0;0,0]));
-assert_checkequal(I16 + i32, int32([-48,-64;-80,-96]));
-assert_checkequal(I16 + I32, int32([-48,-96;-144,-192]));
-assert_checkequal(I16 + ui32, uint32([16,0;4294967280,4294967264]));
-assert_checkequal(I16 + UI32, uint32([16,32;48,64]));
-assert_checkequal(ui16 + empty, []);
-assert_checkequal(ui16 + r, uint16(18));
-assert_checkequal(ui16 + R, uint16([17,18;19,20]));
-assert_checkequal(ui16 + i8, uint16(8));
-assert_checkequal(ui16 + I8, uint16([8,0;65528,65520]));
-assert_checkequal(ui16 + ui8, uint16(24));
-assert_checkequal(ui16 + UI8, uint16([24,32;40,48]));
-assert_checkequal(ui16 + i16, uint16(0));
-assert_checkequal(ui16 + I16, uint16([0,65520;65504,65488]));
-assert_checkequal(ui16 + ui16, uint16(32));
-assert_checkequal(ui16 + UI16, uint16([32,48;64,80]));
-assert_checkequal(ui16 + i32, uint32(4294967280));
-assert_checkequal(ui16 + I32, uint32([4294967280,4294967248;4294967216,4294967184]));
-assert_checkequal(ui16 + ui32, uint32(48));
-assert_checkequal(ui16 + UI32, uint32([48,80;112,144]));
-assert_checkequal(UI16 + empty, []);
-assert_checkequal(UI16 + r, uint16([18,34;50,66]));
-assert_checkequal(UI16 + R, uint16([17,34;51,68]));
-assert_checkequal(UI16 + i8, uint16([8,24;40,56]));
-assert_checkequal(UI16 + I8, uint16([8,16;24,32]));
-assert_checkequal(UI16 + ui8, uint16([24,40;56,72]));
-assert_checkequal(UI16 + UI8, uint16([24,48;72,96]));
-assert_checkequal(UI16 + i16, uint16([0,16;32,48]));
-assert_checkequal(UI16 + I16, uint16([0,0;0,0]));
-assert_checkequal(UI16 + ui16, uint16([32,48;64,80]));
-assert_checkequal(UI16 + UI16, uint16([32,64;96,128]));
-assert_checkequal(UI16 + i32, uint32([4294967280,0;16,32]));
-assert_checkequal(UI16 + I32, uint32([4294967280,4294967264;4294967248,4294967232]));
-assert_checkequal(UI16 + ui32, uint32([48,64;80,96]));
-assert_checkequal(UI16 + UI32, uint32([48,96;144,192]));
-assert_checkequal(i32 + empty, []);
-assert_checkequal(i32 + r, int32(-30));
-assert_checkequal(i32 + R, int32([-31,-30;-29,-28]));
-assert_checkequal(i32 + i8, int32(-40));
-assert_checkequal(i32 + I8, int32([-40,-48;-56,-64]));
-assert_checkequal(i32 + ui8, uint32(4294967272));
-assert_checkequal(i32 + UI8, uint32([4294967272,4294967280;4294967288,0]));
-assert_checkequal(i32 + i16, int32(-48));
-assert_checkequal(i32 + I16, int32([-48,-64;-80,-96]));
-assert_checkequal(i32 + ui16, uint32(4294967280));
-assert_checkequal(i32 + UI16, uint32([4294967280,0;16,32]));
-assert_checkequal(i32 + i32, int32(-64));
-assert_checkequal(i32 + I32, int32([-64,-96;-128,-160]));
-assert_checkequal(i32 + ui32, uint32(0));
-assert_checkequal(i32 + UI32, uint32([0,32;64,96]));
-assert_checkequal(I32 + empty, []);
-assert_checkequal(I32 + r, int32([-30,-62;-94,-126]));
-assert_checkequal(I32 + R, int32([-31,-62;-93,-124]));
-assert_checkequal(I32 + i8, int32([-40,-72;-104,-136]));
-assert_checkequal(I32 + I8, int32([-40,-80;-120,-160]));
-assert_checkequal(I32 + ui8, uint32([4294967272,4294967240;4294967208,4294967176]));
-assert_checkequal(I32 + UI8, uint32([4294967272,4294967248;4294967224,4294967200]));
-assert_checkequal(I32 + i16, int32([-48,-80;-112,-144]));
-assert_checkequal(I32 + I16, int32([-48,-96;-144,-192]));
-assert_checkequal(I32 + ui16, uint32([4294967280,4294967248;4294967216,4294967184]));
-assert_checkequal(I32 + UI16, uint32([4294967280,4294967264;4294967248,4294967232]));
-assert_checkequal(I32 + i32, int32([-64,-96;-128,-160]));
-assert_checkequal(I32 + I32, int32([-64,-128;-192,-256]));
-assert_checkequal(I32 + ui32, uint32([0,4294967264;4294967232,4294967200]));
-assert_checkequal(I32 + UI32, uint32([0,0;0,0]));
-assert_checkequal(ui32 + empty, []);
-assert_checkequal(ui32 + r, uint32(34));
-assert_checkequal(ui32 + R, uint32([33,34;35,36]));
-assert_checkequal(ui32 + i8, uint32(24));
-assert_checkequal(ui32 + I8, uint32([24,16;8,0]));
-assert_checkequal(ui32 + ui8, uint32(40));
-assert_checkequal(ui32 + UI8, uint32([40,48;56,64]));
-assert_checkequal(ui32 + i16, uint32(16));
-assert_checkequal(ui32 + I16, uint32([16,0;4294967280,4294967264]));
-assert_checkequal(ui32 + ui16, uint32(48));
-assert_checkequal(ui32 + UI16, uint32([48,64;80,96]));
-assert_checkequal(ui32 + i32, uint32(0));
-assert_checkequal(ui32 + I32, uint32([0,4294967264;4294967232,4294967200]));
-assert_checkequal(ui32 + ui32, uint32(64));
-assert_checkequal(ui32 + UI32, uint32([64,96;128,160]));
-assert_checkequal(UI32 + empty, []);
-assert_checkequal(UI32 + r, uint32([34,66;98,130]));
-assert_checkequal(UI32 + R, uint32([33,66;99,132]));
-assert_checkequal(UI32 + i8, uint32([24,56;88,120]));
-assert_checkequal(UI32 + I8, uint32([24,48;72,96]));
-assert_checkequal(UI32 + ui8, uint32([40,72;104,136]));
-assert_checkequal(UI32 + UI8, uint32([40,80;120,160]));
-assert_checkequal(UI32 + i16, uint32([16,48;80,112]));
-assert_checkequal(UI32 + I16, uint32([16,32;48,64]));
-assert_checkequal(UI32 + ui16, uint32([48,80;112,144]));
-assert_checkequal(UI32 + UI16, uint32([48,96;144,192]));
-assert_checkequal(UI32 + i32, uint32([0,32;64,96]));
-assert_checkequal(UI32 + I32, uint32([0,0;0,0]));
-assert_checkequal(UI32 + ui32, uint32([64,96;128,160]));
-assert_checkequal(UI32 + UI32, uint32([64,128;192,256]));
-assert_checkequal(str + empty, []);
-assert_checkequal(str + str, "stringstring");
-assert_checkequal(str + STR, ["stringstring1","stringstring2";"stringstring3","stringstring4"]);
-assert_checkequal(STR + empty, []);
-assert_checkequal(STR + str, ["string1string","string2string";"string3string","string4string"]);
-assert_checkequal(STR + STR, ["string1string1","string2string2";"string3string3","string4string4"]);
index fb281e9..0b86891 100644 (file)
@@ -6,6 +6,7 @@
 // ============================================================================
 
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
 
 s = %s;
 empty = [];
@@ -23,6 +24,8 @@ 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];
+SP1 = sparse(2);
+SP1C = sparse(2 + 3*%i);
 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);
 
@@ -58,6 +61,8 @@ assert_checkequal(empty + P, []);
 assert_checkequal(empty + PC, []);
 assert_checkequal(empty + SP, []);
 assert_checkequal(empty + SPC, []);
+assert_checkequal(empty + SP1, []);
+assert_checkequal(empty + SP1C, []);
 assert_checkequal(empty + i8, []);
 assert_checkequal(empty + I8, []);
 assert_checkequal(empty + ui8, []);
@@ -84,6 +89,8 @@ assert_checkequal(r + P, [4+2*s-2*s^2,-1-3*s+3*s^2;6+4*s-4*s^2,-3-5*s+5*s^2]);
 assert_checkequal(r + PC, [4+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-1-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;6+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-3-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
 assert_checkequal(r + SP, [2,3,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,2;2,2,2,2,2,2,2,2,2,5;2,2,2,2,4,2,2,2,2,2]);
 assert_checkequal(r + SPC, [ 2, 3+%i*4, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 5+%i*12; 2, 2, 2, 2, 4+%i*8, 2, 2, 2, 2, 2]);
+assert_checkequal(r + SP1, 4);
+assert_checkequal(r + SP1C, 4 + 3*%i);
 assert_checkequal(r + i8, int8(-6));
 assert_checkequal(r + I8, int8([-6,-14;-22,-30]));
 assert_checkequal(r + ui8, uint8(10));
@@ -110,6 +117,8 @@ assert_checkequal(c + P, [3+%i*2+2*s-2*s^2,-2+%i*2-3*s+3*s^2;5+%i*2+4*s-4*s^2,-4
 assert_checkequal(c + PC, [3+%i*6+(2-%i*6)*s+(-2+%i*8)*s^2,-2-%i*4+(-3+%i*9)*s+(3-%i*12)*s^2;5+%i*10+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*8+(-5+%i*15)*s+(5-%i*20)*s^2]);
 assert_checkequal(c + SP, [ 1+%i*2, 2+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
 assert_checkequal(c + SPC, [ 1+%i*2, 2+%i*6, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 4+%i*14; 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 3+%i*10, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2, 1+%i*2]);
+assert_checkequal(c + SP1,  3+%i*2);
+assert_checkequal(c + SP1C,  3+%i*5);
 
 assert_checkequal(R + empty, []);
 assert_checkequal(R + r, [3,4;5,6]);
@@ -160,6 +169,8 @@ assert_checkequal(e + P, [3+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,-4-5*s+5*s^2]);
 assert_checkequal(e + PC, [3+%i*4+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-4-%i*10+(-5+%i*15)*s+(5-%i*20)*s^2]);
 assert_checkequal(e + SP, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[1;1;1;1;3;1;2],[4,10]));
 assert_checkequal(e + SPC, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 1; 1+%i*4; 1; 1; 3+%i*12; 1; 2+%i*8],[4,10]));
+assert_checkequal(e + SP1, sparse(3));
+assert_checkequal(e + SP1C, sparse(3 + 3*%i));
 
 assert_checkequal(ec + empty, []);
 assert_checkequal(ec + r,  7+%i);
@@ -174,6 +185,8 @@ assert_checkequal(ec + P, [7+%i+2*s-2*s^2,-3-3*s+3*s^2;4+4*s-4*s^2,%i-5*s+5*s^2]
 assert_checkequal(ec + PC, [7+%i*5+(2-%i*6)*s+(-2+%i*8)*s^2,-3-%i*6+(-3+%i*9)*s+(3-%i*12)*s^2;4+%i*8+(4-%i*12)*s+(-4+%i*16)*s^2,-%i*9+(-5+%i*15)*s+(5-%i*20)*s^2]);
 assert_checkequal(ec + SP, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1; 5+%i; 5+%i; 3; 5+%i; 2],[4,10]));
 assert_checkequal(ec + SPC, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1+%i*4; 5+%i; 5+%i; 3+%i*12; 5+%i; 2+%i*8],[4,10]));
+assert_checkequal(ec + SP1, sparse(7 + %i));
+assert_checkequal(ec + SP1C, sparse(7 + 4*%i));
 
 assert_checkequal(p + empty, []);
 assert_checkequal(p + r, 3+s-s^2);
@@ -230,6 +243,8 @@ assert_checkequal(SP + e, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[1;1;1;1;3;1;2],
 assert_checkequal(SP + ec, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1; 5+%i; 5+%i; 3; 5+%i; 2],[4,10]));
 assert_checkequal(SP + SP, sparse([1,2;3,10;4,5],[2;6;4],[4,10]));
 assert_checkequal(SP + SPC, sparse([1,2;3,10;4,5],[ 2+%i*4; 6+%i*12; 4+%i*8],[4,10]));
+assert_checkequal(SP + SP1, full(SP) + full(SP1));
+assert_checkequal(SP + SP1C, full(SP) + full(SP1C));
 
 assert_checkequal(SPC + empty, []);
 assert_checkequal(SPC + r, [ 2, 3+%i*4, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; 2, 2, 2, 2, 2, 2, 2, 2, 2, 5+%i*12; 2, 2, 2, 2, 4+%i*8, 2, 2, 2, 2, 2]);
@@ -238,6 +253,13 @@ assert_checkequal(SPC + e, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 1; 1+%i*4; 1;
 assert_checkequal(SPC + ec, sparse([1,1;1,2;2,2;3,3;3,10;4,4;4,5],[ 5+%i; 1+%i*4; 5+%i; 5+%i; 3+%i*12; 5+%i; 2+%i*8],[4,10]));
 assert_checkequal(SPC + SP, sparse([1,2;3,10;4,5],[ 2+%i*4; 6+%i*12; 4+%i*8],[4,10]));
 assert_checkequal(SPC + SPC, sparse([1,2;3,10;4,5],[ 2+%i*8; 6+%i*24; 4+%i*16],[4,10]));
+assert_checkequal(SPC + SP1, full(SPC) + full(SP1));
+assert_checkequal(SPC + SP1C, full(SPC) + full(SP1C));
+
+assert_checkequal(SP1 + SP1, sparse(4));
+assert_checkequal(SP1 + SP1C, sparse(4 + 3*%i));
+
+assert_checkequal(SP1C + SP1C, sparse(4 + 6*%i));
 
 assert_checkequal(i8 + empty, []);
 assert_checkequal(i8 + r, int8(-6));
diff --git a/scilab/modules/overloading/macros/%sp_a_sp.sci b/scilab/modules/overloading/macros/%sp_a_sp.sci
new file mode 100644 (file)
index 0000000..f5c5fad
--- /dev/null
@@ -0,0 +1,19 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - ESI Group - Antoine ELIAS
+//
+// 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 c = %sp_a_sp(a, b)
+    if isscalar(a) && isscalar(b) then
+        c = sparse(full(a) + full(b));
+    elseif isscalar(a) then
+        c = full(a) + b;
+    else
+        c = a + full(b);
+    end
+endfunction