Mercurial > octave
diff test/range.tst @ 16169:0303fda3e929
Fix range behavior with -0 endpoints (bug #38423)
* libinterp/interpfcn/pr-output.cc(octave_print_internal): print base
or limit of range rather than using expression base+i*increment
which can destroy the signbit of base/limit.
* liboctave/array/Range.cc(Range constructor): Move trivial 2-line constructor
to .h file.
* liboctave/array/Range.cc(matrix_value, checkelem): Return base for first
element of array. Return limit of range for end of array if appropriate.
* liboctave/array/Range.cc(elem): Move function from Range.h Return base for
first element of array. Return limit of range for end of array if appropriate.
* liboctave/array/Range.cc(_rangeindex_helper, index): Return base for first
element of array. Return limit of range for end of array if appropriate.
* liboctave/array/Range.cc(min, max): Use '<=' or '>=' tests to
return base or limit if appropriate.
* liboctave/array/Range.cc(is_sorted): Place more common test first in
if/else if/else tree.
* liboctave/array/Range.cc(operator <<): Return base for first
element of array. Return limit of range for end of array if appropriate.
liboctave/array/Range.h(Range constructor): Put trivial 2-line constructor
in .h file.
liboctave/array/Range.h(elem): Move function which has become more complicated
to Range.cc.
* test/range.tst: Add %!tests for corner cases of base and limit of range.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 01 Mar 2013 14:06:02 -0800 |
parents | 1af8d21608b7 |
children | 025393bef399 |
line wrap: on
line diff
--- a/test/range.tst Fri Mar 01 12:46:56 2013 -0800 +++ b/test/range.tst Fri Mar 01 14:06:02 2013 -0800 @@ -72,3 +72,38 @@ %!assert ([ r ; uint32(z) ], uint32(expect)) %!assert ([ r ; uint64(z) ], uint64(expect)) +## Test corner cases of ranges (base and limit) + +%!shared r, rrev, rneg +%! r = -0:3; +%! rrev = 3:-1:-0; +%! rneg = -3:-0; + +%!assert (full (r), [-0 1 2 3]) +%!assert (signbit (full (r)), logical ([1 0 0 0])) +%!assert (r(1), -0) +%!assert (signbit (r(1)), true) +%!assert (signbit (r(1:2)), logical ([1 0])) +%!assert (signbit (r(2:-1:1)), logical ([0 1])) +%!assert (signbit (r([2 1 1 3])), logical ([0 1 1 0])) + +%!assert (full (rrev), [3 2 1 -0]) +%!assert (signbit (full (rrev)), logical ([0 0 0 1])) +%!assert (rrev(4), -0) +%!assert (signbit (rrev(4)), true) +%!assert (signbit (rrev(3:4)), logical ([0 1])) +%!assert (signbit (rrev(4:-1:3)), logical ([1 0])) +%!assert (signbit (rrev([1 4 4 2])), logical ([0 1 1 0])) + +%!assert (min (r), -0) +%!assert (signbit (min (r)), true) +%!assert (min (rrev), -0) +%!assert (signbit (min (rrev)), true) + +%!assert (max (rneg), -0) +%!assert (signbit (min (rneg)), true) + +%!assert (sort (r, "descend"), [3 2 1 -0]) +%!assert (signbit (sort (r, "descend")), logical ([0 0 0 1])) +%!assert (signbit (sort (rrev, "ascend")), logical ([1 0 0 0])) +