# HG changeset patch # User Guillaume Flandin # Date 1544806969 28800 # Node ID 00924e6e513e83d4cf4377c40f888ea41694e605 # Parent 23b56a61c91880516c33bacf7c7a9209add11e7d ismember.m: Handle mixed char/numeric inputs in Matlab compatible way (bug #53924). * ismember.m: If inputs are a mix of char and numeric, convert char input to double. Add BIST tests for behavior. diff -r 23b56a61c918 -r 00924e6e513e scripts/set/ismember.m --- a/scripts/set/ismember.m Thu Dec 13 23:23:54 2018 -0800 +++ b/scripts/set/ismember.m Fri Dec 14 09:02:49 2018 -0800 @@ -108,6 +108,13 @@ a = {a}; endif + ## Another Matlab-compatible behavior. See bug #53924. + if (isnumeric (a) && ischar (s)) + s = double (s); + elseif (ischar (a) && isnumeric (s)) + a = double (a); + endif + [a, s] = validsetargs ("ismember", a, s, varargin{:}); by_rows = nargin == 3; @@ -165,12 +172,15 @@ %!assert (ismember ("abc", {"abc", "def"}), true) %!assert (isempty (ismember ([], [1, 2])), true) %!assert (isempty (ismember ({}, {'a', 'b'})), true) +%!assert (isempty (ismember ([], 'a')), true) %!assert (ismember ("", {"abc", "def"}), false) +%!assert (ismember (1, 'abc'), false) +%!assert (ismember ("abc", 1), [false false false]) +%!assert (ismember ("abc", 99), [false false true]) %!fail ("ismember ([], {1, 2})") %!fail ("ismember ({[]}, {1, 2})") %!fail ("ismember ({}, {1, 2})") %!fail ("ismember ({1}, {'1', '2'})") -%!fail ("ismember (1, 'abc')") %!fail ("ismember ({'1'}, {'1' '2'},'rows')") %!fail ("ismember ([1 2 3], [5 4 3 1], 'rows')") %!assert (ismember ({"foo", "bar"}, {"foobar"}), [false false])