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

Side by Side Diff: tests/lib/collection/linked_list_test.dart

Issue 13459002: Introduce new LinkedList to dart:collection. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix naming, concurrent modification and further tests. Created 7 years, 6 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'dart:collection';
6 import "package:expect/expect.dart";
7
8 class MyEntry extends LinkedListEntry<MyEntry> {
9 final int value;
10
11 MyEntry(int this.value);
12
13 String toString() => value.toString();
14 }
15
16
17 testInsert() {
18 // Insert last.
19 var list = new LinkedList<MyEntry>();
20 for (int i = 0; i < 10; i++) {
21 list.add(new MyEntry(i));
22 }
23
24 Expect.equals(10, list.length);
25
26 int i = 0;
27 for (var entry in list) {
28 Expect.equals(i++, entry.value);
29 }
30
31 Expect.equals(10, i);
32
33 list.clear();
34
35 // Insert first.
36 for (int i = 0; i < 10; i++) {
37 list.addFirst(new MyEntry(i));
38 }
39
40 Expect.equals(10, list.length);
41
42 i = 10;
43 for (var entry in list) {
44 Expect.equals(--i, entry.value);
45 }
46 Expect.equals(0, i);
47
48 list.clear();
49
50 // Insert after.
51 list.addFirst(new MyEntry(0));
52 for (int i = 1; i < 10; i++) {
53 list.last.insertAfter(new MyEntry(i));
54 }
55
56 Expect.equals(10, list.length);
57
58 i = 0;
59 for (var entry in list) {
60 Expect.equals(i++, entry.value);
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Please move post-increment out of test.
Anders Johnsen 2013/06/13 11:54:08 Done.
61 }
62
63 Expect.equals(10, i);
64
65 list.clear();
66
67 // Insert before.
68 list.addFirst(new MyEntry(0));
69 for (int i = 1; i < 10; i++) {
70 list.first.insertBefore(new MyEntry(i));
71 }
72
73 Expect.equals(10, list.length);
74
75 i = 10;
76 for (var entry in list) {
77 Expect.equals(--i, entry.value);
78 }
79 Expect.equals(0, i);
80
81 list.clear();
82 }
83
84
85 testRemove() {
86 var list = new LinkedList<MyEntry>();
87 for (int i = 0; i < 10; i++) {
88 list.add(new MyEntry(i));
89 }
90
91 Expect.equals(10, list.length);
92
93 list.remove(list.skip(5).first);
94
95 Expect.equals(9, list.length);
96
97 int i = 0;
98 for (var entry in list) {
99 if (i == 5) i++;
100 Expect.equals(i++, entry.value);
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Please move post-increment out of test. You can a
Anders Johnsen 2013/06/13 11:54:08 Done.
101 }
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Add test for removing the last element of a list (
Anders Johnsen 2013/06/13 11:54:08 Done.
102 }
103
104
105 testBadAdd() {
106 var list1 = new LinkedList<MyEntry>();
107 list1.addFirst(new MyEntry(0));
108
109 var list2 = new LinkedList<MyEntry>();
110 Expect.throws(() => list2.addFirst(list1.first));
111 }
112
113 testConcurrentModificationError() {
114
115 test(function(LinkedList ll)) {
116 var ll = new LinkedList<MyEntry>();
117 for (int i = 0; i < 10; i++) {
118 ll.add(new MyEntry(i));
119 }
120 Expect.throws(() => function(ll));
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Make this be Expect.throws(() => function(ll), (
Anders Johnsen 2013/06/13 11:54:08 Done.
121 }
122 test((ll) { for(x in ll) { ll.remove(x); } });
123 test((ll) { ll.forEach((x) { ll.remove(x); }); });
124 test((ll) { ll.any((x) { ll.remove(x); return false; }); });
125 test((ll) { ll.every((x) { ll.remove(x); return true; }); });
126 test((ll) { ll.fold((x, y) { ll.remove(y); return x; }); });
127 test((ll) { ll.reduce(0, (x, y) { ll.remove(y); return x; }); });
128 test((ll) { ll.where((x) { ll.remove(x); return true; }).length; });
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Change all the .length to .forEach((_){}), just to
Anders Johnsen 2013/06/13 11:54:08 Done.
129 test((ll) { ll.map((x) { ll.remove(x); return x; }).forEach((x) {}); });
130 test((ll) { ll.expand((x) { ll.remove(x); return[x];}).length; });
131 test((ll) { ll.takeWhile((x) { ll.remove(x); return true;}).length; });
132 test((ll) { ll.skipWhile((x) { ll.remove(x); return true;}).length; });
133 test((ll) {
134 bool first = true;
135 ll.firstWhere((x) {
136 ll.remove(x);
137 if (!first) return true;
138 return first = false;
139 }).length;
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Remove .length. I think this would throw a NoSuchM
Anders Johnsen 2013/06/13 11:54:08 Done.
140 });
141 test((ll) { ll.lastWhere((x) { ll.remove(x); return true;}).length; });
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Ditto.
Anders Johnsen 2013/06/13 11:54:08 Done.
142 test((ll) {
143 first = true;
144 ll.singleWhere((x) {
145 ll.remove(x);
146 if (!first) return false;
147 return !(first = false);
148 }).length;
Lasse Reichstein Nielsen 2013/06/13 11:36:59 Ditto.
Anders Johnsen 2013/06/13 11:54:08 Done.
149 });
150 }
151
152 main() {
153 testInsert();
154 testRemove();
155 testBadAdd();
156 testConcurrentModificationError();
157 }
OLDNEW
« sdk/lib/collection/linked_list.dart ('K') | « sdk/lib/collection/linked_list.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698