bug #14149: fix h5read hypermatrix dimensions issue 43/17243/2
Antoine ELIAS [Wed, 23 Sep 2015 15:51:34 +0000 (17:51 +0200)]
Change-Id: I5f4cebdd2790e3a91f0e816ebc7307a4870f7490

scilab/CHANGES_6.0.X
scilab/modules/hdf5/src/cpp/H5BasicData.hxx
scilab/modules/hdf5/tests/nonreg_tests/bug_14149.dia.ref [new file with mode: 0644]
scilab/modules/hdf5/tests/nonreg_tests/bug_14149.tst [new file with mode: 0644]

index 0954549..39394fe 100644 (file)
@@ -63,6 +63,8 @@ Scilab Bug Fixes
 
 * Bug #14144 fixed - Scilab crashed with int64(2^63).
 
+* Bug #14149 fixed - hdf5 could not restore hypermatrix with good dimensions.
+
 * Bug #14150 fixed - The Windows SDK was not found on Windows 8.1.
 
 
index b3640ed..d6c1766 100644 (file)
@@ -204,11 +204,20 @@ public:
                     getVarAddressFromPosition(pvApiCtx, lhsPosition, &pNewDataVar);
                 }
 
-                for (i = 0; i < indims; i++)
+                if (flip)
                 {
-                    piDimsArray[i] = (int)_dims[i];
+                    for (i = 0; i < indims; i++)
+                    {
+                        piDimsArray[indims - 1 - i] = (int)_dims[i];
+                    }
+                }
+                else
+                {
+                    for (i = 0; i < indims; i++)
+                    {
+                        piDimsArray[i] = (int)_dims[i];
+                    }
                 }
-
                 reshapeArray(pvApiCtx, pNewDataVar, piDimsArray, indims);
                 delete[] piDimsArray;
 
diff --git a/scilab/modules/hdf5/tests/nonreg_tests/bug_14149.dia.ref b/scilab/modules/hdf5/tests/nonreg_tests/bug_14149.dia.ref
new file mode 100644 (file)
index 0000000..517c05e
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 14149 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14149
+//
+// <-- Short Description -->
+//
+//hdf5 cannot read back hypermatrices from hdf5 files
+//test hypermatrix to save to / reload from hdf5 file
+var(:,:,1)=[111,112,113;121,122,123];
+var(:,:,2)=[211,212,213;221,222,223];
+var(:,:,3)=[311,312,313;321,322,323];
+var(:,:,4)=[411,412,413;421,422,423];
+cd TMPDIR;
+h5=h5open("var.h5","w");
+h5write(h5, "var", var);
+h5close(h5);
+h5=h5open("var.h5","r");
+newvar=h5.root.var.data;
+h5close(h5);
+assert_checkequal(var, newvar);
diff --git a/scilab/modules/hdf5/tests/nonreg_tests/bug_14149.tst b/scilab/modules/hdf5/tests/nonreg_tests/bug_14149.tst
new file mode 100644 (file)
index 0000000..319dc3c
--- /dev/null
@@ -0,0 +1,35 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 14149 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14149
+//
+// <-- Short Description -->
+//
+//hdf5 cannot read back hypermatrices from hdf5 files
+
+//test hypermatrix to save to / reload from hdf5 file
+var(:,:,1)=[111,112,113;121,122,123];
+var(:,:,2)=[211,212,213;221,222,223];
+var(:,:,3)=[311,312,313;321,322,323];
+var(:,:,4)=[411,412,413;421,422,423];
+
+cd TMPDIR;
+
+h5=h5open("var.h5","w");
+h5write(h5, "var", var);
+h5close(h5);
+
+h5=h5open("var.h5","r");
+newvar=h5.root.var.data;
+h5close(h5);
+
+assert_checkequal(var, newvar);
\ No newline at end of file