OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import "package:expect/expect.dart"; | |
6 | |
7 class FixedHashCode { | |
8 final int _hashCode; | |
9 const FixedHashCode(this._hashCode); | |
10 int get hashCode { | |
11 return _hashCode; | |
12 } | |
13 } | |
14 | |
15 class SetIteratorTest { | |
16 static testMain() { | |
17 testSmallSet(); | |
18 testLargeSet(); | |
19 testEmptySet(); | |
20 testSetWithDeletedEntries(); | |
21 testBug5116829(); | |
22 testDifferentSizes(); | |
23 testDifferentHashCodes(); | |
24 } | |
25 | |
26 static int sum(int expected, Iterator<int> it) { | |
27 int count = 0; | |
28 while (it.moveNext()) { | |
29 count += it.current; | |
30 } | |
31 Expect.equals(expected, count); | |
32 } | |
33 | |
34 static void testSmallSet() { | |
35 Set<int> set = new Set<int>(); | |
36 set.add(1); | |
37 set.add(2); | |
38 set.add(3); | |
39 | |
40 Iterator<int> it = set.iterator; | |
41 sum(6, it); | |
42 Expect.isFalse(it.moveNext()); | |
43 Expect.isNull(it.current); | |
44 } | |
45 | |
46 static void testLargeSet() { | |
47 Set<int> set = new Set<int>(); | |
48 int count = 0; | |
49 for (int i = 0; i < 100; i++) { | |
50 count += i; | |
51 set.add(i); | |
52 } | |
53 Iterator<int> it = set.iterator; | |
54 sum(count, it); | |
55 Expect.isFalse(it.moveNext()); | |
56 Expect.isNull(it.current); | |
57 } | |
58 | |
59 static void testEmptySet() { | |
60 Set<int> set = new Set<int>(); | |
61 Iterator<int> it = set.iterator; | |
62 sum(0, it); | |
63 Expect.isFalse(it.moveNext()); | |
64 Expect.isNull(it.current); | |
65 } | |
66 | |
67 static void testSetWithDeletedEntries() { | |
68 Set<int> set = new Set<int>(); | |
69 for (int i = 0; i < 100; i++) { | |
70 set.add(i); | |
71 } | |
72 for (int i = 0; i < 100; i++) { | |
73 set.remove(i); | |
74 } | |
75 Iterator<int> it = set.iterator; | |
76 Expect.isFalse(it.moveNext()); | |
77 it = set.iterator; | |
78 sum(0, it); | |
79 Expect.isFalse(it.moveNext()); | |
80 Expect.isNull(it.current); | |
81 | |
82 int count = 0; | |
83 for (int i = 0; i < 100; i++) { | |
84 set.add(i); | |
85 if (i % 2 == 0) | |
86 set.remove(i); | |
87 else | |
88 count += i; | |
89 } | |
90 it = set.iterator; | |
91 sum(count, it); | |
92 Expect.isFalse(it.moveNext()); | |
93 Expect.isNull(it.current); | |
94 } | |
95 | |
96 static void testBug5116829() { | |
97 // During iteration we skipped slot 0 of the hashset's key list. "A" was | |
98 // hashed to slot 0 and therefore triggered the bug. | |
99 Set<String> mystrs = new Set<String>(); | |
100 mystrs.add("A"); | |
101 int seen = 0; | |
102 for (String elt in mystrs) { | |
103 seen++; | |
104 Expect.equals("A", elt); | |
105 } | |
106 Expect.equals(1, seen); | |
107 } | |
108 | |
109 static void testDifferentSizes() { | |
110 for (int i = 1; i < 20; i++) { | |
111 Set set = new Set(); | |
112 int sum = 0; | |
113 for (int j = 0; j < i; j++) { | |
114 set.add(j); | |
115 sum += j; | |
116 } | |
117 int count = 0; | |
118 int controlSum = 0; | |
119 for (int x in set) { | |
120 controlSum += x; | |
121 count++; | |
122 } | |
123 Expect.equals(i, count); | |
124 Expect.equals(sum, controlSum); | |
125 } | |
126 } | |
127 | |
128 static void testDifferentHashCodes() { | |
129 for (int i = -20; i < 20; i++) { | |
130 Set set = new Set(); | |
131 var element = new FixedHashCode(i); | |
132 set.add(element); | |
133 Expect.equals(1, set.length); | |
134 bool foundIt = false; | |
135 for (var x in set) { | |
136 foundIt = true; | |
137 Expect.equals(true, identical(x, element)); | |
138 } | |
139 Expect.equals(true, foundIt); | |
140 } | |
141 } | |
142 } | |
143 | |
144 main() { | |
145 SetIteratorTest.testMain(); | |
146 } | |
OLD | NEW |