# HG changeset patch # User Lachlan Andrew # Date 1421730339 28800 # Node ID 6b09dd57652111fb925eddaeb82199873537fffc # Parent 40b0f41a710088591bb7cd9a11d7be597d5cb751 Fix cummin/cummax operations on rows when NaN element present (bug #44009). * mx-inlines.cc (OP_CUMMINMAX_FCN2): Add missing else clauses. * max.cc (Fcummin, Fcummax): Add BIST tests for cummin and cummax to verify fix. * contributors.in: Add Lachlan Andrew to list of contributors. diff -r 40b0f41a7100 -r 6b09dd576521 doc/interpreter/contributors.in --- a/doc/interpreter/contributors.in Sun Jan 18 10:38:11 2015 -0800 +++ b/doc/interpreter/contributors.in Mon Jan 19 21:05:39 2015 -0800 @@ -4,6 +4,7 @@ Adam H. Aitkenhead Giles Anderson Joel Andersson +Lachlan Andrew Pedro Angelo Muthiah Annamalai Markus Appel diff -r 40b0f41a7100 -r 6b09dd576521 libinterp/corefcn/max.cc --- a/libinterp/corefcn/max.cc Sun Jan 18 10:38:11 2015 -0800 +++ b/libinterp/corefcn/max.cc Mon Jan 19 21:05:39 2015 -0800 @@ -1016,6 +1016,7 @@ %!assert (cummin ([1, 4, 2, 3]), [1 1 1 1]) %!assert (cummin ([1; -10; 5; -2]), [1; -10; -10; -10]) %!assert (cummin ([4, i; -2, 2]), [4, i; -2, i]) +%!assert (cummin ([1 2; NaN 1], 2), [1 1; NaN 1]) %!test %! x = reshape (1:8, [2,2,2]); @@ -1027,6 +1028,7 @@ %! assert (ndims (iw), 3); %! assert (iw, ones (2,2,2)); + %!error cummin () %!error cummin (1, 2, 3) */ @@ -1070,6 +1072,7 @@ %!assert (cummax ([1, 4, 2, 3]), [1 4 4 4]) %!assert (cummax ([1; -10; 5; -2]), [1; 1; 5; 5]) %!assert (cummax ([4, i 4.9, -2, 2, 3+4i]), [4, 4, 4.9, 4.9, 4.9, 3+4i]) +%!assert (cummax ([1 NaN 0; NaN NaN 1], 2), [1 1 1; NaN NaN 1]) %!test %! x = reshape (8:-1:1, [2,2,2]); diff -r 40b0f41a7100 -r 6b09dd576521 liboctave/operators/mx-inlines.cc --- a/liboctave/operators/mx-inlines.cc Sun Jan 18 10:38:11 2015 -0800 +++ b/liboctave/operators/mx-inlines.cc Mon Jan 19 21:05:39 2015 -0800 @@ -939,6 +939,8 @@ { r[i] = r0[i]; nan = true; } \ else if (xisnan (r0[i]) || v[i] OP r0[i]) \ r[i] = v[i]; \ + else \ + r[i] = r0[i]; \ } \ j++; v += m; r0 = r; r += m; \ } \ @@ -976,6 +978,8 @@ { r[i] = r0[i]; ri[i] = r0i[i]; nan = true; } \ else if (xisnan (r0[i]) || v[i] OP r0[i]) \ { r[i] = v[i]; ri[i] = j; }\ + else \ + { r[i] = r0[i]; ri[i] = r0i[i]; }\ } \ j++; v += m; r0 = r; r += m; r0i = ri; ri += m; \ } \