Mercurial > octave
changeset 20890:ef9b2a88fbb5 stable
Fixed isequal for comparison of objects with overridden size (bug #44334)
* scripts/general/private/__isequal__.m: Removed comparison of built-in size
(and ndims) with overridden size (and ndims). The algorithms compares the
built-in values now.
* test/classes/@SizeTester/SizeTester.m, test/classes/@SizeTester/size.m,
test/classes/@SizeTester/numel.m: Implemented test class, which overrides
its public size and numel in a consistent way.
* test/classes/classes.tst: Added test cases for this bug and other related
bugs.
author | Oliver Heimlich <oheim@posteo.de> |
---|---|
date | Mon, 14 Dec 2015 12:19:38 +0000 |
parents | 9851a296cf87 |
children | 9fe6db1dcc46 |
files | scripts/general/private/__isequal__.m test/classes/@SizeTester/SizeTester.m test/classes/@SizeTester/numel.m test/classes/@SizeTester/size.m test/classes/classes.tst |
diffstat | 5 files changed, 64 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/general/private/__isequal__.m Fri Aug 21 13:05:52 2015 -0400 +++ b/scripts/general/private/__isequal__.m Mon Dec 14 12:19:38 2015 +0000 @@ -64,7 +64,7 @@ if (t) ## Test that everything has the same number of dimensions. - t = all (ndims (x) == cellfun ("ndims", varargin)); + t = all (builtin ("ndims", x) == cellfun ("ndims", varargin)); endif if (t) @@ -72,7 +72,7 @@ nd = ndims (x); k = 1; do - t = all (size (x,k) == cellfun ("size", varargin, k)); + t = all (builtin ("size", x, k) == cellfun ("size", varargin, k)); until (!t || k++ == nd); endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/classes/@SizeTester/SizeTester.m Mon Dec 14 12:19:38 2015 +0000 @@ -0,0 +1,6 @@ +function x = SizeTester (desired_size) + + x = struct ("desired_size", desired_size); + x = class (x, "SizeTester"); + +endfunction
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/classes/@SizeTester/numel.m Mon Dec 14 12:19:38 2015 +0000 @@ -0,0 +1,5 @@ +function n = numel (this) + + n = prod (this.desired_size); + +endfunction
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/classes/@SizeTester/size.m Mon Dec 14 12:19:38 2015 +0000 @@ -0,0 +1,5 @@ +function s = size (this) + + s = this.desired_size; + +endfunction
--- a/test/classes/classes.tst Fri Aug 21 13:05:52 2015 -0400 +++ b/test/classes/classes.tst Mon Dec 14 12:19:38 2015 +0000 @@ -361,3 +361,49 @@ %% Trying to change to CPrecendenceTester3 > Snork %!error D = CPrecedenceTester3 (1); +############################################## +## Testing overridden size+numel method ## +## (builtin size method and similar methods ## +## use the size of the struct container) ## +############################################## + +%!shared st +%!test st = SizeTester ([1 1]); +%! assert (isequal (size (st), [1 1])) +%! assert (isequal (numel (st), 1)) +%!assert (isequal (ndims (st), 2)) +%!assert (isequal (rows (st), 1)) +%!assert (isequal (columns (st), 1)) +%!assert (isequal (st, st)) +%!assert (isscalar (st)) +%!assert (isvector (st)) + +%!test st = SizeTester ([1 2]); +%! assert (isequal (size (st), [1 2])) +%! assert (isequal (numel (st), 2)) +%!assert (isequal (ndims (st), 2)) +%!assert (isequal (rows (st), 1)) +%!xtest assert (isequal (columns (st), 2)) +%!assert (isequal (st, st)) # bug #44334 +%!xtest assert (not (isscalar (st))) # bug #44498 +%!assert (isvector (st)) + +%!test st = SizeTester ([2 3]); +%! assert (isequal (size (st), [2 3])) +%! assert (isequal (numel (st), 6)) +%!assert (isequal (ndims (st), 2)) +%!xtest assert (isequal (rows (st), 2)) +%!xtest assert (isequal (columns (st), 3)) +%!assert (isequal (st, st)) # bug #44334 +%!xtest assert (not (isscalar (st))) # bug #44498 +%!xtest assert (not (isvector (st))) # bug #44498 + +%!test st = SizeTester ([2 3 4]); +%! assert (isequal (size (st), [2 3 4])) +%! assert (isequal (numel (st), 24)) +%!xtest assert (isequal (ndims (st), 3)) +%!xtest assert (isequal (rows (st), 2)) +%!xtest assert (isequal (columns (st), 3)) +%!assert (isequal (st, st)) # bug #44334 +%!xtest assert (not (isscalar (st))) # bug #44498 +%!xtest assert (not (isvector (st))) # bug #44498