changeset 31306:ef3cd4d7691f

maint: Merge stable to default
author Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
date Sat, 15 Oct 2022 09:30:55 -0400
parents d3231a604a62 (current diff) 3b16c2d90326 (diff)
children 94dc0f5ba8a3
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	Sat Oct 15 13:34:05 2022 +0200
+++ b/etc/NEWS.7.md	Sat Oct 15 09:30:55 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	Sat Oct 15 13:34:05 2022 +0200
+++ b/scripts/statistics/var.m	Sat Oct 15 09:30:55 2022 -0400
@@ -203,6 +203,7 @@
       v = zeros (sz);
       mu = x;
     endif
+    v(isnan (x) | isinf (x)) = NaN;
   else
     ## Regular algorithm
     if (isscalar (w))
@@ -310,6 +311,34 @@
 %! [~, m] = var (ones (1,3,0,2));
 %! assert (m, NaN(1,1,0,2));
 
+## 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'])