* Bug #14023 fixed - It was not possible to concatenate cells. 27/17127/2
Charlotte HECQUET [Fri, 28 Aug 2015 08:47:33 +0000 (10:47 +0200)]
Change-Id: Ib66fd783b022bdd569c311bd8a256480d06bc9ec

scilab/CHANGES_6.0.X
scilab/modules/overloading/macros/%ce_c_ce.sci
scilab/modules/overloading/macros/%ce_t.sci
scilab/modules/overloading/tests/nonreg_tests/bug_14023.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_14023.tst [new file with mode: 0644]

index a16be2d..ed68163 100644 (file)
@@ -29,6 +29,8 @@ Scilab Bug Fixes
 
 * Bug #14020 fixed - Incorrect carriage return ascii code.
 
+* Bug #14023 fixed - It was not possible to concatenate cells.
+
 * Bug #14025 fixed - head_comments did not take into account compiled functions.
 
 * Bug #14036 fixed - tag and user_data properties were not displayed and not documented for light entity.
index 3445f9b..d31602e 100644 (file)
@@ -8,30 +8,35 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
 function r=%ce_c_ce(a,b)
-    da=a.dims;if size(da,"*")<2 then da(2)=1,end
-    db=b.dims;if size(db,"*")<2 then db(2)=1,end
-    da=double(da);db=double(db);
-    if size(da,"*")<>size(db,"*") then
+    da = size(a);
+    if size(da,"*") < 2 then
+        da(2) = 1;
+    end
+    db = size(b);
+    if size(db,"*") < 2 then
+        db(2) = 1;
+    end
+    if size(da,"*") <> size(db,"*") then
         error(msprintf(_("%s: In concatenation the number of dimensions for each component must match.\n"),"ce_c_ce"));
     end
 
-    kd=find(da<>db)
-    kd(find(kd==2))=[]
-    if kd<>[] then
-        error(5)
+    kd = find(da<>db);
+    kd(find(kd==2)) = [];
+    if kd <> [] then
+        error(5);
     end
-    v=[matrix(1:prod(da),da(1)*da(2),prod(da)/(da(1)*da(2)));
-    -matrix(1:prod(db),db(1)*db(2),prod(db)/(db(1)*db(2)))]
-    val=list()
-    for k=1:size(v,"*")
-        if v(k)>0 then
-            val(k)=a.entries(v(k))
+    v = [matrix(1:prod(da),da(1)*da(2),prod(da)/(da(1)*da(2)));
+    -matrix(1:prod(db),db(1)*db(2),prod(db)/(db(1)*db(2)))];
+    val = list();
+    for k = 1:size(v,"*")
+        if v(k) > 0 then
+            val(k) = a{v(k)};
         else
-            val(k)=b.entries(-v(k))
+            val(k) = b{-v(k)};
         end
     end
-    da(2)=da(2)+db(2)
-    r=mlist(["ce","dims","entries"],int32(da),val)
+    da(2) = da(2)+db(2);
+    r = makecell(da, val(:));
 endfunction
 
 
index e97a1a0..0082052 100644 (file)
@@ -8,15 +8,9 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
 function R=%ce_t(M)
-    D=double(M.dims)
-    if size(D,"*")>2 then
+    D = size(M);
+    if size(D,"*") > 2 then
         error(msprintf(_("%s: Wrong size for input argument #%d: Transpose can not be defined.\n"),"%ce_t",1));
     end
-    NewInd=matrix(matrix(1:prod(D),D)',1,-1)
-    F=getfield(1,M)
-    R=mlist(F,int32([D(2) D(1)]))
-    for k=3:size(F,"*")
-        v=getfield(k,M)
-        setfield(k,list(v(NewInd)),R)
-    end
+    R = makecell([D(2) D(1)], M{:}(:));
 endfunction
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_14023.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_14023.dia.ref
new file mode 100644 (file)
index 0000000..8a900a6
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 14023 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14023
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Short Description -->
+// Concatenate cells is not possible
+// Rows
+ref = makecell([1,3], "aaa", "bbb", "ccc");
+assert_checkequal([cellstr("aaa"), cellstr("bbb"), cellstr("ccc")], ref);
+// Columns
+ref = makecell([3,1], "aaa", "bbb", "ccc");
+assert_checkequal([cellstr("aaa"); cellstr("bbb"); cellstr("ccc")], ref);
+// Transpose
+c = makecell([3,3], "a", "b", "c", "d", "e", "f", "g", "h", "i");
+ref = makecell([3,3], "a", "d", "g", "b", "e", "h", "c", "f", "i");
+assert_checkequal(c', ref);
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_14023.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_14023.tst
new file mode 100644 (file)
index 0000000..611a771
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 14023 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14023
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Short Description -->
+// Concatenate cells is not possible
+
+// Rows
+ref = makecell([1,3], "aaa", "bbb", "ccc");
+assert_checkequal([cellstr("aaa"), cellstr("bbb"), cellstr("ccc")], ref);
+
+// Columns
+ref = makecell([3,1], "aaa", "bbb", "ccc");
+assert_checkequal([cellstr("aaa"); cellstr("bbb"); cellstr("ccc")], ref);
+
+// Transpose
+c = makecell([3,3], "a", "b", "c", "d", "e", "f", "g", "h", "i");
+ref = makecell([3,3], "a", "d", "g", "b", "e", "h", "c", "f", "i");
+assert_checkequal(c', ref);