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

Side by Side Diff: tests/compiler/dart2js/serialization/test_helper.dart

Issue 2194173002: Include constants in deferred computation. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Rebased Created 4 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
« no previous file with comments | « tests/compiler/dart2js/serialization/test_data.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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 dart2js.serialization_test_helper; 5 library dart2js.serialization_test_helper;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'package:compiler/src/common/resolution.dart'; 8 import 'package:compiler/src/common/resolution.dart';
9 import 'package:compiler/src/constants/expressions.dart'; 9 import 'package:compiler/src/constants/expressions.dart';
10 import 'package:compiler/src/constants/values.dart';
10 import 'package:compiler/src/dart_types.dart'; 11 import 'package:compiler/src/dart_types.dart';
11 import 'package:compiler/src/compiler.dart'; 12 import 'package:compiler/src/compiler.dart';
12 import 'package:compiler/src/elements/elements.dart'; 13 import 'package:compiler/src/elements/elements.dart';
13 import 'package:compiler/src/serialization/equivalence.dart'; 14 import 'package:compiler/src/serialization/equivalence.dart';
14 import 'package:compiler/src/tree/nodes.dart'; 15 import 'package:compiler/src/tree/nodes.dart';
15 import 'package:expect/expect.dart'; 16 import 'package:expect/expect.dart';
16 import 'test_data.dart'; 17 import 'test_data.dart';
17 18
18 Check currentCheck; 19 Check currentCheck;
19 20
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 @override 82 @override
82 bool testSets( 83 bool testSets(
83 var object1, var object2, String property, 84 var object1, var object2, String property,
84 Iterable set1, Iterable set2, 85 Iterable set1, Iterable set2,
85 [bool elementEquivalence(a, b) = equality]) { 86 [bool elementEquivalence(a, b) = equality]) {
86 return checkSetEquivalence( 87 return checkSetEquivalence(
87 object1, object2,property, set1, set2, elementEquivalence); 88 object1, object2,property, set1, set2, elementEquivalence);
88 } 89 }
89 90
90 @override 91 @override
92 bool testMaps(
93 var object1, var object2, String property, Map map1, Map map2,
94 [bool keyEquivalence(a, b) = equality,
95 bool valueEquivalence(a, b) = equality]) {
96 return checkMapEquivalence(object1, object2, property,
97 map1, map2, keyEquivalence, valueEquivalence);
98 }
99
100 @override
91 bool testElements( 101 bool testElements(
92 Object object1, Object object2, String property, 102 Object object1, Object object2, String property,
93 Element element1, Element element2) { 103 Element element1, Element element2) {
94 return checkElementIdentities( 104 return checkElementIdentities(
95 object1, object2, property, element1, element2); 105 object1, object2, property, element1, element2);
96 } 106 }
97 107
98 @override 108 @override
99 bool testTypes( 109 bool testTypes(
100 Object object1, Object object2, String property, 110 Object object1, Object object2, String property,
101 DartType type1, DartType type2) { 111 DartType type1, DartType type2) {
102 return checkTypes(object1, object2, property, type1, type2); 112 return checkTypes(object1, object2, property, type1, type2);
103 } 113 }
104 114
105 @override 115 @override
106 bool testConstants( 116 bool testConstants(
107 Object object1, Object object2, String property, 117 Object object1, Object object2, String property,
108 ConstantExpression exp1, ConstantExpression exp2) { 118 ConstantExpression exp1, ConstantExpression exp2) {
109 return checkConstants(object1, object2, property, exp1, exp2); 119 return checkConstants(object1, object2, property, exp1, exp2);
110 } 120 }
111 121
112 @override 122 @override
123 bool testConstantValues(Object object1, Object object2, String property,
124 ConstantValue value1, ConstantValue value2) {
125 return areConstantValuesEquivalent(value1, value2);
126 }
127
128 @override
113 bool testTypeLists( 129 bool testTypeLists(
114 Object object1, Object object2, String property, 130 Object object1, Object object2, String property,
115 List<DartType> list1, List<DartType> list2) { 131 List<DartType> list1, List<DartType> list2) {
116 return checkTypeLists(object1, object2, property, list1, list2); 132 return checkTypeLists(object1, object2, property, list1, list2);
117 } 133 }
118 134
119 @override 135 @override
120 bool testConstantLists( 136 bool testConstantLists(
121 Object object1, Object object2, String property, 137 Object object1, Object object2, String property,
122 List<ConstantExpression> list1, 138 List<ConstantExpression> list1,
123 List<ConstantExpression> list2) { 139 List<ConstantExpression> list2) {
124 return checkConstantLists(object1, object2, property, list1, list2); 140 return checkConstantLists(object1, object2, property, list1, list2);
125 } 141 }
126 142
127 @override 143 @override
144 bool testConstantValueLists(Object object1, Object object2, String property,
145 List<ConstantValue> list1, List<ConstantValue> list2) {
146 return checkConstantValueLists(object1, object2, property, list1, list2);
147 }
148
149 @override
128 bool testNodes(Object object1, Object object2, String property, 150 bool testNodes(Object object1, Object object2, String property,
129 Node node1, Node node2) { 151 Node node1, Node node2) {
130 return new NodeEquivalenceVisitor(this).testNodes( 152 return new NodeEquivalenceVisitor(this).testNodes(
131 object1, object2, property, node1, node2); 153 object1, object2, property, node1, node2);
132 } 154 }
133 } 155 }
134 156
135 /// Check that the values [property] of [object1] and [object2], [value1] and 157 /// Check that the values [property] of [object1] and [object2], [value1] and
136 /// [value2] respectively, are equal and throw otherwise. 158 /// [value2] respectively, are equal and throw otherwise.
137 bool check(var object1, var object2, String property, var value1, var value2, 159 bool check(var object1, var object2, String property, var value1, var value2,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 String message = 262 String message =
241 "Set mismatch for `$property` on $object1 vs $object2: \n" 263 "Set mismatch for `$property` on $object1 vs $object2: \n"
242 "Common:\n ${common.join('\n ')}\n" 264 "Common:\n ${common.join('\n ')}\n"
243 "Unfound:\n ${unfound.join('\n ')}\n" 265 "Unfound:\n ${unfound.join('\n ')}\n"
244 "Extra: \n ${remaining.join('\n ')}"; 266 "Extra: \n ${remaining.join('\n ')}";
245 throw message; 267 throw message;
246 } 268 }
247 return true; 269 return true;
248 } 270 }
249 271
272 /// Check equivalence of the two iterables, [set1] and [set1], as sets using
273 /// [elementEquivalence] to compute the pair-wise equivalence.
274 ///
275 /// Uses [object1], [object2] and [property] to provide context for failures.
276 bool checkMapEquivalence(
277 var object1,
278 var object2,
279 String property,
280 Map map1,
281 Map map2,
282 bool sameKey(a, b),
283 bool sameValue(a, b)) {
284 List<List> common = <List>[];
285 List unfound = [];
286 Set remaining =
287 computeSetDifference(map1.keys, map2.keys, common, unfound,
288 sameElement: sameKey);
289 if (unfound.isNotEmpty || remaining.isNotEmpty) {
290 String message =
291 "Map key mismatch for `$property` on $object1 vs $object2: \n"
292 "Common:\n ${common.join('\n ')}\n"
293 "Unfound:\n ${unfound.join('\n ')}\n"
294 "Extra: \n ${remaining.join('\n ')}";
295 throw message;
296 }
297 for (List pair in common) {
298 check(object1, object2, 'Map value for `$property`',
299 map1[pair[0]], map2[pair[1]], sameValue);
300 }
301 return true;
302 }
303
250 /// Checks the equivalence of the identity (but not properties) of [element1] 304 /// Checks the equivalence of the identity (but not properties) of [element1]
251 /// and [element2]. 305 /// and [element2].
252 /// 306 ///
253 /// Uses [object1], [object2] and [property] to provide context for failures. 307 /// Uses [object1], [object2] and [property] to provide context for failures.
254 bool checkElementIdentities( 308 bool checkElementIdentities(
255 Object object1, Object object2, String property, 309 Object object1, Object object2, String property,
256 Element element1, Element element2) { 310 Element element1, Element element2) {
257 if (identical(element1, element2)) return true; 311 if (identical(element1, element2)) return true;
258 return check(object1, object2, 312 return check(object1, object2,
259 property, element1, element2, areElementsEquivalent); 313 property, element1, element2, areElementsEquivalent);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 ConstantExpression exp1, ConstantExpression exp2) { 358 ConstantExpression exp1, ConstantExpression exp2) {
305 if (identical(exp1, exp2)) return true; 359 if (identical(exp1, exp2)) return true;
306 if (exp1 == null || exp2 == null) { 360 if (exp1 == null || exp2 == null) {
307 return check(object1, object2, property, exp1, exp2); 361 return check(object1, object2, property, exp1, exp2);
308 } else { 362 } else {
309 return check(object1, object2, property, exp1, exp2, 363 return check(object1, object2, property, exp1, exp2,
310 (a, b) => const ConstantEquivalence(const CheckStrategy()).visit(a, b)); 364 (a, b) => const ConstantEquivalence(const CheckStrategy()).visit(a, b));
311 } 365 }
312 } 366 }
313 367
314 /// Checks the pair-wise equivalence of the contants in [list1] and [list2]. 368 /// Checks the equivalence of [value1] and [value2].
369 ///
370 /// Uses [object1], [object2] and [property] to provide context for failures.
371 bool checkConstantValues(
372 Object object1, Object object2, String property,
373 ConstantValue value1, ConstantValue value2) {
374 if (identical(value1, value2)) return true;
375 if (value1 == null || value2 == null) {
376 return check(object1, object2, property, value1, value2);
377 } else {
378 return check(object1, object2, property, value1, value2,
379 (a, b) => const ConstantValueEquivalence(
380 const CheckStrategy()).visit(a, b));
381 }
382 }
383
384 /// Checks the pair-wise equivalence of the constants in [list1] and [list2].
315 /// 385 ///
316 /// Uses [object1], [object2] and [property] to provide context for failures. 386 /// Uses [object1], [object2] and [property] to provide context for failures.
317 bool checkConstantLists( 387 bool checkConstantLists(
318 Object object1, Object object2, String property, 388 Object object1, Object object2, String property,
319 List<ConstantExpression> list1, 389 List<ConstantExpression> list1,
320 List<ConstantExpression> list2) { 390 List<ConstantExpression> list2) {
321 return checkListEquivalence( 391 return checkListEquivalence(
322 object1, object2, property, 392 object1, object2, property,
323 list1, list2, checkConstants); 393 list1, list2, checkConstants);
324 } 394 }
325 395
396 /// Checks the pair-wise equivalence of the constants values in [list1] and
397 /// [list2].
398 ///
399 /// Uses [object1], [object2] and [property] to provide context for failures.
400 bool checkConstantValueLists(
401 Object object1, Object object2, String property,
402 List<ConstantValue> list1,
403 List<ConstantValue> list2) {
404 return checkListEquivalence(
405 object1, object2, property,
406 list1, list2, checkConstantValues);
407 }
326 408
327 /// Check member property equivalence between all members common to [compiler1] 409 /// Check member property equivalence between all members common to [compiler1]
328 /// and [compiler2]. 410 /// and [compiler2].
329 void checkLoadedLibraryMembers( 411 void checkLoadedLibraryMembers(
330 Compiler compiler1, 412 Compiler compiler1,
331 Compiler compiler2, 413 Compiler compiler2,
332 bool hasProperty(Element member1), 414 bool hasProperty(Element member1),
333 void checkMemberProperties(Compiler compiler1, Element member1, 415 void checkMemberProperties(Compiler compiler1, Element member1,
334 Compiler compiler2, Element member2, 416 Compiler compiler2, Element member2,
335 {bool verbose}), 417 {bool verbose}),
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 } 514 }
433 515
434 void checkSets( 516 void checkSets(
435 Iterable set1, 517 Iterable set1,
436 Iterable set2, 518 Iterable set2,
437 String messagePrefix, 519 String messagePrefix,
438 bool sameElement(a, b), 520 bool sameElement(a, b),
439 {bool failOnUnfound: true, 521 {bool failOnUnfound: true,
440 bool failOnExtra: true, 522 bool failOnExtra: true,
441 bool verbose: false, 523 bool verbose: false,
442 void onSameElement(a, b)}) { 524 void onSameElement(a, b),
525 void onUnfoundElement(a),
526 void onExtraElement(b),
527 String elementToString(key): defaultToString}) {
443 List<List> common = <List>[]; 528 List<List> common = <List>[];
444 List unfound = []; 529 List unfound = [];
445 Set remaining = computeSetDifference( 530 Set remaining = computeSetDifference(
446 set1, set2, common, unfound, 531 set1, set2, common, unfound,
447 sameElement: sameElement, 532 sameElement: sameElement,
448 checkElements: onSameElement); 533 checkElements: onSameElement);
534 if (onUnfoundElement != null) {
535 unfound.forEach(onUnfoundElement);
536 }
537 if (onExtraElement != null) {
538 remaining.forEach(onExtraElement);
539 }
449 StringBuffer sb = new StringBuffer(); 540 StringBuffer sb = new StringBuffer();
450 sb.write("$messagePrefix:"); 541 sb.write("$messagePrefix:");
451 if (verbose) { 542 if (verbose) {
452 sb.write("\n Common:\n ${common.join('\n ')}"); 543 sb.write("\n Common: \n");
544 for (List pair in common) {
545 var element1 = pair[0];
546 var element2 = pair[1];
547 sb.write(" [${elementToString(element1)},"
548 "${elementToString(element2)}]\n");
549 }
453 } 550 }
454 if (unfound.isNotEmpty || verbose) { 551 if (unfound.isNotEmpty || verbose) {
455 sb.write("\n Unfound:\n ${unfound.join('\n ')}"); 552 sb.write("\n Unfound:\n ${unfound.map(elementToString).join('\n ')}");
456 } 553 }
457 if (remaining.isNotEmpty || verbose) { 554 if (remaining.isNotEmpty || verbose) {
458 sb.write("\n Extra: \n ${remaining.join('\n ')}"); 555 sb.write("\n Extra: \n ${remaining.map(elementToString).join('\n ')}");
459 } 556 }
460 String message = sb.toString(); 557 String message = sb.toString();
461 if (unfound.isNotEmpty || remaining.isNotEmpty) { 558 if (unfound.isNotEmpty || remaining.isNotEmpty) {
462
463 if ((failOnUnfound && unfound.isNotEmpty) || 559 if ((failOnUnfound && unfound.isNotEmpty) ||
464 (failOnExtra && remaining.isNotEmpty)) { 560 (failOnExtra && remaining.isNotEmpty)) {
465 Expect.fail(message); 561 Expect.fail(message);
466 } else { 562 } else {
467 print(message); 563 print(message);
468 } 564 }
469 } else if (verbose) { 565 } else if (verbose) {
470 print(message); 566 print(message);
471 } 567 }
472 } 568 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 } 709 }
614 710
615 if (index == 1 && skip != 0) { 711 if (index == 1 && skip != 0) {
616 return ['${skip}', segmentNumber(index)]; 712 return ['${skip}', segmentNumber(index)];
617 } else if (index == count) { 713 } else if (index == count) {
618 return [segmentNumber(index - 1)]; 714 return [segmentNumber(index - 1)];
619 } else { 715 } else {
620 return [segmentNumber(index - 1), segmentNumber(index)]; 716 return [segmentNumber(index - 1), segmentNumber(index)];
621 } 717 }
622 } 718 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/serialization/test_data.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698