diff test/range.tst @ 25808:dc47c9e48801

Guarantee an integer for max of Range when base and increment are ints (bug #46859). * Range.cc (range_internal): Check all_elements_are_ints() and round internal limit to nearest integer if necessary. * range.tst: Add BIST tests for bug #46859.
author Rik <rik@octave.org>
date Thu, 16 Aug 2018 17:35:36 -0700
parents 6652d3823428
children fc74c8d2a584
line wrap: on
line diff
--- a/test/range.tst	Thu Aug 16 16:30:26 2018 -0700
+++ b/test/range.tst	Thu Aug 16 17:35:36 2018 -0700
@@ -108,10 +108,25 @@
 %!assert (signbit (sort (rrev, "ascend")), logical ([1 0 0 0]))
 
 ## Test sorting of ranges (bug #45739)
-
 %!shared r, rrev
 %! r = 1:2:10;
 %! rrev = 10:-2:1;
 
-%!assert (sort (r, "descend"), [9 7 5 3 1])
-%!assert (sort (rrev, "ascend"), [2 4 6 8 10])
+%!assert <*45739> (sort (r, "descend"), [9 7 5 3 1])
+%!assert <*45739> (sort (rrev, "ascend"), [2 4 6 8 10])
+
+## Test final value within eps of an integer (bug #46859)
+%!test <*46859>
+%! rng = 1 : (1001/250)/(1/250);
+%! assert (rng(end), 1001);
+
+%!test <*46859>
+%! rng = 2000: -1 : (1001/250)/(1/250);
+%! assert (rng(end), 1001);
+
+## This is not Matlab compatible (stops at 1000 with 999 elements)
+## Octave prefers the more intuitive "pure math" approach where
+## (1001/250) / (1/250) => (1001/250)*(250/1) => 1001.
+%!test <*46859>
+%! rng = 1 : (1001/250)/(1/250);
+%! assert (numel (1000));