Mercurial > octave-nkf
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 |