* Bug #14685 fixed - datavec produced an invalid index error. 81/18481/2
Adeline CARNIS [Thu, 18 Aug 2016 08:21:49 +0000 (10:21 +0200)]
Change-Id: Ibfc755cd4323a68fc9e7518efa8b002e005cc1b3

scilab/CHANGES.md
scilab/modules/time/macros/datevec.sci
scilab/modules/time/tests/nonreg_tests/bug_14685.dia.ref [new file with mode: 0644]
scilab/modules/time/tests/nonreg_tests/bug_14685.tst [new file with mode: 0644]

index 1495ff7..8b342f3 100644 (file)
@@ -499,3 +499,4 @@ Bug Fixes
 * [Bug #14517](http://bugzilla.scilab.org/show_bug.cgi?id=14517) fixed - The second argument of part function accepted an index of 0 without exiting in error.
 * [Bug #14524](http://bugzilla.scilab.org/show_bug.cgi?id=14524) fixed - Numeric locales were not set to standard "C" by default at scilab startup
 * [Bug #14540](http://bugzilla.scilab.org/show_bug.cgi?id=14540) fixed - Datatips did not clip outside axes bounds
+* [Bug #14685](http://bugzilla.scilab.org/show_bug.cgi?id=14685) fixed - datavec produced an invalid index error.
\ No newline at end of file
index 82383cd..68403bd 100644 (file)
@@ -57,8 +57,8 @@ function [Y,M,D,h,m,s] = datevec(N)
 
     // On retranche 1 si la valeur est inferieur à 0
 
-    mask       = find(temp <= 0);
-    if ~isempty(mask)
+    mask       = (temp <= 0);
+    if or(mask)
         Year(mask) = Year(mask)-1;
 
         N(mask)    = N(mask) - (365.0*Year(mask) + ceil(0.25*Year(mask)) - ceil(0.01*Year(mask)) + ceil(0.0025*Year(mask)));
@@ -70,7 +70,7 @@ function [Y,M,D,h,m,s] = datevec(N)
     // ... and the month
     // =========================================================================
 
-    Month = int (N/29);
+    Month = int(N/29);
 
     // construction de la matrice
 
@@ -84,7 +84,10 @@ function [Y,M,D,h,m,s] = datevec(N)
         month_day_mat(~idx_leap_year) = common_year(Month(~idx_leap_year)+1);
     end
 
-    Month( N>month_day_mat ) = Month( N>month_day_mat )+1;
+    if or(N > month_day_mat) then
+        Month( N>month_day_mat ) = Month( N>month_day_mat )+1;
+    end
+
 
     Day = ones(nr,nc);
 
diff --git a/scilab/modules/time/tests/nonreg_tests/bug_14685.dia.ref b/scilab/modules/time/tests/nonreg_tests/bug_14685.dia.ref
new file mode 100644 (file)
index 0000000..b68b3f0
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14685 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14685
+//
+// <-- Short Description -->
+//    datavec produced an invalid index error.
+// =============================================================================
+horodeb= datenum(2016,12,31,23,0,0);
+horofin= datenum(2016,12,31,23,59,59);
+horoj= [horodeb:1/1440:horofin]' ;
+horoj_clair= zeros(size(horoj,1),6);
+horoj_clair= datevec(horoj);
+assert_checkequal(datenum(horoj_clair), horoj);
diff --git a/scilab/modules/time/tests/nonreg_tests/bug_14685.tst b/scilab/modules/time/tests/nonreg_tests/bug_14685.tst
new file mode 100644 (file)
index 0000000..ae0a32c
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 14685 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14685
+//
+// <-- Short Description -->
+//    datavec produced an invalid index error.
+// =============================================================================
+
+horodeb= datenum(2016,12,31,23,0,0);
+horofin= datenum(2016,12,31,23,59,59);
+horoj= [horodeb:1/1440:horofin]' ;
+horoj_clair= zeros(size(horoj,1),6);
+horoj_clair= datevec(horoj);
+assert_checkequal(datenum(horoj_clair), horoj);