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 // VMOptions=--assert_initializer | |
6 import "package:expect/expect.dart"; | |
7 | |
8 bool assertsEnabled = false; | |
9 | |
10 main() { | |
11 assert((assertsEnabled = true)); | |
12 runtimeAsserts(); // //# none: ok | |
13 | |
14 // Passing const expressions. | |
15 const c00 = const AssertArgument.constFirst(true, 0, 1); | |
16 const c01 = const AssertArgument.constLast(true, 0, 1); | |
17 const c02 = const AssertArgument.constMiddle(true, 0, 1); | |
18 const c03 = const AssertArgument.constMulti(true, 0, 1); | |
19 const c04 = const AssertArgument.constFirstSuper(true, 0, 1); | |
20 const c05 = const AssertArgument.constLastSuper(true, 0, 1); | |
21 const c06 = const AssertArgument.constMiddleSuper(true, 0, 1); | |
22 const c07 = const AssertArgument.constMultiSuper(true, 0, 1); | |
23 | |
24 const c08 = const AssertCompare.constFirst(1, 2); | |
25 const c09 = const AssertCompare.constLast(1, 2); | |
26 const c10 = const AssertCompare.constMiddle(1, 2); | |
27 const c11 = const AssertCompare.constMulti(1, 2); | |
28 const c12 = const AssertCompare.constFirstSuper(1, 2); | |
29 const c13 = const AssertCompare.constLastSuper(1, 2); | |
30 const c14 = const AssertCompare.constMiddleSuper(1, 2); | |
31 const c15 = const AssertCompare.constMultiSuper(1, 2); | |
32 | |
33 // Failing const expressions | |
34 | |
35 const c = const AssertArgument.constFirst(false, 0, 1); // //# 01: check
ed mode compile-time error | |
36 const c = const AssertArgument.constLast(false, 0, 1); // //# 02: check
ed mode compile-time error | |
37 const c = const AssertArgument.constMiddle(false, 0, 1); // //# 03: check
ed mode compile-time error | |
38 const c = const AssertArgument.constMulti(false, 0, 1); // //# 04: check
ed mode compile-time error | |
39 const c = const AssertArgument.constFirstSuper(false, 0, 1); // //# 05: check
ed mode compile-time error | |
40 const c = const AssertArgument.constLastSuper(false, 0, 1); // //# 06: check
ed mode compile-time error | |
41 const c = const AssertArgument.constMiddleSuper(false, 0, 1); // //# 07: check
ed mode compile-time error | |
42 const c = const AssertArgument.constMultiSuper(false, 0, 1); // //# 08: check
ed mode compile-time error | |
43 | |
44 const c = const AssertArgument.constFirst("str", 0, 1); // //# 11: check
ed mode compile-time error | |
45 const c = const AssertArgument.constLast("str", 0, 1); // //# 12: check
ed mode compile-time error | |
46 const c = const AssertArgument.constMiddle("str", 0, 1); // //# 13: check
ed mode compile-time error | |
47 const c = const AssertArgument.constMulti("str", 0, 1); // //# 14: check
ed mode compile-time error | |
48 const c = const AssertArgument.constFirstSuper("str", 0, 1); // //# 15: check
ed mode compile-time error | |
49 const c = const AssertArgument.constLastSuper("str", 0, 1); // //# 16: check
ed mode compile-time error | |
50 const c = const AssertArgument.constMiddleSuper("str", 0, 1); // //# 17: check
ed mode compile-time error | |
51 const c = const AssertArgument.constMultiSuper("str", 0, 1); // //# 18: check
ed mode compile-time error | |
52 | |
53 const c = const AssertCompare.constFirst(3, 2); // //# 21: check
ed mode compile-time error | |
54 const c = const AssertCompare.constLast(3, 2); // //# 22: check
ed mode compile-time error | |
55 const c = const AssertCompare.constMiddle(3, 2); // //# 23: check
ed mode compile-time error | |
56 const c = const AssertCompare.constMulti(3, 2); // //# 24: check
ed mode compile-time error | |
57 const c = const AssertCompare.constFirstSuper(3, 2); // //# 25: check
ed mode compile-time error | |
58 const c = const AssertCompare.constLastSuper(3, 2); // //# 26: check
ed mode compile-time error | |
59 const c = const AssertCompare.constMiddleSuper(3, 2); // //# 27: check
ed mode compile-time error | |
60 const c = const AssertCompare.constMultiSuper(3, 2); // //# 28: check
ed mode compile-time error | |
61 | |
62 // Functions not allowed in asserts in const execution. | |
63 const c = const AssertArgument.constFirst(kTrue, 0, 1); // //# 31: check
ed mode compile-time error | |
64 const c = const AssertArgument.constLast(kTrue, 0, 1); // //# 32: check
ed mode compile-time error | |
65 const c = const AssertArgument.constMiddle(kTrue, 0, 1); // //# 33: check
ed mode compile-time error | |
66 const c = const AssertArgument.constMulti(kTrue, 0, 1); // //# 34: check
ed mode compile-time error | |
67 const c = const AssertArgument.constFirstSuper(kTrue, 0, 1); // //# 35: check
ed mode compile-time error | |
68 const c = const AssertArgument.constLastSuper(kTrue, 0, 1); // //# 36: check
ed mode compile-time error | |
69 const c = const AssertArgument.constMiddleSuper(kTrue, 0, 1); // //# 37: check
ed mode compile-time error | |
70 const c = const AssertArgument.constMultiSuper(kTrue, 0, 1); // //# 38: check
ed mode compile-time error | |
71 | |
72 const cTrue = const TrickCompare(true); | |
73 // Value must be integer for potential-const expression to be actually const. | |
74 const c = const AssertCompare.constFirst(cTrue, 2); // //# 41: check
ed mode compile-time error | |
75 const c = const AssertCompare.constLast(cTrue, 2); // //# 42: check
ed mode compile-time error | |
76 const c = const AssertCompare.constMiddle(cTrue, 2); // //# 43: check
ed mode compile-time error | |
77 const c = const AssertCompare.constMulti(cTrue, 2); // //# 44: check
ed mode compile-time error | |
78 const c = const AssertCompare.constFirstSuper(cTrue, 2); // //# 45: check
ed mode compile-time error | |
79 const c = const AssertCompare.constLastSuper(cTrue, 2); // //# 46: check
ed mode compile-time error | |
80 const c = const AssertCompare.constMiddleSuper(cTrue, 2); // //# 47: check
ed mode compile-time error | |
81 const c = const AssertCompare.constMultiSuper(cTrue, 2); // //# 48: check
ed mode compile-time error | |
82 } | |
83 | |
84 | |
85 void runtimeAsserts() { | |
86 | |
87 testAssertArgumentCombinations(value, test, [testConst]) { | |
88 test(() => new AssertArgument.first(value, 0, 1)); | |
89 test(() => new AssertArgument.last(value, 0, 1)); | |
90 test(() => new AssertArgument.middle(value, 0, 1)); | |
91 test(() => new AssertArgument.multi(value, 0, 1)); | |
92 test(() => new AssertArgument.firstSuper(value, 0, 1)); | |
93 test(() => new AssertArgument.lastSuper(value, 0, 1)); | |
94 test(() => new AssertArgument.middleSuper(value, 0, 1)); | |
95 test(() => new AssertArgument.multiSuper(value, 0, 1)); | |
96 testConst ??= test; | |
97 testConst(() => new AssertArgument.constFirst(value, 0, 1)); | |
98 testConst(() => new AssertArgument.constLast(value, 0, 1)); | |
99 testConst(() => new AssertArgument.constMiddle(value, 0, 1)); | |
100 testConst(() => new AssertArgument.constMulti(value, 0, 1)); | |
101 testConst(() => new AssertArgument.constFirstSuper(value, 0, 1)); | |
102 testConst(() => new AssertArgument.constLastSuper(value, 0, 1)); | |
103 testConst(() => new AssertArgument.constMiddleSuper(value, 0, 1)); | |
104 testConst(() => new AssertArgument.constMultiSuper(value, 0, 1)); | |
105 } | |
106 | |
107 testAssertCompareCombinations(v1, v2, test, [testConst]) { | |
108 test(() => new AssertCompare.first(v1, v2)); | |
109 test(() => new AssertCompare.last(v1, v2)); | |
110 test(() => new AssertCompare.middle(v1, v2)); | |
111 test(() => new AssertCompare.multi(v1, v2)); | |
112 test(() => new AssertCompare.firstSuper(v1, v2)); | |
113 test(() => new AssertCompare.lastSuper(v1, v2)); | |
114 test(() => new AssertCompare.middleSuper(v1, v2)); | |
115 test(() => new AssertCompare.multiSuper(v1, v2)); | |
116 testConst ??= test; | |
117 testConst(() => new AssertCompare.constFirst(v1, v2)); | |
118 testConst(() => new AssertCompare.constLast(v1, v2)); | |
119 testConst(() => new AssertCompare.constMiddle(v1, v2)); | |
120 testConst(() => new AssertCompare.constMulti(v1, v2)); | |
121 testConst(() => new AssertCompare.constFirstSuper(v1, v2)); | |
122 testConst(() => new AssertCompare.constLastSuper(v1, v2)); | |
123 testConst(() => new AssertCompare.constMiddleSuper(v1, v2)); | |
124 testConst(() => new AssertCompare.constMultiSuper(v1, v2)); | |
125 } | |
126 | |
127 testAssertArgumentCombinations(true, pass); | |
128 testAssertArgumentCombinations(kTrue, pass, failType); | |
129 testAssertArgumentCombinations(false, failAssert); | |
130 testAssertArgumentCombinations(kFalse, failAssert, failType); | |
131 testAssertArgumentCombinations(42, failType); | |
132 testAssertArgumentCombinations(null, failAssert); | |
133 | |
134 testAssertCompareCombinations(1, 2, pass); | |
135 testAssertCompareCombinations(3, 2, failAssert); | |
136 var TrickCompareInt = const TrickCompare(42); | |
137 testAssertCompareCombinations(TrickCompareInt, 0, failType); | |
138 var TrickCompareTrueFun = const TrickCompare(kTrue); | |
139 testAssertCompareCombinations(TrickCompareTrueFun, 0, pass, failType); | |
140 var TrickCompareFalseFun = const TrickCompare(kFalse); | |
141 testAssertCompareCombinations(TrickCompareFalseFun, 0, failAssert, failType); | |
142 } | |
143 | |
144 | |
145 void pass(void action()) { | |
146 action(); | |
147 } | |
148 | |
149 void failAssert(void action()) { | |
150 if (assertsEnabled) { | |
151 Expect.throws(action, (e) => e is AssertionError && e is! TypeError); | |
152 } else { | |
153 action(); | |
154 } | |
155 } | |
156 | |
157 void failType(void action()) { | |
158 if (assertsEnabled) { | |
159 Expect.throws(action, (e) => e is TypeError); | |
160 } else { | |
161 action(); | |
162 } | |
163 } | |
164 | |
165 bool kTrue() => true; | |
166 bool kFalse() => false; | |
167 | |
168 class AssertArgument { | |
169 final y; | |
170 final z; | |
171 AssertArgument.first(x, y, z) : assert(x), y = y, z = z; | |
172 AssertArgument.last(x, y, z) : y = y, z = z, assert(x); | |
173 AssertArgument.middle(x, y, z) : y = y, assert(x), z = z; | |
174 AssertArgument.multi(x, y, z) | |
175 : assert(x), y = y, assert(x), z = z, assert(x); | |
176 AssertArgument.firstSuper(x, y, z) : assert(x), y = y, z = z, super(); | |
177 AssertArgument.lastSuper(x, y, z) : y = y, z = z, assert(x), super(); | |
178 AssertArgument.middleSuper(x, y, z) : y = y, assert(x), z = z, super(); | |
179 AssertArgument.multiSuper(x, y, z) | |
180 : assert(x), y = y, assert(x), z = z, assert(x), super(); | |
181 const AssertArgument.constFirst(x, y, z) : assert(x), y = y, z = z; | |
182 const AssertArgument.constLast(x, y, z) : y = y, z = z, assert(x); | |
183 const AssertArgument.constMiddle(x, y, z) : y = y, assert(x), z = z; | |
184 const AssertArgument.constMulti(x, y, z) | |
185 : assert(x), y = y, assert(x), z = z, assert(x); | |
186 const AssertArgument.constFirstSuper(x, y, z) | |
187 : assert(x), y = y, z = z, super(); | |
188 const AssertArgument.constLastSuper(x, y, z) | |
189 : y = y, z = z, assert(x), super(); | |
190 const AssertArgument.constMiddleSuper(x, y, z) | |
191 : y = y, assert(x), z = z, super(); | |
192 const AssertArgument.constMultiSuper(x, y, z) | |
193 : assert(x), y = y, assert(x), z = z, assert(x), super(); | |
194 } | |
195 | |
196 class AssertCompare { | |
197 final y; | |
198 final z; | |
199 AssertCompare.first(y, z) : assert(y < z), y = y, z = z; | |
200 AssertCompare.last(y, z) : y = y, z = z, assert(y < z); | |
201 AssertCompare.middle(y, z) : y = y, assert(y < z), z = z; | |
202 AssertCompare.multi(y, z) | |
203 : assert(y < z), y = y, assert(y < z), z = z, assert(y < z); | |
204 AssertCompare.firstSuper(y, z) : assert(y < z), y = y, z = z, super(); | |
205 AssertCompare.lastSuper(y, z) : y = y, z = z, assert(y < z), super(); | |
206 AssertCompare.middleSuper(y, z) : y = y, assert(y < z), z = z, super(); | |
207 AssertCompare.multiSuper(y, z) | |
208 : assert(y < z), y = y, assert(y < z), z = z, assert(y < z), super(); | |
209 const AssertCompare.constFirst(y, z) : assert(y < z), y = y, z = z; | |
210 const AssertCompare.constLast(y, z) : y = y, z = z, assert(y < z); | |
211 const AssertCompare.constMiddle(y, z) : y = y, assert(y < z), z = z; | |
212 const AssertCompare.constMulti(y, z) | |
213 : assert(y < z), y = y, assert(y < z), z = z, assert(y < z); | |
214 const AssertCompare.constFirstSuper(y, z) | |
215 : assert(y < z), y = y, z = z, super(); | |
216 const AssertCompare.constLastSuper(y, z) | |
217 : y = y, z = z, assert(y < z), super(); | |
218 const AssertCompare.constMiddleSuper(y, z) | |
219 : y = y, assert(y < z), z = z, super(); | |
220 const AssertCompare.constMultiSuper(y, z) | |
221 : assert(y < z), y = y, assert(y < z), z = z, assert(y < z), super(); | |
222 } | |
223 | |
224 class TrickCompare { | |
225 final result; | |
226 const TrickCompare(this.result); | |
227 operator<(other) => result; // Nyah-nyah! | |
228 } | |
OLD | NEW |