Mercurial > octave
diff scripts/statistics/var.m @ 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 | 9c7561dda313 |
children | ef3cd4d7691f 80bd450892b2 |
line wrap: on
line diff
--- 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'])