Mercurial > octave-nkf
changeset 19625:6b09dd576521
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.
author | Lachlan Andrew <lachlanbis@gmail.com> |
---|---|
date | Mon, 19 Jan 2015 21:05:39 -0800 |
parents | 40b0f41a7100 |
children | 37d37297acf8 |
files | doc/interpreter/contributors.in libinterp/corefcn/max.cc liboctave/operators/mx-inlines.cc |
diffstat | 3 files changed, 8 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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]);
--- 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; \ } \