changeset 30850:82c1554c4a64 stable

* test/range.tst: Avoid issues with double precision floating point numbers.
author Markus Mützel <markus.muetzel@gmx.de>
date Sat, 19 Mar 2022 16:55:30 +0100
parents cb0a54576eb0
children 95725e6ad9c1
files test/range.tst
diffstat 1 files changed, 17 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/test/range.tst	Sat Mar 19 15:37:13 2022 +0100
+++ b/test/range.tst	Sat Mar 19 16:55:30 2022 +0100
@@ -611,17 +611,30 @@
 %!test  # ascending ranges
 %! types = {"int8", "int16", "int32", "int64"};
 %! for i_type = 1:numel (types)
-%!   assert (intmin (types{i_type}) : double (intmax (types{i_type})) + 1 : intmax (types{i_type}), ...
+%!   assert (intmin (types{i_type}) : -double (intmin (types{i_type})) : intmax (types{i_type}), ...
 %!           [intmin(types{i_type}), 0]);
+%!   ## FIXME: This test leads to a deadlock for "int64".
+%!   ## assert (intmin (types{i_type}) : -2*double (intmin (types{i_type})) : intmax (types{i_type}), ...
+%!   ##         intmin (types{i_type}));
+%!   if (! strcmp (types, "int64"))
+%!     ## The increment cannot be represented in double precision for "int64"
+%!     assert (intmin (types{i_type}) : 2*double (intmax (types{i_type})) : intmin (types{i_type}), ...
+%!             [intmin(types{i_type}), intmax(types{i_type})-1]);
+%!   endif
 %! endfor
 %!test  # descending ranges
 %! types = {"int8", "int16", "int32", "int64"};
 %! for i_type = 1:numel (types)
 %!   assert (intmax (types{i_type}) : double (intmin (types{i_type})) : intmin (types{i_type}), ...
 %!           [intmax(types{i_type}), -1]);
-%!   ## FIXME: This leads to a deadlock for "int64".
-%!   ## assert (intmax (types{i_type}) : -2*double (intmax (types{i_type})) : intmin (types{i_type}), ...
-%!   ##         [intmax(types{i_type}), -intmax(types{i_type})]);
+%!   ## FIXME: This test leads to a deadlock for "int64".
+%!   ## assert (intmax (types{i_type}) : 2*double (intmin (types{i_type})) : intmin (types{i_type}), ...
+%!   ##         intmax (types{i_type}));
+%!   if (! strcmp (types, "int64"))
+%!     ## The increment cannot be represented in double precision for "int64"
+%!     assert (intmax (types{i_type}) : -2*double (intmax (types{i_type})) : intmin (types{i_type}), ...
+%!             [intmax(types{i_type}), -intmax(types{i_type})]);
+%!   endif
 %! endfor
 
 ## integer range near intmax