fix bug 12600: mput did not manage unsigned integer. 18/12418/2
Antoine ELIAS [Tue, 3 Sep 2013 11:43:53 +0000 (13:43 +0200)]
Change-Id: I43a2376e813d9df3bc45dfb80788e9d6b67f5820

scilab/CHANGES_5.5.X
scilab/modules/fileio/tests/nonreg_tests/bug_12600.dia.ref [new file with mode: 0644]
scilab/modules/fileio/tests/nonreg_tests/bug_12600.tst [new file with mode: 0644]
scilab/modules/fileio/tests/unit_tests/mputi.dia.ref
scilab/modules/fileio/tests/unit_tests/mputi.tst
scilab/modules/integer/src/fortran/i_mput.f

index b48375a..420c6cc 100644 (file)
@@ -497,6 +497,8 @@ Bug fixes
 
 * Bug #12593 fixed - A wrong error message was returned when running genlib with an error in the sci file.
 
+* Bug #12600 fixed - mput did not manage unsigned integer.
+
 * Bug #12606 fixed - Overloads for grand were not standard.
 
 * Bug #12613 fixed - gsort did not return correct results with %nan.
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_12600.dia.ref b/scilab/modules/fileio/tests/nonreg_tests/bug_12600.dia.ref
new file mode 100644 (file)
index 0000000..ee331e2
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - SCilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 12600 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12600
+//
+// <-- Short Description -->
+// mput did not manage unsigned integer.
+a_ref = iconvert(666,14);
+fd = mopen(TMPDIR + "/bug_12600.dat", "wb");
+mput(a_ref, "ui", fd);
+mclose(fd);
+fd = mopen(TMPDIR + "/bug_12600.dat", "rb");
+a = mgeti(1, "ui", fd);
+assert_checkequal(a_ref, a);
+mclose(fd);
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_12600.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_12600.tst
new file mode 100644 (file)
index 0000000..fdb6335
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - SCilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 12600 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12600
+//
+// <-- Short Description -->
+// mput did not manage unsigned integer.
+
+a_ref = iconvert(666,14);
+
+fd = mopen(TMPDIR + "/bug_12600.dat", "wb");
+mput(a_ref, "ui", fd);
+mclose(fd);
+
+fd = mopen(TMPDIR + "/bug_12600.dat", "rb");
+a = mgeti(1, "ui", fd);
+assert_checkequal(a_ref, a);
+mclose(fd);
index c8db599..524652b 100644 (file)
@@ -38,9 +38,13 @@ ref_usl = hex2dec(["7B" "00" "6E" "B2" "40" "E2"]);
 //integer in long ( little endian )
 writedata("l", list(s8, s16, s32));
 assert_checkequal(readdata("l", 12), ref_l);
+writedata("i", list(s8, s16, s32));
+assert_checkequal(readdata("i", 12), ref_l);
 //integer in little endian long
 writedata("ll", list(s8, s16, s32));
 assert_checkequal(readdata("ll", 12), ref_ll);
+writedata("il", list(s8, s16, s32));
+assert_checkequal(readdata("il", 12), ref_ll);
 //integer in short
 writedata("s", list(s8, s16, s32));
 assert_checkequal(readdata("s", 6), ref_s);
@@ -50,24 +54,32 @@ assert_checkequal(readdata("sl", 6), ref_sl);
 //integer in unsigned long
 writedata("ul", list(u8, u16, u32));
 assert_checkequal(readdata("ul", 12), ref_ul);
+writedata("ui", list(u8, u16, u32));
+assert_checkequal(readdata("ui", 12), ref_ul);
 //integer in unsigned short
 writedata("us", list(u8, u16, u32));
 assert_checkequal(readdata("us", 6), ref_us);
 //integer in big endian long
 writedata("lb", list(s8, s16, s32));
 assert_checkequal(readdata("lb", 12), ref_lb);
+writedata("ib", list(s8, s16, s32));
+assert_checkequal(readdata("ib", 12), ref_lb);
 //integer in big endian short
 writedata("sb", list(s8, s16, s32));
 assert_checkequal(readdata("sb", 6), ref_sb);
 //unsigned integer in unsigned big endian long
 writedata("ulb", list(u8, u16, u32));
 assert_checkequal(readdata("ulb", 12), ref_ulb);
+writedata("uib", list(u8, u16, u32));
+assert_checkequal(readdata("uib", 12), ref_ulb);
 //unsigned integer in unsigned big endian short
 writedata("usb", list(u8, u16, u32));
 assert_checkequal(readdata("usb", 6), ref_usb);
 //unsigned integer in unsigned little endian long
 writedata("ull", list(u8, u16, u32));
 assert_checkequal(readdata("ull", 12), ref_ull);
+writedata("uil", list(u8, u16, u32));
+assert_checkequal(readdata("uil", 12), ref_ull);
 //unsigned integer in unsigned little endian short
 writedata("usl", list(u8, u16, u32));
 assert_checkequal(readdata("usl", 6), ref_usl);
index 3d60f74..834ca54 100644 (file)
@@ -44,10 +44,14 @@ ref_usl = hex2dec(["7B" "00" "6E" "B2" "40" "E2"]);
 //integer in long ( little endian )
 writedata("l", list(s8, s16, s32));
 assert_checkequal(readdata("l", 12), ref_l);
+writedata("i", list(s8, s16, s32));
+assert_checkequal(readdata("i", 12), ref_l);
 
 //integer in little endian long
 writedata("ll", list(s8, s16, s32));
 assert_checkequal(readdata("ll", 12), ref_ll);
+writedata("il", list(s8, s16, s32));
+assert_checkequal(readdata("il", 12), ref_ll);
 
 //integer in short
 writedata("s", list(s8, s16, s32));
@@ -60,6 +64,8 @@ assert_checkequal(readdata("sl", 6), ref_sl);
 //integer in unsigned long
 writedata("ul", list(u8, u16, u32));
 assert_checkequal(readdata("ul", 12), ref_ul);
+writedata("ui", list(u8, u16, u32));
+assert_checkequal(readdata("ui", 12), ref_ul);
 
 //integer in unsigned short
 writedata("us", list(u8, u16, u32));
@@ -68,6 +74,8 @@ assert_checkequal(readdata("us", 6), ref_us);
 //integer in big endian long
 writedata("lb", list(s8, s16, s32));
 assert_checkequal(readdata("lb", 12), ref_lb);
+writedata("ib", list(s8, s16, s32));
+assert_checkequal(readdata("ib", 12), ref_lb);
 
 //integer in big endian short
 writedata("sb", list(s8, s16, s32));
@@ -76,6 +84,8 @@ assert_checkequal(readdata("sb", 6), ref_sb);
 //unsigned integer in unsigned big endian long
 writedata("ulb", list(u8, u16, u32));
 assert_checkequal(readdata("ulb", 12), ref_ulb);
+writedata("uib", list(u8, u16, u32));
+assert_checkequal(readdata("uib", 12), ref_ulb);
 
 //unsigned integer in unsigned big endian short
 writedata("usb", list(u8, u16, u32));
@@ -84,6 +94,8 @@ assert_checkequal(readdata("usb", 6), ref_usb);
 //unsigned integer in unsigned little endian long
 writedata("ull", list(u8, u16, u32));
 assert_checkequal(readdata("ull", 12), ref_ull);
+writedata("uil", list(u8, u16, u32));
+assert_checkequal(readdata("uil", 12), ref_ull);
 
 //unsigned integer in unsigned little endian short
 writedata("usl", list(u8, u16, u32));
index 5b1680e..0bdfdbe 100644 (file)
@@ -70,6 +70,8 @@ c       if(nlr2.eq.3) ik=3
           it1=it1+1
        elseif(ityp(ik:ik).eq.'s') then
           it1=it1+2
+      elseif(ityp(ik:ik).eq.'i') then
+          it1=it1+4
        elseif(ityp(ik:ik).eq.'l') then
           it1=it1+4
        else