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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/compiler/dart2js/serialization/test_data.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/serialization/test_helper.dart
diff --git a/tests/compiler/dart2js/serialization/test_helper.dart b/tests/compiler/dart2js/serialization/test_helper.dart
index 2c74a07537fd33fd2087f5f17f42ddfcd6118dca..f5d986d5bb8d579af9e46a374ae7b169fb351f34 100644
--- a/tests/compiler/dart2js/serialization/test_helper.dart
+++ b/tests/compiler/dart2js/serialization/test_helper.dart
@@ -7,6 +7,7 @@ library dart2js.serialization_test_helper;
import 'dart:collection';
import 'package:compiler/src/common/resolution.dart';
import 'package:compiler/src/constants/expressions.dart';
+import 'package:compiler/src/constants/values.dart';
import 'package:compiler/src/dart_types.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/elements/elements.dart';
@@ -88,6 +89,15 @@ class CheckStrategy implements TestStrategy {
}
@override
+ bool testMaps(
+ var object1, var object2, String property, Map map1, Map map2,
+ [bool keyEquivalence(a, b) = equality,
+ bool valueEquivalence(a, b) = equality]) {
+ return checkMapEquivalence(object1, object2, property,
+ map1, map2, keyEquivalence, valueEquivalence);
+ }
+
+ @override
bool testElements(
Object object1, Object object2, String property,
Element element1, Element element2) {
@@ -110,6 +120,12 @@ class CheckStrategy implements TestStrategy {
}
@override
+ bool testConstantValues(Object object1, Object object2, String property,
+ ConstantValue value1, ConstantValue value2) {
+ return areConstantValuesEquivalent(value1, value2);
+ }
+
+ @override
bool testTypeLists(
Object object1, Object object2, String property,
List<DartType> list1, List<DartType> list2) {
@@ -125,6 +141,12 @@ class CheckStrategy implements TestStrategy {
}
@override
+ bool testConstantValueLists(Object object1, Object object2, String property,
+ List<ConstantValue> list1, List<ConstantValue> list2) {
+ return checkConstantValueLists(object1, object2, property, list1, list2);
+ }
+
+ @override
bool testNodes(Object object1, Object object2, String property,
Node node1, Node node2) {
return new NodeEquivalenceVisitor(this).testNodes(
@@ -247,6 +269,38 @@ bool checkSetEquivalence(
return true;
}
+/// Check equivalence of the two iterables, [set1] and [set1], as sets using
+/// [elementEquivalence] to compute the pair-wise equivalence.
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkMapEquivalence(
+ var object1,
+ var object2,
+ String property,
+ Map map1,
+ Map map2,
+ bool sameKey(a, b),
+ bool sameValue(a, b)) {
+ List<List> common = <List>[];
+ List unfound = [];
+ Set remaining =
+ computeSetDifference(map1.keys, map2.keys, common, unfound,
+ sameElement: sameKey);
+ if (unfound.isNotEmpty || remaining.isNotEmpty) {
+ String message =
+ "Map key mismatch for `$property` on $object1 vs $object2: \n"
+ "Common:\n ${common.join('\n ')}\n"
+ "Unfound:\n ${unfound.join('\n ')}\n"
+ "Extra: \n ${remaining.join('\n ')}";
+ throw message;
+ }
+ for (List pair in common) {
+ check(object1, object2, 'Map value for `$property`',
+ map1[pair[0]], map2[pair[1]], sameValue);
+ }
+ return true;
+}
+
/// Checks the equivalence of the identity (but not properties) of [element1]
/// and [element2].
///
@@ -311,7 +365,23 @@ bool checkConstants(
}
}
-/// Checks the pair-wise equivalence of the contants in [list1] and [list2].
+/// Checks the equivalence of [value1] and [value2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkConstantValues(
+ Object object1, Object object2, String property,
+ ConstantValue value1, ConstantValue value2) {
+ if (identical(value1, value2)) return true;
+ if (value1 == null || value2 == null) {
+ return check(object1, object2, property, value1, value2);
+ } else {
+ return check(object1, object2, property, value1, value2,
+ (a, b) => const ConstantValueEquivalence(
+ const CheckStrategy()).visit(a, b));
+ }
+}
+
+/// Checks the pair-wise equivalence of the constants in [list1] and [list2].
///
/// Uses [object1], [object2] and [property] to provide context for failures.
bool checkConstantLists(
@@ -323,6 +393,18 @@ bool checkConstantLists(
list1, list2, checkConstants);
}
+/// Checks the pair-wise equivalence of the constants values in [list1] and
+/// [list2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkConstantValueLists(
+ Object object1, Object object2, String property,
+ List<ConstantValue> list1,
+ List<ConstantValue> list2) {
+ return checkListEquivalence(
+ object1, object2, property,
+ list1, list2, checkConstantValues);
+}
/// Check member property equivalence between all members common to [compiler1]
/// and [compiler2].
@@ -439,27 +521,41 @@ void checkSets(
{bool failOnUnfound: true,
bool failOnExtra: true,
bool verbose: false,
- void onSameElement(a, b)}) {
+ void onSameElement(a, b),
+ void onUnfoundElement(a),
+ void onExtraElement(b),
+ String elementToString(key): defaultToString}) {
List<List> common = <List>[];
List unfound = [];
Set remaining = computeSetDifference(
set1, set2, common, unfound,
sameElement: sameElement,
checkElements: onSameElement);
+ if (onUnfoundElement != null) {
+ unfound.forEach(onUnfoundElement);
+ }
+ if (onExtraElement != null) {
+ remaining.forEach(onExtraElement);
+ }
StringBuffer sb = new StringBuffer();
sb.write("$messagePrefix:");
if (verbose) {
- sb.write("\n Common:\n ${common.join('\n ')}");
+ sb.write("\n Common: \n");
+ for (List pair in common) {
+ var element1 = pair[0];
+ var element2 = pair[1];
+ sb.write(" [${elementToString(element1)},"
+ "${elementToString(element2)}]\n");
+ }
}
if (unfound.isNotEmpty || verbose) {
- sb.write("\n Unfound:\n ${unfound.join('\n ')}");
+ sb.write("\n Unfound:\n ${unfound.map(elementToString).join('\n ')}");
}
if (remaining.isNotEmpty || verbose) {
- sb.write("\n Extra: \n ${remaining.join('\n ')}");
+ sb.write("\n Extra: \n ${remaining.map(elementToString).join('\n ')}");
}
String message = sb.toString();
if (unfound.isNotEmpty || remaining.isNotEmpty) {
-
if ((failOnUnfound && unfound.isNotEmpty) ||
(failOnExtra && remaining.isNotEmpty)) {
Expect.fail(message);
« 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