Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Side by Side Diff: packages/collection/test/equality_test.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Tests equality utilities. 5 // Tests equality utilities.
6 6
7 import "dart:collection"; 7 import "dart:collection";
8 import "package:collection/collection.dart"; 8 import "package:collection/collection.dart";
9 import "package:test/test.dart"; 9 import "package:test/test.dart";
10 10
(...skipping 14 matching lines...) Expand all
25 25
26 test("IterableEquality - LinkedSet", () { 26 test("IterableEquality - LinkedSet", () {
27 var l1 = new LinkedHashSet.from(list1); 27 var l1 = new LinkedHashSet.from(list1);
28 var l2 = new LinkedHashSet.from(list2); 28 var l2 = new LinkedHashSet.from(list2);
29 expect(const IterableEquality().equals(l1, l2), isTrue); 29 expect(const IterableEquality().equals(l1, l2), isTrue);
30 Equality iterId = const IterableEquality(const IdentityEquality()); 30 Equality iterId = const IterableEquality(const IdentityEquality());
31 expect(iterId.equals(l1, l2), isFalse); 31 expect(iterId.equals(l1, l2), isFalse);
32 }); 32 });
33 33
34 test("ListEquality", () { 34 test("ListEquality", () {
35 expect(const ListEquality().equals(list1, list2), 35 expect(const ListEquality().equals(list1, list2), isTrue);
36 isTrue);
37 Equality listId = const ListEquality(const IdentityEquality()); 36 Equality listId = const ListEquality(const IdentityEquality());
38 expect(listId.equals(list1, list2), isFalse); 37 expect(listId.equals(list1, list2), isFalse);
39 }); 38 });
40 39
41 test("ListInequality length", () { 40 test("ListInequality length", () {
42 var list4 = [o(1), o(2), o(3), o(4), o(5), o(6)]; 41 var list4 = [o(1), o(2), o(3), o(4), o(5), o(6)];
43 expect(const ListEquality().equals(list1, list4), 42 expect(const ListEquality().equals(list1, list4), isFalse);
44 isFalse);
45 expect(const ListEquality(const IdentityEquality()).equals(list1, list4), 43 expect(const ListEquality(const IdentityEquality()).equals(list1, list4),
46 isFalse); 44 isFalse);
47 }); 45 });
48 46
49 test("ListInequality value", () { 47 test("ListInequality value", () {
50 var list5 = [o(1), o(2), o(3), o(4), o(6)]; 48 var list5 = [o(1), o(2), o(3), o(4), o(6)];
51 expect(const ListEquality().equals(list1, list5), 49 expect(const ListEquality().equals(list1, list5), isFalse);
52 isFalse);
53 expect(const ListEquality(const IdentityEquality()).equals(list1, list5), 50 expect(const ListEquality(const IdentityEquality()).equals(list1, list5),
54 isFalse); 51 isFalse);
55 }); 52 });
56 53
57 test("UnorderedIterableEquality", () { 54 test("UnorderedIterableEquality", () {
58 expect(const UnorderedIterableEquality().equals(list1, list3), 55 expect(const UnorderedIterableEquality().equals(list1, list3), isTrue);
59 isTrue);
60 Equality uniterId = 56 Equality uniterId =
61 const UnorderedIterableEquality(const IdentityEquality()); 57 const UnorderedIterableEquality(const IdentityEquality());
62 expect(uniterId.equals(list1, list3), isFalse); 58 expect(uniterId.equals(list1, list3), isFalse);
63 }); 59 });
64 60
65 test("UnorderedIterableInequality length", () { 61 test("UnorderedIterableInequality length", () {
66 var list6 = [o(1), o(3), o(5), o(4), o(2), o(1)]; 62 var list6 = [o(1), o(3), o(5), o(4), o(2), o(1)];
67 expect(const UnorderedIterableEquality().equals(list1, list6), 63 expect(const UnorderedIterableEquality().equals(list1, list6), isFalse);
68 isFalse); 64 expect(
69 expect(const UnorderedIterableEquality(const IdentityEquality()) 65 const UnorderedIterableEquality(const IdentityEquality())
70 .equals(list1, list6), 66 .equals(list1, list6),
71 isFalse); 67 isFalse);
72 }); 68 });
73 69
74 test("UnorderedIterableInequality values", () { 70 test("UnorderedIterableInequality values", () {
75 var list7 = [o(1), o(3), o(5), o(4), o(6)]; 71 var list7 = [o(1), o(3), o(5), o(4), o(6)];
76 expect(const UnorderedIterableEquality().equals(list1, list7), 72 expect(const UnorderedIterableEquality().equals(list1, list7), isFalse);
77 isFalse); 73 expect(
78 expect(const UnorderedIterableEquality(const IdentityEquality()) 74 const UnorderedIterableEquality(const IdentityEquality())
79 .equals(list1, list7), 75 .equals(list1, list7),
80 isFalse); 76 isFalse);
81 }); 77 });
82 78
83 test("SetEquality", () { 79 test("SetEquality", () {
84 var set1 = new HashSet.from(list1); 80 var set1 = new HashSet.from(list1);
85 var set2 = new LinkedHashSet.from(list3); 81 var set2 = new LinkedHashSet.from(list3);
86 expect(const SetEquality().equals(set1, set2), isTrue); 82 expect(const SetEquality().equals(set1, set2), isTrue);
87 Equality setId = const SetEquality(const IdentityEquality()); 83 Equality setId = const SetEquality(const IdentityEquality());
88 expect(setId.equals(set1, set2), isFalse); 84 expect(setId.equals(set1, set2), isFalse);
89 }); 85 });
90 86
91 test("SetInequality length", () { 87 test("SetInequality length", () {
92 var list8 = [o(1), o(3), o(5), o(4), o(2), o(6)]; 88 var list8 = [o(1), o(3), o(5), o(4), o(2), o(6)];
93 var set1 = new HashSet.from(list1); 89 var set1 = new HashSet.from(list1);
94 var set2 = new LinkedHashSet.from(list8); 90 var set2 = new LinkedHashSet.from(list8);
95 expect(const SetEquality().equals(set1, set2), 91 expect(const SetEquality().equals(set1, set2), isFalse);
96 isFalse);
97 expect(const SetEquality(const IdentityEquality()).equals(set1, set2), 92 expect(const SetEquality(const IdentityEquality()).equals(set1, set2),
98 isFalse); 93 isFalse);
99 }); 94 });
100 95
101 test("SetInequality value", () { 96 test("SetInequality value", () {
102 var list7 = [o(1), o(3), o(5), o(4), o(6)]; 97 var list7 = [o(1), o(3), o(5), o(4), o(6)];
103 var set1 = new HashSet.from(list1); 98 var set1 = new HashSet.from(list1);
104 var set2 = new LinkedHashSet.from(list7); 99 var set2 = new LinkedHashSet.from(list7);
105 expect(const SetEquality().equals(set1, set2), 100 expect(const SetEquality().equals(set1, set2), isFalse);
106 isFalse);
107 expect(const SetEquality(const IdentityEquality()).equals(set1, set2), 101 expect(const SetEquality(const IdentityEquality()).equals(set1, set2),
108 isFalse); 102 isFalse);
109 }); 103 });
110 104
111 var map1a = {"x": [o(1), o(2), o(3)], "y": [true, false, null]}; 105 var map1a = {
112 var map1b = {"x": [o(4), o(5), o(6)], "y": [false, true, null]}; 106 "x": [o(1), o(2), o(3)],
113 var map2a = {"x": [o(3), o(2), o(1)], "y": [false, true, null]}; 107 "y": [true, false, null]
114 var map2b = {"x": [o(6), o(5), o(4)], "y": [null, false, true]}; 108 };
109 var map1b = {
110 "x": [o(4), o(5), o(6)],
111 "y": [false, true, null]
112 };
113 var map2a = {
114 "x": [o(3), o(2), o(1)],
115 "y": [false, true, null]
116 };
117 var map2b = {
118 "x": [o(6), o(5), o(4)],
119 "y": [null, false, true]
120 };
115 var l1 = [map1a, map1b]; 121 var l1 = [map1a, map1b];
116 var l2 = [map2a, map2b]; 122 var l2 = [map2a, map2b];
117 var s1 = new Set.from(l1); 123 var s1 = new Set<Map>.from(l1);
118 var s2 = new Set.from([map2b, map2a]); 124 var s2 = new Set<Map>.from([map2b, map2a]);
119 125
120 test("RecursiveEquality", () { 126 test("RecursiveEquality", () {
121 const unordered = const UnorderedIterableEquality(); 127 const unordered = const UnorderedIterableEquality();
122 expect(unordered.equals(map1a["x"], map2a["x"]), 128 expect(unordered.equals(map1a["x"], map2a["x"]), isTrue);
123 isTrue); 129 expect(unordered.equals(map1a["y"], map2a["y"]), isTrue);
124 expect(unordered.equals(map1a["y"], map2a["y"]), 130 expect(unordered.equals(map1b["x"], map2b["x"]), isTrue);
125 isTrue); 131 expect(unordered.equals(map1b["y"], map2b["y"]), isTrue);
126 expect(unordered.equals(map1b["x"], map2b["x"]),
127 isTrue);
128 expect(unordered.equals(map1b["y"], map2b["y"]),
129 isTrue);
130 const mapval = const MapEquality(values: unordered); 132 const mapval = const MapEquality(values: unordered);
131 expect( 133 expect(mapval.equals(map1a, map2a), isTrue);
132 mapval.equals(map1a, map2a), 134 expect(mapval.equals(map1b, map2b), isTrue);
133 isTrue);
134 expect(mapval.equals(map1b, map2b),
135 isTrue);
136 const listmapval = const ListEquality(mapval); 135 const listmapval = const ListEquality(mapval);
137 expect(listmapval.equals(l1, l2), 136 expect(listmapval.equals(l1, l2), isTrue);
138 isTrue); 137 const setmapval = const SetEquality<Map>(mapval);
139 const setmapval = const SetEquality(mapval); 138 expect(setmapval.equals(s1, s2), isTrue);
140 expect(setmapval.equals(s1, s2),
141 isTrue);
142 }); 139 });
143 140
144 test("DeepEquality", () { 141 test("DeepEquality", () {
145 var colleq = const DeepCollectionEquality.unordered(); 142 var colleq = const DeepCollectionEquality.unordered();
146 expect(colleq.equals(map1a["x"], map2a["x"]), 143 expect(colleq.equals(map1a["x"], map2a["x"]), isTrue);
147 isTrue); 144 expect(colleq.equals(map1a["y"], map2a["y"]), isTrue);
148 expect(colleq.equals(map1a["y"], map2a["y"]), 145 expect(colleq.equals(map1b["x"], map2b["x"]), isTrue);
149 isTrue); 146 expect(colleq.equals(map1b["y"], map2b["y"]), isTrue);
150 expect(colleq.equals(map1b["x"], map2b["x"]), 147 expect(colleq.equals(map1a, map2a), isTrue);
151 isTrue); 148 expect(colleq.equals(map1b, map2b), isTrue);
152 expect(colleq.equals(map1b["y"], map2b["y"]), 149 expect(colleq.equals(l1, l2), isTrue);
153 isTrue); 150 expect(colleq.equals(s1, s2), isTrue);
154 expect(colleq.equals(map1a, map2a), 151 });
155 isTrue); 152
156 expect(colleq.equals(map1b, map2b), 153 test("CaseInsensitiveEquality", () {
157 isTrue); 154 var equality = const CaseInsensitiveEquality();
158 expect(colleq.equals(l1, l2), 155 expect(equality.equals("foo", "foo"), isTrue);
159 isTrue); 156 expect(equality.equals("fOo", "FoO"), isTrue);
160 expect(colleq.equals(s1, s2), 157 expect(equality.equals("FoO", "fOo"), isTrue);
161 isTrue); 158 expect(equality.equals("foo", "bar"), isFalse);
159 expect(equality.equals("fÕÕ", "fõõ"), isFalse);
160
161 expect(equality.hash("foo"), equals(equality.hash("foo")));
162 expect(equality.hash("fOo"), equals(equality.hash("FoO")));
163 expect(equality.hash("FoO"), equals(equality.hash("fOo")));
164 expect(equality.hash("foo"), isNot(equals(equality.hash("bar"))));
165 expect(equality.hash("fÕÕ"), isNot(equals(equality.hash("fõõ"))));
166 });
167
168 group("EqualityBy should use a derived value for ", () {
169 var firstEquality = new EqualityBy<List<String>, String>((e) => e.first);
170 var firstInsensitiveEquality = new EqualityBy<List<String>, String>(
171 (e) => e.first, const CaseInsensitiveEquality());
172 var firstObjectEquality = new EqualityBy<List<Object>, Object>(
173 (e) => e.first, const IterableEquality());
174
175 test("equality", () {
176 expect(firstEquality.equals(["foo", "foo"], ["foo", "bar"]), isTrue);
177 expect(firstEquality.equals(["foo", "foo"], ["bar", "bar"]), isFalse);
178 });
179
180 test("equality with an inner equality", () {
181 expect(firstInsensitiveEquality.equals(["fOo"], ["FoO"]), isTrue);
182 expect(firstInsensitiveEquality.equals(["foo"], ["ffõõ"]), isFalse);
183 });
184
185 test("hash", () {
186 expect(firstEquality.hash(["foo", "bar"]), "foo".hashCode);
187 });
188
189 test("hash with an inner equality", () {
190 expect(firstInsensitiveEquality.hash(["fOo"]),
191 const CaseInsensitiveEquality().hash("foo"));
192 });
193
194 test("isValidKey", () {
195 expect(firstEquality.isValidKey(["foo"]), isTrue);
196 expect(firstEquality.isValidKey("foo"), isFalse);
197 expect(firstEquality.isValidKey([1]), isFalse);
198 });
199
200 test('isValidKey with an inner equality', () {
201 expect(firstObjectEquality.isValidKey([[]]), isTrue);
202 expect(firstObjectEquality.isValidKey([{}]), isFalse);
203 });
204 });
205
206 test("Equality accepts null", () {
207 var ie = new IterableEquality();
208 var le = new ListEquality();
209 var se = new SetEquality();
210 var me = new MapEquality();
211 expect(ie.equals(null, null), true);
212 expect(ie.equals([], null), false);
213 expect(ie.equals(null, []), false);
214 expect(ie.hash(null), null.hashCode);
215
216 expect(le.equals(null, null), true);
217 expect(le.equals([], null), false);
218 expect(le.equals(null, []), false);
219 expect(le.hash(null), null.hashCode);
220
221 expect(se.equals(null, null), true);
222 expect(se.equals(new Set(), null), false);
223 expect(se.equals(null, new Set()), false);
224 expect(se.hash(null), null.hashCode);
225
226 expect(me.equals(null, null), true);
227 expect(me.equals({}, null), false);
228 expect(me.equals(null, {}), false);
229 expect(me.hash(null), null.hashCode);
162 }); 230 });
163 } 231 }
164 232
165 /// Wrapper objects for an `id` value. 233 /// Wrapper objects for an `id` value.
166 /// 234 ///
167 /// Compares the `id` value by equality and for comparison. 235 /// Compares the `id` value by equality and for comparison.
168 /// Allows creating simple objects that are equal without being identical. 236 /// Allows creating simple objects that are equal without being identical.
169 class Element implements Comparable<Element> { 237 class Element implements Comparable<Element> {
170 final Comparable id; 238 final Comparable id;
171 const Element(this.id); 239 const Element(this.id);
172 int get hashCode => id.hashCode; 240 int get hashCode => id.hashCode;
173 bool operator==(Object other) => other is Element && id == other.id; 241 bool operator ==(Object other) => other is Element && id == other.id;
174 int compareTo(other) => id.compareTo(other.id); 242 int compareTo(other) => id.compareTo(other.id);
175 } 243 }
OLDNEW
« no previous file with comments | « packages/collection/test/equality_set_test.dart ('k') | packages/collection/test/functions_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698