changeset 26235:00924e6e513e

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.
author Guillaume Flandin <guillaume.offline@gmail.com>
date Fri, 14 Dec 2018 09:02:49 -0800
parents 23b56a61c918
children 73512571d85a
files scripts/set/ismember.m
diffstat 1 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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])