* Bug 16596 : [int , sparse] and [int ; sparse] now possible 23/21623/3
Samuel GOUGEON [Thu, 12 Nov 2020 22:36:00 +0000 (23:36 +0100)]
  http://bugzilla.scilab.org/16596

Change-Id: I7b3bf094aa07b8814acbcf9030e9fca591a6f310

scilab/CHANGES.md
scilab/modules/overloading/macros/%i_c_sp.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%i_f_sp.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_c_i.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_f_i.sci [new file with mode: 0644]
scilab/modules/overloading/tests/unit_tests/concatenations_mixed.tst

index 136da4a..5fdac88 100644 (file)
@@ -357,14 +357,12 @@ Bug Fixes
 * [#16553](https://bugzilla.scilab.org/16553): `unique(["" ""])` returned `["" ""]`.
 * [#16557](https://bugzilla.scilab.org/16557): `macr2tree` + `tree2code` translated `e={2}` into `"e=1"` and `e={2,"ab"}` into `"e=[2,"ab"]"`.
 * [#16559](https://bugzilla.scilab.org/16553): `isempty(A)` was true for sparse matrix of dimension 2^16 or larger.
-<<<<<<< HEAD
+* [#16596](https://bugzilla.scilab.org/16596): Concatenating encoded integers with sparse numeric data was not possible. 
 * [#16622](https://bugzilla.scilab.org/16622): `inv` could no longer be overloaded for hypermatrices of decimal or complex numbers.
 * [#16623](https://bugzilla.scilab.org/16623): `rand(2,2,2)^2` yielded a wrong result instead of trying to call the `%s_p_s` overload for input hypermatrices.
+* [#16629](https://bugzilla.scilab.org/16629): `interp1`'s documentation did not tell the spline edges conditions ; extrapolation modes were poorly explained. ; the description of the result's size was completely wrong ; x as an option was not documented. A wrong extrapolation value could silently return a wrong result. There was some dead code like `if varargin(5)==%nan`. A bugged error message yielded its own error. When x is implicit, the argument index in error messages could be wrong. `periodic` and `edgevalue` extrapolation modes were not available. `linear` extrapolation was not available for splines. When `xp` is an hypermatrix with `size(xp,1)==1`, the size of the result was irregular/wrong.
 * [#16644](https://bugzilla.scilab.org/16644): `input("message:")` yielded a wrong error message about `mprintf` in case of non-interpretable input.
 * [#16654](https://bugzilla.scilab.org/16654): `interp` was leaking memory.
-=======
-* [#16629](https://bugzilla.scilab.org/16629): `interp1`'s documentation did not tell the spline edges conditions ; extrapolation modes were poorly explained ; the description of the result's size was completely wrong ; x as an option was not documented. A wrong extrapolation value could silently return a wrong result. There was some dead code like `if varargin(5)==%nan`. A bugged error message yielded its own error. When x is implicit, the argument index in error messages could be wrong. `periodic` and `edgevalue` extrapolation modes were not available. `linear` extrapolation was not available for splines. When `xp` is an hypermatrix with `size(xp,1)==1`, the size of the result was irregular/wrong.
->>>>>>> ae66d0ee461... * Bug 16629 fixed: interp1() fixed + complex + extended extrapolations
 
 
 ### Bugs fixed in 6.1.0:
diff --git a/scilab/modules/overloading/macros/%i_c_sp.sci b/scilab/modules/overloading/macros/%i_c_sp.sci
new file mode 100644 (file)
index 0000000..d8130cf
--- /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 r = %i_c_sp(a, b)
+    // Horizontal concatenation [encoded_integer , sparse]
+    r = [double(a) , b]
+endfunction
diff --git a/scilab/modules/overloading/macros/%i_f_sp.sci b/scilab/modules/overloading/macros/%i_f_sp.sci
new file mode 100644 (file)
index 0000000..590c92b
--- /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 r = %i_f_sp(a, b)
+    // Vertical concatenation [encoded_integer ; sparse]
+    r = [double(a) ; b]
+endfunction
diff --git a/scilab/modules/overloading/macros/%sp_c_i.sci b/scilab/modules/overloading/macros/%sp_c_i.sci
new file mode 100644 (file)
index 0000000..57aaebc
--- /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 r = %sp_c_i(a, b)
+    // Horizontal concatenation [sparse ; encoded_integer]
+    r = [a, double(b)]
+endfunction
diff --git a/scilab/modules/overloading/macros/%sp_f_i.sci b/scilab/modules/overloading/macros/%sp_f_i.sci
new file mode 100644 (file)
index 0000000..5548d84
--- /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 r = %sp_f_i(a, b)
+    // Vertical concatenation [sparse ; encoded_integer]
+    r = [a ; double(b)]
+endfunction
index 29af0de..f4c6d17 100644 (file)
@@ -40,6 +40,19 @@ for it = [1 2 4 8 11 12 14 18]  // Loop on integer types
     end
 end
 
+// -----------------------------------
+// Sparse numeric and encoded integers
+// -----------------------------------
+D = list(2, [3 7], [3 ; 7], [1 2 3 ; 4 5 6]);
+for it = [1 2 4 8 11 12 14 18]  // Loop on integer types
+    for d = D
+        assert_checkequal([sparse(d), iconvert(d,it)], sparse([d d]));
+        assert_checkequal([iconvert(d,it), sparse(d)], sparse([d d]));
+        assert_checkequal([sparse(d) ; iconvert(d,it)], sparse([d ; d]));
+        assert_checkequal([iconvert(d,it) ; sparse(d)], sparse([d ; d]));
+    end
+end
+
 // -------------------------------------------------
 // A boolean and a double, at least one being sparse
 // -------------------------------------------------