Mercurial > hg > octave-nkf
diff src/data.cc @ 7815:a41df65f3f00
Add some single precision test code and fix resulting bugs
author | David Bateman <dbateman@free.fr> |
---|---|
date | Wed, 28 May 2008 01:03:35 +0200 |
parents | 87865ed7405f |
children | e998e81224b5 |
line wrap: on
line diff
--- a/src/data.cc +++ b/src/data.cc @@ -702,8 +702,30 @@ %!assert (size (atan2 (rand (2, 3, 4), 1)), [2, 3, 4]) %!assert (size (atan2 (1, rand (2, 3, 4))), [2, 3, 4]) %!assert (size (atan2 (1, 2)), [1, 1]) + +%!test +%! rt2 = sqrt (2); +%! rt3 = sqrt (3); +%! v = [0, pi/6, pi/4, pi/3, -pi/3, -pi/4, -pi/6, 0]; +%! y = [0, rt3, 1, rt3, -rt3, -1, -rt3, 0]; +%! x = [1, 3, 1, 1, 1, 1, 3, 1]; +%! assert(atan2 (y, x), v, sqrt (eps)); + +%!test +%! rt2 = sqrt (2); +%! rt3 = sqrt (3); +%! v = single([0, pi/6, pi/4, pi/3, -pi/3, -pi/4, -pi/6, 0]); +%! y = single([0, rt3, 1, rt3, -rt3, -1, -rt3, 0]); +%! x = single([1, 3, 1, 1, 1, 1, 3, 1]); +%! assert(atan2 (y, x), v, sqrt (eps('single'))); + +%!error <Invalid call to atan2.*> atan2 (); +%!error <Invalid call to atan2.*> atan2 (1, 2, 3); + */ + + DEFUN (hypot, args, , "-*- texinfo -*-\n\ @deftypefn {Mapping Function} {} hypot (@var{x}, @var{y})\n\ @@ -1249,6 +1271,7 @@ int nargin = args.length (); \ \ bool isnative = false; \ + bool isdouble = false; \ \ if (nargin > 1 && args(nargin - 1).is_string ()) \ { \ @@ -1258,7 +1281,9 @@ { \ if (str == "native") \ isnative = true; \ - else if (str != "double") /* Ignore double as no single type */ \ + else if (str == "double") \ + isdouble = true; \ + else \ error ("sum: unrecognized string argument"); \ nargin --; \ } \ @@ -1308,7 +1333,7 @@ { \ error (#FCN, ": invalid char type"); \ } \ - else if (arg.is_single_type ()) \ + else if (!isdouble && arg.is_single_type ()) \ { \ if (arg.is_complex_type ()) \ { \ @@ -1346,7 +1371,7 @@ return retval; \ } \ } \ - else if (arg.is_single_type ()) \ + else if (!isdouble && arg.is_single_type ()) \ { \ if (arg.is_real_type ()) \ { \ @@ -1489,6 +1514,28 @@ DATA_REDUCTION (cumprod); } +/* + +%!assert (cumprod ([1, 2, 3]), [1, 2, 6]); +%!assert (cumprod ([-1; -2; -3]), [-1; 2; -6]); +%!assert (cumprod ([i, 2+i, -3+2i, 4]), [i, -1+2i, -1-8i, -4-32i]); +%!assert (cumprod ([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i]), [1, 2, 3; i, 4i, 9i; -1+i, -8+8i, -27+27i]); + +%!assert (cumprod (single([1, 2, 3])), single([1, 2, 6])); +%!assert (cumprod (single([-1; -2; -3])), single([-1; 2; -6])); +%!assert (cumprod (single([i, 2+i, -3+2i, 4])), single([i, -1+2i, -1-8i, -4-32i])); +%!assert (cumprod (single([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i])), single([1, 2, 3; i, 4i, 9i; -1+i, -8+8i, -27+27i])); + +%!error <Invalid call to cumprod.*> cumprod (); + +%!assert (cumprod ([2, 3; 4, 5], 1), [2, 3; 8, 15]); +%!assert (cumprod ([2, 3; 4, 5], 2), [2, 6; 4, 20]); + +%!assert (cumprod (single([2, 3; 4, 5]), 1), single([2, 3; 8, 15])); +%!assert (cumprod (single([2, 3; 4, 5]), 2), single([2, 6; 4, 20])); + + */ + DEFUN (cumsum, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} cumsum (@var{x}, @var{dim})\n\ @@ -1503,6 +1550,28 @@ DATA_REDUCTION (cumsum); } +/* + +%!assert (cumsum ([1, 2, 3]), [1, 3, 6]); +%!assert (cumsum ([-1; -2; -3]), [-1; -3; -6]); +%!assert (cumsum ([i, 2+i, -3+2i, 4]), [i, 2+2i, -1+4i, 3+4i]); +%!assert (cumsum ([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i]), [1, 2, 3; 1+i, 2+2i, 3+3i; 2+2i, 4+4i, 6+6i]); + +%!assert (cumsum (single([1, 2, 3])), single([1, 3, 6])); +%!assert (cumsum (single([-1; -2; -3])), single([-1; -3; -6])); +%!assert (cumsum (single([i, 2+i, -3+2i, 4])), single([i, 2+2i, -1+4i, 3+4i])); +%!assert (cumsum (single([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i])), single([1, 2, 3; 1+i, 2+2i, 3+3i; 2+2i, 4+4i, 6+6i])); + +%!error <Invalid call to cumsum.*> cumsum (); + +%!assert (cumsum ([1, 2; 3, 4], 1), [1, 2; 4, 6]); +%!assert (cumsum ([1, 2; 3, 4], 2), [1, 3; 3, 7]); + +%!assert (cumsum (single([1, 2; 3, 4]), 1), single([1, 2; 4, 6])); +%!assert (cumsum (single([1, 2; 3, 4]), 2), single([1, 3; 3, 7])); + + */ + DEFUN (diag, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} diag (@var{v}, @var{k})\n\ @@ -1598,6 +1667,52 @@ DATA_REDUCTION (prod); } +/* + +%!assert (prod ([1, 2, 3]), 6); +%!assert (prod ([-1; -2; -3]), -6); +%!assert (prod ([i, 2+i, -3+2i, 4]), -4 - 32i); +%!assert (prod ([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i]), [-1+i, -8+8i, -27+27i]); + +%!assert (prod (single([1, 2, 3])), single(6)); +%!assert (prod (single([-1; -2; -3])), single(-6)); +%!assert (prod (single([i, 2+i, -3+2i, 4])), single(-4 - 32i)); +%!assert (prod (single([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i])), single([-1+i, -8+8i, -27+27i])); + +%!error <Invalid call to prod.*> prod (); + +%!assert (prod ([1, 2; 3, 4], 1), [3, 8]); +%!assert (prod ([1, 2; 3, 4], 2), [2; 12]); +%!assert (prod (zeros (1, 0)), 1); +%!assert (prod (zeros (1, 0), 1), zeros (1, 0)); +%!assert (prod (zeros (1, 0), 2), 1); +%!assert (prod (zeros (0, 1)), 1); +%!assert (prod (zeros (0, 1), 1), 1); +%!assert (prod (zeros (0, 1), 2), zeros (0, 1)); +%!assert (prod (zeros (2, 0)), zeros (1, 0)); +%!assert (prod (zeros (2, 0), 1), zeros (1, 0)); +%!assert (prod (zeros (2, 0), 2), [1; 1]); +%!assert (prod (zeros (0, 2)), [1, 1]); +%!assert (prod (zeros (0, 2), 1), [1, 1]); +%!assert (prod (zeros (0, 2), 2), zeros(0, 1)); + +%!assert (prod (single([1, 2; 3, 4]), 1), single([3, 8])); +%!assert (prod (single([1, 2; 3, 4]), 2), single([2; 12])); +%!assert (prod (zeros (1, 0, 'single')), single(1)); +%!assert (prod (zeros (1, 0, 'single'), 1), zeros (1, 0, 'single')); +%!assert (prod (zeros (1, 0, 'single'), 2), single(1)); +%!assert (prod (zeros (0, 1, 'single')), single(1)); +%!assert (prod (zeros (0, 1, 'single'), 1), single(1)); +%!assert (prod (zeros (0, 1, 'single'), 2), zeros (0, 1, 'single')); +%!assert (prod (zeros (2, 0, 'single')), zeros (1, 0, 'single')); +%!assert (prod (zeros (2, 0, 'single'), 1), zeros (1, 0, 'single')); +%!assert (prod (zeros (2, 0, 'single'), 2), single([1; 1])); +%!assert (prod (zeros (0, 2, 'single')), single([1, 1])); +%!assert (prod (zeros (0, 2, 'single'), 1), single([1, 1])); +%!assert (prod (zeros (0, 2, 'single'), 2), zeros(0, 1, 'single')); + + */ + static octave_value do_cat (const octave_value_list& args, std::string fname) { @@ -2280,6 +2395,58 @@ %!assert (sum(int8([127,10,-20])), 117); %!assert (sum(int8([127,10,-20]),'native'), int8(107)); +%!assert(sum ([1, 2, 3]), 6) +%!assert(sum ([-1; -2; -3]), -6); +%!assert(sum ([i, 2+i, -3+2i, 4]), 3+4i); +%!assert(sum ([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i]), [2+2i, 4+4i, 6+6i]); + +%!assert(sum (single([1, 2, 3])), single(6)) +%!assert(sum (single([-1; -2; -3])), single(-6)); +%!assert(sum (single([i, 2+i, -3+2i, 4])), single(3+4i)); +%!assert(sum (single([1, 2, 3; i, 2i, 3i; 1+i, 2+2i, 3+3i])), single([2+2i, 4+4i, 6+6i])); + +%!error <Invalid call to sum.*> sum (); + +%!assert (sum ([1, 2; 3, 4], 1), [4, 6]); +%!assert (sum ([1, 2; 3, 4], 2), [3; 7]); +%!assert (sum (zeros (1, 0)), 0); +%!assert (sum (zeros (1, 0), 1), zeros(1, 0)); +%!assert (sum (zeros (1, 0), 2), 0); +%!assert (sum (zeros (0, 1)), 0); +%!assert (sum (zeros (0, 1), 1), 0); +%!assert (sum (zeros (0, 1), 2), zeros(0, 1)); +%!assert (sum (zeros (2, 0)), zeros(1, 0)); +%!assert (sum (zeros (2, 0), 1), zeros(1, 0)); +%!assert (sum (zeros (2, 0), 2), [0; 0]); +%!assert (sum (zeros (0, 2)), [0, 0]); +%!assert (sum (zeros (0, 2), 1), [0, 0]); +%!assert (sum (zeros (0, 2), 2), zeros(0, 1)); +%!assert (sum (zeros (2, 2, 0, 3)), zeros(1, 2, 0, 3)); +%!assert (sum (zeros (2, 2, 0, 3), 2), zeros(2, 1, 0, 3)); +%!assert (sum (zeros (2, 2, 0, 3), 3), zeros(2, 2, 1, 3)); +%!assert (sum (zeros (2, 2, 0, 3), 4), zeros(2, 2, 0)); +%!assert (sum (zeros (2, 2, 0, 3), 7), zeros(2, 2, 0, 3)); + +%!assert (sum (single([1, 2; 3, 4]), 1), single([4, 6])); +%!assert (sum (single([1, 2; 3, 4]), 2), single([3; 7])); +%!assert (sum (zeros (1, 0, 'single')), single(0)); +%!assert (sum (zeros (1, 0, 'single'), 1), zeros(1, 0, 'single')); +%!assert (sum (zeros (1, 0, 'single'), 2), single(0)); +%!assert (sum (zeros (0, 1, 'single')), single(0)); +%!assert (sum (zeros (0, 1, 'single'), 1), single(0)); +%!assert (sum (zeros (0, 1, 'single'), 2), zeros(0, 1, 'single')); +%!assert (sum (zeros (2, 0, 'single')), zeros(1, 0, 'single')); +%!assert (sum (zeros (2, 0, 'single'), 1), zeros(1, 0, 'single')); +%!assert (sum (zeros (2, 0, 'single'), 2), single([0; 0])); +%!assert (sum (zeros (0, 2, 'single')), single([0, 0])); +%!assert (sum (zeros (0, 2, 'single'), 1), single([0, 0])); +%!assert (sum (zeros (0, 2, 'single'), 2), zeros(0, 1, 'single')); +%!assert (sum (zeros (2, 2, 0, 3, 'single')), zeros(1, 2, 0, 3, 'single')); +%!assert (sum (zeros (2, 2, 0, 3, 'single'), 2), zeros(2, 1, 0, 3, 'single')); +%!assert (sum (zeros (2, 2, 0, 3, 'single'), 3), zeros(2, 2, 1, 3, 'single')); +%!assert (sum (zeros (2, 2, 0, 3, 'single'), 4), zeros(2, 2, 0, 'single')); +%!assert (sum (zeros (2, 2, 0, 3, 'single'), 7), zeros(2, 2, 0, 3, 'single')); + */ DEFUN (sumsq, args, , @@ -2301,6 +2468,26 @@ DATA_REDUCTION (sumsq); } +/* + +%!assert(sumsq ([1, 2, 3]), 14) +%!assert(sumsq ([-1; -2; 4i]), 21); +%!assert(sumsq ([1, 2, 3; 2, 3, 4; 4i, 6i, 2]), [21, 49, 29]); + +%!assert(sumsq (single([1, 2, 3])), single(14)) +%!assert(sumsq (single([-1; -2; 4i])), single(21)); +%!assert(sumsq (single([1, 2, 3; 2, 3, 4; 4i, 6i, 2])), single([21, 49, 29])); + +%!error <Invalid call to sumsq.*> sumsq (); + +%!assert (sumsq ([1, 2; 3, 4], 1), [10, 20]); +%!assert (sumsq ([1, 2; 3, 4], 2), [5; 25]); + +%!assert (sumsq (single([1, 2; 3, 4]), 1), single([10, 20])); +%!assert (sumsq (single([1, 2; 3, 4]), 2), single([5; 25])); + + */ + DEFUN (islogical, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} islogical (@var{x})\n\ @@ -2319,6 +2506,20 @@ DEFALIAS (isbool, islogical); +/* + +%!assert (islogical(true), true) +%!assert (islogical(false), true) +%!assert (islogical([true, false]), true) +%!assert (islogical(1), false) +%!assert (islogical(1i), false) +%!assert (islogical([1,1]), false) +%!assert (islogical(single(1)), false) +%!assert (islogical(single(1i)), false) +%!assert (islogical(single([1,1])), false) + + */ + DEFUN (isinteger, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} isinteger (@var{x})\n\