* Bug #13897 fixed - concatenating structures with same fields in mismatching orders... 90/17890/4
Nicolas [Thu, 10 Mar 2016 13:46:15 +0000 (14:46 +0100)]
Change-Id: I645457483a37adf6b1b908564b683b757c260cec

scilab/CHANGES
scilab/modules/overloading/macros/%st_c_st.sci
scilab/modules/overloading/tests/nonreg_tests/bug_13897.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_13897.tst [new file with mode: 0644]

index a29d086..a916a68 100644 (file)
@@ -322,6 +322,8 @@ In 6.0.0:
 
 * Bug #13869 fixed - bench_run with option nb_run=10 did not override the NB RUN tags
 
+* Bug #13897 fixed - concatenating structures with same fields in mismatching orders failed
+
 * Bug #13965 fixed - The rendering of histograms with histplot() was poor
 
 * Bug #13974 fixed - isoview(xmin, xmax, ymin, ymax) was unhandy.
index 146416f..2914392 100644 (file)
@@ -1,6 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
-//
+// Copyright (C) 2015 - 2016 - Samuel GOUGEON
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function R=%st_c_st(M1,M2)
+function R = %st_c_st(M1,M2)
 
-    d1=size(M1);
-    d2=size(M2);
+    d1 = size(M1);
+    d2 = size(M2);
     if size(d1,"*")<>size(d2,"*") then
-        error(msprintf(_("%s: In concatenation the number of dimensions for each component must match.\n"),"%st_c_st"));
+        msg = _("%s: Concatenated arrays must have the same number of dimensions.\n")
+        error(msprintf(msg, "%st_c_st"));
     end
 
-    F1=getfield(1,M1)
-    F2=getfield(1,M2)
-    if or(F1<>F2) then
+    F1 = getfield(1,M1)
+    F2 = getfield(1,M2)
+    if or(gsort(F1,"g","i")<>gsort(F2,"g","i")) then
         error(msprintf(_("%s: Field names mismatch.\n"),"%st_c_st"));
     end
 
-    kd=find(d1<>d2)
-    kd(find(kd==2))=[]
+    kd = find(d1<>d2)
+    kd(find(kd==2)) = []
     if kd<>[] then
         error(msprintf(_("%s: Inconsistent dimensions.\n"),"%st_c_st"));
     end
 
-    newdim=d1;newdim(2)=d1(2)+d2(2);
+    newdim = d1;
+    newdim(2) = d1(2)+d2(2);
 
-    R=struct();
+    R = struct();
     R(1:size(M1, "*")) = M1;
-    s=size(R, "*");
+    s = size(R, "*");
     R((s+1):s+size(M2, "*")) = M2;
     R = matrix(R, newdim);
 endfunction
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13897.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_13897.dia.ref
new file mode 100644 (file)
index 0000000..a7ac492
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13897 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13897
+//
+// <-- Short Description -->
+// 2 arrays of structures with same fields but in different order
+//   could not be concatenated
+clear p q
+p(1,1).a = %pi;
+p(1,1).b = %z;
+p(1,2).b = (1-%z)^2;
+q.b = %s;
+q.a = %e;
+try
+    [p q];
+catch
+    pause
+end
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13897.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_13897.tst
new file mode 100644 (file)
index 0000000..c530350
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13897 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13897
+//
+// <-- Short Description -->
+// 2 arrays of structures with same fields but in different order
+//   could not be concatenated
+clear p q
+p(1,1).a = %pi;
+p(1,1).b = %z;
+p(1,2).b = (1-%z)^2;
+
+q.b = %s;
+q.a = %e;
+try
+    [p q];
+catch
+    pause
+end