Mercurial > octave
changeset 31305:3b16c2d90326 stable
var.m: Ensure consistent NaN outputs for Inf and NaN inputs (bug #63203)
* var.m: Add Inf and NaN input check to the shortcut codepath when the
operating dimension length is 1, and ensure a NaN output instead of 0. Add
BISTs to verify compatible outputs for NaN and Inf.
* NEWS.7.md: Note bugfix under Improvements and fixes.
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Sat, 15 Oct 2022 08:27:57 -0400 |
parents | cfc3a72fa5cb |
children | ef3cd4d7691f e649aa69d5bc |
files | etc/NEWS.7.md scripts/statistics/var.m |
diffstat | 2 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS.7.md Fri Oct 14 13:06:24 2022 -0400 +++ b/etc/NEWS.7.md Sat Oct 15 08:27:57 2022 -0400 @@ -22,6 +22,7 @@ - Accept negative inputs to -2^63 for `dec2bin` and `dec2hex` (bug #63089). - Fix incorrect `lambda` outputs for `lsqnonneg` and `pqpnonneg` (bug #63178). - `addtodate.m`: Fix wrong month returned when subtracting a month from some end-of-month dates (bug #60671). +- `var.m`: Fix some Inf and NaN inputs returning 0 instead of NaN (bug #63203) ### GUI
--- a/scripts/statistics/var.m Fri Oct 14 13:06:24 2022 -0400 +++ b/scripts/statistics/var.m Sat Oct 15 08:27:57 2022 -0400 @@ -197,6 +197,7 @@ else retval = zeros (sz); endif + retval(isnan (x) | isinf (x)) = NaN; endif else if (isscalar (w)) @@ -259,6 +260,34 @@ %!assert (var (ones (1,3,0,2), [], 3), NaN(1,3,1,2)) %!assert (var (ones (1,3,0,2), [], 4), NaN(1,3,0)) +## Test Inf and NaN inputs +%!assert <*63203> (var (Inf), NaN) +%!assert <*63203> (var (NaN), NaN) +%!assert <*63203> (var ([1, Inf, 3]), NaN) +%!assert <*63203> (var ([1, Inf, 3]'), NaN) +%!assert <*63203> (var ([1, NaN, 3]), NaN) +%!assert <*63203> (var ([1, NaN, 3]'), NaN) +%!assert <*63203> (var ([1, Inf, 3], [], 1), [0, NaN, 0]) +%!assert <*63203> (var ([1, Inf, 3], [], 2), NaN) +%!assert <*63203> (var ([1, Inf, 3], [], 3), [0, NaN, 0]) +%!assert <*63203> (var ([1, NaN, 3], [], 1), [0, NaN, 0]) +%!assert <*63203> (var ([1, NaN, 3], [], 2), NaN) +%!assert <*63203> (var ([1, NaN, 3], [], 3), [0, NaN, 0]) +%!assert <*63203> (var ([1, 2, 3; 3, Inf, 5]), [2, NaN, 2]) +%!assert <*63203> (var ([1, Inf, 3; 3, Inf, 5]), [2, NaN, 2]) +%!assert <*63203> (var ([1, 2, 3; 3, NaN, 5]), [2, NaN, 2]) +%!assert <*63203> (var ([1, NaN, 3; 3, NaN, 5]), [2, NaN, 2]) +%!assert <*63203> (var ([Inf, 2, NaN]), NaN) +%!assert <*63203> (var ([Inf, 2, NaN]'), NaN) +%!assert <*63203> (var ([NaN, 2, Inf]), NaN) +%!assert <*63203> (var ([NaN, 2, Inf]'), NaN) +%!assert <*63203> (var ([Inf, 2, NaN], [], 1), [NaN, 0, NaN]) +%!assert <*63203> (var ([Inf, 2, NaN], [], 2), NaN) +%!assert <*63203> (var ([NaN, 2, Inf], [], 1), [NaN, 0, NaN]) +%!assert <*63203> (var ([NaN, 2, Inf], [], 2), NaN) +%!assert <*63203> (var ([1, 3, NaN; 3, 5, Inf]), [2, 2, NaN]) +%!assert <*63203> (var ([1, 3, Inf; 3, 5, NaN]), [2, 2, NaN]); + ## Test input validation %!error <Invalid call> var () %!error <X must be a numeric> var (['A'; 'B'])