comparison scripts/general/isequal.m @ 18820:ff613b6a7b6f

Add tests for empty value and correct alphanumerical value comparision of isequal (bug #42408). * isequal.m: Add new #!tests.
author Kai T. Ohlhus <k.ohlhus@gmail.com>
date Fri, 23 May 2014 16:28:37 +0200
parents d63878346099
children db92e7e28e1f
comparison
equal deleted inserted replaced
18819:1f170b211be3 18820:ff613b6a7b6f
31 retval = __isequal__ (false, x1, varargin{:}); 31 retval = __isequal__ (false, x1, varargin{:});
32 32
33 endfunction 33 endfunction
34 34
35 35
36 ## test empty input
37 %!assert (isequal ([], []), true)
38 %!assert (isequal ([], [], 1), false)
39 %!assert (isequal ([], 1, []), false)
40 %!assert (isequal (1, [], []), false)
41 %!assert (isequal (1, [], []), false)
42
36 ## test size and shape 43 ## test size and shape
37 %!assert (isequal ([1,2,3,4],[1,2,3,4]), true) 44 %!assert (isequal ([1,2,3,4], [1,2,3,4]), true)
38 %!assert (isequal ([1;2;3;4],[1;2;3;4]), true) 45 %!assert (isequal ([1;2;3;4], [1;2;3;4]), true)
39 %!assert (isequal ([1,2,3,4],[1;2;3;4]), false) 46 %!assert (isequal ([1,2,3,4], [1;2;3;4]), false)
40 %!assert (isequal ([1,2,3,4],[1,2;3,4]), false) 47 %!assert (isequal ([1,2,3,4], [1,2;3,4]), false)
41 %!assert (isequal ([1,2,3,4],[1,3;2,4]), false) 48 %!assert (isequal ([1,2,3,4], [1,3;2,4]), false)
42 49
43 %!test 50 %!test
44 %! A = 1:8; 51 %! A = 1:8;
45 %! B = reshape (A, 2, 2, 2); 52 %! B = reshape (A, 2, 2, 2);
46 %! assert (isequal (A, B), false); 53 %! assert (isequal (A, B), false);
47
48 %!test 54 %!test
49 %! A = reshape (1:8, 2, 2, 2); 55 %! A = reshape (1:8, 2, 2, 2);
50 %! B = A; 56 %! B = A;
51 %! assert (isequal (A, B), true); 57 %! assert (isequal (A, B), true);
52
53 %!test 58 %!test
54 %! A = reshape (1:8, 2, 4); 59 %! A = reshape (1:8, 2, 4);
55 %! B = reshape (A, 2, 2, 2); 60 %! B = reshape (A, 2, 2, 2);
56 %! assert (isequal (A, B), false); 61 %! assert (isequal (A, B), false);
57 62
58 ## test for equality 63 ## test all numeric built-in primitives
59 %!assert (isequal ([1,2,3,4],[1,2,3,4]), true) 64 %!assert (isequal (false, logical (0), char (0),
60 %!assert (isequal (['a','b','c','d'],['a','b','c','d']), true) 65 %! int8 (0), int16 (0), int32 (0), int64 (0),
61 ## Test multi-line strings 66 %! uint8 (0), uint16 (0), uint32 (0), uint64 (0),
62 %!assert (isequal (["test";"strings"],["test";"strings"],["test";"strings"]), true) 67 %! double (0), single (0),
63 ## test for inequality 68 %! double (complex (0,0)), single (complex (0,0))),
64 %!assert (isequal ([1,2,3,4],[1;2;3;4]), false) 69 %! true)
65 %!assert (isequal ({1,2,3,4},[1,2,3,4]), false) 70 %!assert (isequal (true, logical (1), char (1),
66 %!assert (isequal ([1,2,3,4],{1,2,3,4}), false) 71 %! int8 (1), int16 (1), int32 (1), int64 (1),
67 %!assert (isequal ([1,2,NaN,4],[1,2,NaN,4]), false) 72 %! uint8 (1), uint16 (1), uint32 (1), uint64 (1),
68 %!assert (isequal (['a','b','c','d'],['a';'b';'c';'d']), false) 73 %! double (1), single (1),
69 %!assert (isequal ({'a','b','c','d'},{'a';'b';'c';'d'}), false) 74 %! double (complex (1,0)), single (complex (1,0))),
70 ## test for equality (struct) 75 %! true)
71 %!assert (isequal (struct ('a',1,'b',2),struct ('a',1,'b',2)), true) 76
72 %!assert (isequal (struct ('a',1,'b',2),struct ('a',1,'b',2),struct ('a',1,'b',2)), true) 77 ## test characters and strings
73 %!assert (isequal (struct ('a',"abc",'b',2),struct ('a',"abc",'b',2)), true) 78 %!assert (isequal ('a', "a"), true)
74 ## test for inequality (struct) 79 %!assert (isequal ("abab", ["a", "b", "a", "b"]), true)
75 %!assert (isequal (struct ('a',NaN,'b',2),struct ('a',NaN,'b',2),struct ('a',NaN,'b',2)), false) 80 %!assert (isequal (["a","b","c","d"], ["a","b","c","d"]), true)
81 %!assert (isequal (["test ";"strings"], ["test ";"strings"],
82 %! ["test ";"strings"]), true)
83 %!assert (isequal (["a","b","c","d"], ["a";"b";"c";"d"]), false)
84
85 ## test function_handle
86 %!test
87 %! fcn = @(x) x.^2;
88 %! assert (isequal (fcn, fcn), true);
89 %! assert (isequal (fcn, @(x) x.^2), false);
90 %! assert (isequal (@(x) x.^2, fcn), false);
91
92 ## test structures
93 %!assert (isequal (struct ([]),struct ([])), true)
94 %!assert (isequal (struct ("a",1), struct ("a",1)), true)
95 %!assert (isequal (struct ("a",1), struct ("a",2)), false)
96 %!assert (isequal (struct ("a",1), struct ("b",1)), false)
97 %!assert (isequal (struct ("a",1,"b",2), struct ("a",1,"b",2)), true)
98 %!assert (isequal (struct ("a",1,"b",2), struct ("b",2,"a",1)), true)
99 %!assert (isequal (struct ("a",1,"b",2), struct ("a",1,"b",2),
100 %! struct ("a",1,"b",2)), true)
101 %!assert (isequal (struct ("a","abc","b",2), struct ("a","abc","b",2)), true)
102
103 ## recursive structure
104 %!test
105 %! x.a = "a1";
106 %! x.b.a = "ba1";
107 %! x.b.b = "bb1";
108 %! assert (isequal (x, x, x), true);
109 %! y = x;
110 %! y.b.b = "bb2";
111 %! assert (isequal (x, y), false);
112 %! y = x;
113 %! y.b = rmfield (y.b, "b");
114 %! y.b.b.a = "bba1";
115 %! assert (isequal (x, y), false);
116
117 ## test cells
118 %!assert (isequal (cell (1,1), cell (1,1)), true)
119 %!assert (isequal (cell (1,1), cell (1,2)), false)
120 %!assert (isequal ({"a",1}, {"a",1}), true)
121 %!assert (isequal ({"a",1}, {"a",2}), false)
122 %!assert (isequal ({"a",1}, {"b",1}), false)
123 %!assert (isequal ({"a",1,"b",2}, {"a",1,"b",2}), true)
124 %!assert (isequal ({"a",1,"b",2}, {"b",2,"a",1}), false)
125 %!assert (isequal ({"a",1,"b",2}, {"a",1,"b",2}, {"a",1,"b",2}), true)
126 %!assert (isequal ({"a","abc","b",2}, {"a","abc","b",2}), true)
127 %!assert (isequal ({"a","b","c","d"}, {"a","b","c","d"}), true)
128 %!assert (isequal ({"a","b","c","d"}, {"a";"b";"c";"d"}), false)
129 %!assert (isequal (["a","b","c","d"], {"a","b","c","d"}), false)
130
131 ## recursive cell
132 %!test
133 %! x = cell (1,3);
134 %! x{1} = {[1], [1 2]};
135 %! x{2} = true;
136 %! x{3} = {{"hello"}, {"world"}};
137 %! assert (isequal (x, x));
138 %! y = x;
139 %! y{3}{1}{1} = "goodbye";
140 %! assert (isequal (x, y), false);
76 141
77 ## test for sparse matrices 142 ## test for sparse matrices
143 %!assert (isequal (sparse ([]), []), true)
144 %!assert (isequal ([], sparse ([])), true)
78 %!assert (isequal (sparse (0,1), sparse (0,1)), true) 145 %!assert (isequal (sparse (0,1), sparse (0,1)), true)
146 %!assert (isequal (sparse (0,1), zeros (0,1)), true)
147 %!assert (isequal (sparse (2,2), sparse (2,2)), true)
148 %!assert (isequal (zeros (2,2), sparse (2,2)), true)
149 %!assert (isequal (speye (1), eye (1)), true)
150 %!assert (isequal (eye (300), speye (300)), true)
79 %!assert (isequal (sparse (0,1), sparse (1,0)), false) 151 %!assert (isequal (sparse (0,1), sparse (1,0)), false)
80 %!assert (isequal (sparse (2, 2), sparse (2, 2)), true)
81 152
82 ## Input validation 153 ## test NaN
154 %!assert (isequal (NaN, NaN), false)
155 %!assert (isequal (NaN, Inf), false)
156 %!assert (isequal (NaN, 1.0), false)
157 %!assert (isequal ([1,2,NaN,4], [1,2,NaN,4]), false)
158 %!assert (isequal (struct ("a",NaN,"b",2), struct ("a",NaN,"b",2),
159 %! struct ("a",NaN,"b",2)), false)
160
161 ## test input validation
83 %!error isequal () 162 %!error isequal ()
84 %!error isequal (1) 163 %!error isequal (1)
164 %!error isequal ([1,1])
85 165