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

Side by Side Diff: tests/corelib/map_test.dart

Issue 24267023: Update implementations to use Object.identityHashCode for identity map/set (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Add tests. Fix few bugs now that it can run. Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « tests/corelib/hash_set_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 library map_test; 5 library map_test;
6 import "package:expect/expect.dart"; 6 import "package:expect/expect.dart";
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 void main() { 9 void main() {
10 test(new HashMap()); 10 test(new HashMap());
(...skipping 11 matching lines...) Expand all
22 testWeirdStringKeys(new HashMap<String, String>()); 22 testWeirdStringKeys(new HashMap<String, String>());
23 testWeirdStringKeys(new LinkedHashMap()); 23 testWeirdStringKeys(new LinkedHashMap());
24 testWeirdStringKeys(new LinkedHashMap<String, String>()); 24 testWeirdStringKeys(new LinkedHashMap<String, String>());
25 testWeirdStringKeys(new SplayTreeMap()); 25 testWeirdStringKeys(new SplayTreeMap());
26 testWeirdStringKeys(new SplayTreeMap<String, String>()); 26 testWeirdStringKeys(new SplayTreeMap<String, String>());
27 27
28 testNumericKeys(new Map()); 28 testNumericKeys(new Map());
29 testNumericKeys(new Map<num, String>()); 29 testNumericKeys(new Map<num, String>());
30 testNumericKeys(new HashMap()); 30 testNumericKeys(new HashMap());
31 testNumericKeys(new HashMap<num, String>()); 31 testNumericKeys(new HashMap<num, String>());
32 testNumericKeys(new HashMap(equals: identical)); 32 testNumericKeys(new HashMap.identity());
33 testNumericKeys(new HashMap<num, String>(equals: identical)); 33 testNumericKeys(new HashMap<num, String>.identity());
34 testNumericKeys(new LinkedHashMap()); 34 testNumericKeys(new LinkedHashMap());
35 testNumericKeys(new LinkedHashMap<num, String>()); 35 testNumericKeys(new LinkedHashMap<num, String>());
36 testNumericKeys(new LinkedHashMap(equals: identical)); 36 testNumericKeys(new LinkedHashMap.identity());
37 testNumericKeys(new LinkedHashMap<num, String>(equals: identical)); 37 testNumericKeys(new LinkedHashMap<num, String>.identity());
38 38
39 testNaNKeys(new Map()); 39 testNaNKeys(new Map());
40 testNaNKeys(new Map<num, String>()); 40 testNaNKeys(new Map<num, String>());
41 testNaNKeys(new HashMap()); 41 testNaNKeys(new HashMap());
42 testNaNKeys(new HashMap<num, String>()); 42 testNaNKeys(new HashMap<num, String>());
43 testNaNKeys(new LinkedHashMap()); 43 testNaNKeys(new LinkedHashMap());
44 testNaNKeys(new LinkedHashMap<num, String>()); 44 testNaNKeys(new LinkedHashMap<num, String>());
45 // Identity maps fail the NaN-keys tests because the test assumes that 45 // Identity maps fail the NaN-keys tests because the test assumes that
46 // NaN is not equal to NaN. 46 // NaN is not equal to NaN.
47 47
48 testIdentityMap(new HashMap(equals: identical)); 48 testIdentityMap(new Map.identity());
49 testIdentityMap(new LinkedHashMap(equals: identical)); 49 testIdentityMap(new HashMap.identity());
50 testIdentityMap(new LinkedHashMap.identity());
51 testIdentityMap(new HashMap(equals: identical,
52 hashCode: identityHashCode));
53 testIdentityMap(new LinkedHashMap(equals: identical,
54 hashCode: identityHashCode));
55 testIdentityMap(new HashMap(equals: (x, y) => identical(x, y),
56 hashCode: (x) => identityHashCode(x)));
57 testIdentityMap(new LinkedHashMap(equals: (x, y) => identical(x, y),
58 hashCode: (x) => identityHashCode(x)));
50 59
51 testCustomMap(new HashMap(equals: myEquals, hashCode: myHashCode, 60 testCustomMap(new HashMap(equals: myEquals, hashCode: myHashCode,
52 isValidKey: (v) => v is Customer)); 61 isValidKey: (v) => v is Customer));
53 testCustomMap(new LinkedHashMap(equals: myEquals, hashCode: myHashCode, 62 testCustomMap(new LinkedHashMap(equals: myEquals, hashCode: myHashCode,
54 isValidKey: (v) => v is Customer)); 63 isValidKey: (v) => v is Customer));
55 testCustomMap(new HashMap<Customer,dynamic>(equals: myEquals, 64 testCustomMap(new HashMap<Customer,dynamic>(equals: myEquals,
56 hashCode: myHashCode)); 65 hashCode: myHashCode));
57 66
58 testCustomMap(new LinkedHashMap<Customer,dynamic>(equals: myEquals, 67 testCustomMap(new LinkedHashMap<Customer,dynamic>(equals: myEquals,
59 hashCode: myHashCode)); 68 hashCode: myHashCode));
60 69
61 testIterationOrder(new LinkedHashMap()); 70 testIterationOrder(new LinkedHashMap());
62 testIterationOrder(new LinkedHashMap(equals: identical)); 71 testIterationOrder(new LinkedHashMap.identity());
63 72
64 testOtherKeys(new SplayTreeMap<int, int>()); 73 testOtherKeys(new SplayTreeMap<int, int>());
65 testOtherKeys(new SplayTreeMap<int, int>((int a, int b) => a - b, 74 testOtherKeys(new SplayTreeMap<int, int>((int a, int b) => a - b,
66 (v) => v is int)); 75 (v) => v is int));
67 testOtherKeys(new SplayTreeMap((int a, int b) => a - b, 76 testOtherKeys(new SplayTreeMap((int a, int b) => a - b,
68 (v) => v is int)); 77 (v) => v is int));
69 testOtherKeys(new HashMap<int, int>()); 78 testOtherKeys(new HashMap<int, int>());
70 testOtherKeys(new HashMap<int, int>(equals: identical)); 79 testOtherKeys(new HashMap<int, int>.identity());
71 testOtherKeys(new HashMap<int, int>(hashCode: (v) => v.hashCode, 80 testOtherKeys(new HashMap<int, int>(hashCode: (v) => v.hashCode,
72 isValidKey: (v) => v is int)); 81 isValidKey: (v) => v is int));
73 testOtherKeys(new HashMap(equals: (int x, int y) => x == y, 82 testOtherKeys(new HashMap(equals: (int x, int y) => x == y,
74 hashCode: (int v) => v.hashCode, 83 hashCode: (int v) => v.hashCode,
75 isValidKey: (v) => v is int)); 84 isValidKey: (v) => v is int));
76 testOtherKeys(new LinkedHashMap<int, int>()); 85 testOtherKeys(new LinkedHashMap<int, int>());
77 testOtherKeys(new LinkedHashMap<int, int>(equals: identical)); 86 testOtherKeys(new LinkedHashMap<int, int>.identity());
78 testOtherKeys(new LinkedHashMap<int, int>(hashCode: (v) => v.hashCode, 87 testOtherKeys(new LinkedHashMap<int, int>(hashCode: (v) => v.hashCode,
79 isValidKey: (v) => v is int)); 88 isValidKey: (v) => v is int));
80 testOtherKeys(new LinkedHashMap(equals: (int x, int y) => x == y, 89 testOtherKeys(new LinkedHashMap(equals: (int x, int y) => x == y,
81 hashCode: (int v) => v.hashCode, 90 hashCode: (int v) => v.hashCode,
82 isValidKey: (v) => v is int)); 91 isValidKey: (v) => v is int));
83 } 92 }
84 93
85 94
86 void test(Map map) { 95 void test(Map map) {
87 testDeletedElement(map); 96 testDeletedElement(map);
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 testLength(4, map); 586 testLength(4, map);
578 587
579 // Transfer to equality-based map will collapse elements. 588 // Transfer to equality-based map will collapse elements.
580 Map eqMap = new HashMap(); 589 Map eqMap = new HashMap();
581 eqMap.addAll(map); 590 eqMap.addAll(map);
582 testLength(2, eqMap); 591 testLength(2, eqMap);
583 Expect.isTrue(eqMap.containsKey(eq01)); 592 Expect.isTrue(eqMap.containsKey(eq01));
584 Expect.isTrue(eqMap.containsKey(eq02)); 593 Expect.isTrue(eqMap.containsKey(eq02));
585 Expect.isTrue(eqMap.containsKey(eq11)); 594 Expect.isTrue(eqMap.containsKey(eq11));
586 Expect.isTrue(eqMap.containsKey(eq12)); 595 Expect.isTrue(eqMap.containsKey(eq12));
596
597 // Changing objects will not affect identity map.
598 map.clear();
599 var m1 = new Mutable(1);
600 var m2 = new Mutable(2);
601 var m3 = new Mutable(3);
602 map[m1] = 1;
603 map[m2] = 2;
604 map[m3] = 3;
605 Expect.equals(3, map.length);
606 Expect.isTrue(map.containsKey(m1));
607 Expect.isTrue(map.containsKey(m2));
608 Expect.isTrue(map.containsKey(m3));
609 Expect.notEquals(m1, m3);
610 m3.id = 1;
611 Expect.equals(m1, m3);
612 // Even if keys are equal, they are still not identical.
613 // Even if hashcode of m3 changed, it can still be found.
614 Expect.equals(1, map[m1]);
615 Expect.equals(3, map[m3]);
587 } 616 }
588 617
589 /** Class of objects that are equal if they hold the same id. */ 618 /** Class of objects that are equal if they hold the same id. */
590 class Equalizer { 619 class Equalizer {
591 int id; 620 int id;
592 Equalizer(this.id); 621 Equalizer(this.id);
593 int get hashCode => id; 622 int get hashCode => id;
594 bool operator==(Object other) => 623 bool operator==(Object other) =>
595 other is Equalizer && id == (other as Equalizer).id; 624 other is Equalizer && id == (other as Equalizer).id;
596 } 625 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 map[0] = 0; 735 map[0] = 0;
707 map[1] = 1; 736 map[1] = 1;
708 map[2] = 2; 737 map[2] = 2;
709 Expect.isFalse(map.containsKey("not an int")); 738 Expect.isFalse(map.containsKey("not an int"));
710 Expect.isFalse(map.containsKey(1.5)); 739 Expect.isFalse(map.containsKey(1.5));
711 Expect.isNull(map.remove("not an int")); 740 Expect.isNull(map.remove("not an int"));
712 Expect.isNull(map.remove(1.5)); 741 Expect.isNull(map.remove(1.5));
713 Expect.isNull(map["not an int"]); 742 Expect.isNull(map["not an int"]);
714 Expect.isNull(map[1.5]); 743 Expect.isNull(map[1.5]);
715 } 744 }
745
746 class Mutable {
747 int id;
748 Mutable(this.id);
749 int get hashCode => id;
750 bool operator==(other) => other is Mutable && other.id == id;
751 }
OLDNEW
« no previous file with comments | « tests/corelib/hash_set_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698