# HG changeset patch # User Rik # Date 1301709194 25200 # Node ID 3b0eb443c5199da7d0e97e043c24c80a89269db7 # Parent 0f71b9639207c469c96a8f287405bf56597d432e Fix orientation of initial conditions vector for filter (bug #32741). Revamp test vectors. diff -r 0f71b9639207 -r 3b0eb443c519 src/ChangeLog --- a/src/ChangeLog Fri Apr 01 09:37:58 2011 -0700 +++ b/src/ChangeLog Fri Apr 01 18:53:14 2011 -0700 @@ -1,3 +1,8 @@ +2011-04-01 Rik + + * DLD-FUNCTIONS/filter.cc: Fix orientation of initial conditions vector + (bug #32741). Revamp test vectors. + 2011-04-01 Rik * DLD-FUNCTIONS/__fltk_uigetfile__.cc, DLD-FUNCTIONS/__init_fltk__.cc: diff -r 0f71b9639207 -r 3b0eb443c519 src/DLD-FUNCTIONS/filter.cc --- a/src/DLD-FUNCTIONS/filter.cc Fri Apr 01 09:37:58 2011 -0700 +++ b/src/DLD-FUNCTIONS/filter.cc Fri Apr 01 18:53:14 2011 -0700 @@ -64,10 +64,6 @@ octave_idx_type ab_len = a_len > b_len ? a_len : b_len; - b.resize (dim_vector (ab_len, 1), 0.0); - if (a_len > 1) - a.resize (dim_vector (ab_len, 1), 0.0); - T norm = a (0); if (norm == static_cast(0.0)) @@ -464,7 +460,7 @@ si = args(3).float_complex_array_value (); if (si_is_vector) - si = si.reshape (dim_vector (si.numel (), 1)); + si = si.reshape (dim_vector (1, si.numel ())); } if (! error_state) @@ -521,7 +517,7 @@ si = args(3).complex_array_value (); if (si_is_vector) - si = si.reshape (dim_vector (si.numel (), 1)); + si = si.reshape (dim_vector (1, si.numel ())); } if (! error_state) @@ -581,7 +577,7 @@ si = args(3).float_array_value (); if (si_is_vector) - si = si.reshape (dim_vector (si.numel (), 1)); + si = si.reshape (dim_vector (1, si.numel ())); } if (! error_state) @@ -638,7 +634,7 @@ si = args(3).array_value (); if (si_is_vector) - si = si.reshape (dim_vector (si.numel (), 1)); + si = si.reshape (dim_vector (1, si.numel ())); } if (! error_state) @@ -694,58 +690,59 @@ %!test %! a = [1 1]; %! b = [1 1]; -%! x = zeros(1,10); x(1) = 1; -%! assert(all(filter(b, [1], x ) == [1 1 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, [1], x.') == [1 1 0 0 0 0 0 0 0 0].')) -%! assert(all(filter(b.', [1], x ) == [1 1 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b.', [1], x.') == [1 1 0 0 0 0 0 0 0 0].')) -%! assert(all(filter([1], a, x ) == [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1] )) -%! assert(all(filter([1], a, x.') == [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1].')) -%! assert(all(filter([1], a.', x ) == [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1] )) -%! assert(all(filter([1], a.', x.') == [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1].')) -%! assert(all(filter(b, a, x ) == [1 0 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b.', a, x ) == [1 0 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, a.', x ) == [1 0 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b.', a, x ) == [1 0 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, a, x.') == [1 0 0 0 0 0 0 0 0 0].')) -%! assert(all(filter(b.', a, x.') == [1 0 0 0 0 0 0 0 0 0].')) -%! assert(all(filter(b, a.', x.') == [1 0 0 0 0 0 0 0 0 0].')) -%! assert(all(filter(b.', a, x.') == [1 0 0 0 0 0 0 0 0 0].')) +%! x = zeros (1,10); x(1) = 1; +%! assert(filter(b, [1], x ), [1 1 0 0 0 0 0 0 0 0]); +%! assert(filter(b, [1], x.'), [1 1 0 0 0 0 0 0 0 0].'); +%! assert(filter(b.', [1], x ), [1 1 0 0 0 0 0 0 0 0] ); +%! assert(filter(b.', [1], x.'), [1 1 0 0 0 0 0 0 0 0].'); +%! assert(filter([1], a, x ), [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1] ); +%! assert(filter([1], a, x.'), [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1].'); +%! assert(filter([1], a.', x ), [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1] ); +%! assert(filter([1], a.', x.'), [+1 -1 +1 -1 +1 -1 +1 -1 +1 -1].'); +%! assert(filter(b, a, x ), [1 0 0 0 0 0 0 0 0 0] ); +%! assert(filter(b.', a, x ), [1 0 0 0 0 0 0 0 0 0] ); +%! assert(filter(b, a.', x ), [1 0 0 0 0 0 0 0 0 0] ); +%! assert(filter(b.', a, x ), [1 0 0 0 0 0 0 0 0 0] ); +%! assert(filter(b, a, x.'), [1 0 0 0 0 0 0 0 0 0].'); +%! assert(filter(b.', a, x.'), [1 0 0 0 0 0 0 0 0 0].'); +%! assert(filter(b, a.', x.'), [1 0 0 0 0 0 0 0 0 0].'); +%! assert(filter(b.', a, x.'), [1 0 0 0 0 0 0 0 0 0].'); %! %!test %! r = sqrt(1/2)*(1+i); %! a = a*r; %! b = b*r; -%! assert(all(filter(b, [1], x ) == r*[1 1 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, [1], r*x ) == r*r*[1 1 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, [1], x.' ) == r*[1 1 0 0 0 0 0 0 0 0].' )) -%! assert(all(filter(b, a, x ) == [1 0 0 0 0 0 0 0 0 0] )) -%! assert(all(filter(b, a, r*x ) == r*[1 0 0 0 0 0 0 0 0 0] )) +%! assert(filter(b, [1], x ), r*[1 1 0 0 0 0 0 0 0 0] ); +%! assert(filter(b, [1], r*x ), r*r*[1 1 0 0 0 0 0 0 0 0] ); +%! assert(filter(b, [1], x.' ), r*[1 1 0 0 0 0 0 0 0 0].' ); +%! assert(filter(b, a, x ), [1 0 0 0 0 0 0 0 0 0] ); +%! assert(filter(b, a, r*x ), r*[1 0 0 0 0 0 0 0 0 0] ); %! %!shared a, b, x, y, so %!test -%! a = [1,1]; b=[1,1]; -%! x = zeros(1,10); x(1) = 1; -%! [y, so] = filter(b, [1], x, [-1]); -%! assert(all(y == [0 1 0 0 0 0 0 0 0 0])) -%! assert(so,0) +%! a = [1,1]; b = [1,1]; +%! x = zeros (1,10); x(1) = 1; +%! [y, so] = filter (b, [1], x, [-1]); +%! assert(y, [0 1 0 0 0 0 0 0 0 0]); +%! assert(so,0); %! %!test -%! x = zeros(10,3); x(1,1)=-1; x(1,2)=1; -%! y0 = zeros(10,3); y0(1:2,1)=-1; y0(1:2,2)=1; -%! y = filter(b,[1],x); -%! assert(all(all(y==y0))) +%! x = zeros (10,3); x(1,1)=-1; x(1,2)=1; +%! y0 = zeros (10,3); y0(1:2,1)=-1; y0(1:2,2)=1; +%! y = filter (b, [1], x); +%! assert(y,y0); %! %!test %! a = [1,1]; b=[1,1]; -%! x = zeros(4,4,2); x(1,1:4,1) = +1; x(1,1:4,2) = -1; -%! y0 = zeros(4,4,2); y0(1:2,1:4,1) = +1; y0(1:2,1:4,2) = -1; -%! y = filter(b, [1], x); -%! assert(all(all(all(y==y0)))) +%! x = zeros (4,4,2); x(1,1:4,1) = +1; x(1,1:4,2) = -1; +%! y0 = zeros (4,4,2); y0(1:2,1:4,1) = +1; y0(1:2,1:4,2) = -1; +%! y = filter (b, [1], x); +%! assert(y, y0); %! -%!assert(filter(1,ones(10,1)/10,[]), []) -%!assert(filter(1,ones(10,1)/10,zeros(0,10)), zeros(0,10)) - +%!assert(filter (1, ones(10,1)/10, []), []); +%!assert(filter (1, ones(10,1)/10, zeros(0,10)), zeros(0,10)); +%!assert(filter([1, 3], [1], [1 2; 3 4; 5 6], [4, 5]), [5 7; 6 10; 14 18]); +%!assert(filter (1, ones(10,1)/10, single (1:5)), repmat (single (10), 1, 5)); %% Should put some tests of the "DIM" parameter in here. */