Mercurial > jwe > octave
comparison test/range.tst @ 30860:aaf689533e7b stable
Avoid integer division by zero for int64 ranges with double increment.
* libinterp/octave-value/ov.cc (range_numel (T base, double increment, T limit)):
Check for wrap around after casting to unsigned integer type.
* test/range.tst: Un-comment tests.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Tue, 22 Mar 2022 18:01:26 +0100 |
parents | 82c1554c4a64 |
children | 9b3b0dbb4eba |
comparison
equal
deleted
inserted
replaced
30858:fc3bd70cd1be | 30860:aaf689533e7b |
---|---|
611 %!test # ascending ranges | 611 %!test # ascending ranges |
612 %! types = {"int8", "int16", "int32", "int64"}; | 612 %! types = {"int8", "int16", "int32", "int64"}; |
613 %! for i_type = 1:numel (types) | 613 %! for i_type = 1:numel (types) |
614 %! assert (intmin (types{i_type}) : -double (intmin (types{i_type})) : intmax (types{i_type}), ... | 614 %! assert (intmin (types{i_type}) : -double (intmin (types{i_type})) : intmax (types{i_type}), ... |
615 %! [intmin(types{i_type}), 0]); | 615 %! [intmin(types{i_type}), 0]); |
616 %! ## FIXME: This test leads to a deadlock for "int64". | 616 %! assert (intmin (types{i_type}) : -2*double (intmin (types{i_type})) : intmax (types{i_type}), ... |
617 %! ## assert (intmin (types{i_type}) : -2*double (intmin (types{i_type})) : intmax (types{i_type}), ... | 617 %! intmin (types{i_type})); |
618 %! ## intmin (types{i_type})); | |
619 %! if (! strcmp (types, "int64")) | 618 %! if (! strcmp (types, "int64")) |
620 %! ## The increment cannot be represented in double precision for "int64" | 619 %! ## The increment cannot be represented in double precision for "int64" |
621 %! assert (intmin (types{i_type}) : 2*double (intmax (types{i_type})) : intmin (types{i_type}), ... | 620 %! assert (intmin (types{i_type}) : 2*double (intmax (types{i_type})) : intmin (types{i_type}), ... |
622 %! [intmin(types{i_type}), intmax(types{i_type})-1]); | 621 %! [intmin(types{i_type}), intmax(types{i_type})-1]); |
623 %! endif | 622 %! endif |
625 %!test # descending ranges | 624 %!test # descending ranges |
626 %! types = {"int8", "int16", "int32", "int64"}; | 625 %! types = {"int8", "int16", "int32", "int64"}; |
627 %! for i_type = 1:numel (types) | 626 %! for i_type = 1:numel (types) |
628 %! assert (intmax (types{i_type}) : double (intmin (types{i_type})) : intmin (types{i_type}), ... | 627 %! assert (intmax (types{i_type}) : double (intmin (types{i_type})) : intmin (types{i_type}), ... |
629 %! [intmax(types{i_type}), -1]); | 628 %! [intmax(types{i_type}), -1]); |
630 %! ## FIXME: This test leads to a deadlock for "int64". | 629 %! assert (intmax (types{i_type}) : 2*double (intmin (types{i_type})) : intmin (types{i_type}), ... |
631 %! ## assert (intmax (types{i_type}) : 2*double (intmin (types{i_type})) : intmin (types{i_type}), ... | 630 %! intmax (types{i_type})); |
632 %! ## intmax (types{i_type})); | |
633 %! if (! strcmp (types, "int64")) | 631 %! if (! strcmp (types, "int64")) |
634 %! ## The increment cannot be represented in double precision for "int64" | 632 %! ## The increment cannot be represented in double precision for "int64" |
635 %! assert (intmax (types{i_type}) : -2*double (intmax (types{i_type})) : intmin (types{i_type}), ... | 633 %! assert (intmax (types{i_type}) : -2*double (intmax (types{i_type})) : intmin (types{i_type}), ... |
636 %! [intmax(types{i_type}), -intmax(types{i_type})]); | 634 %! [intmax(types{i_type}), -intmax(types{i_type})]); |
637 %! endif | 635 %! endif |