Index: tests/compiler/dart2js/equivalence/check_helpers.dart |
diff --git a/tests/compiler/dart2js/equivalence/check_helpers.dart b/tests/compiler/dart2js/equivalence/check_helpers.dart |
index 4b9836b819078a9b20127ce0ffd852816812e37a..4983620b3f37cdb3768b8c6bc1494c0a1606bdf1 100644 |
--- a/tests/compiler/dart2js/equivalence/check_helpers.dart |
+++ b/tests/compiler/dart2js/equivalence/check_helpers.dart |
@@ -339,6 +339,80 @@ bool checkConstantValueLists(Object object1, Object object2, String property, |
object1, object2, property, list1, list2, checkConstantValues); |
} |
+void checkLists( |
+ List list1, List list2, String messagePrefix, bool sameElement(a, b), |
+ {bool verbose: false, |
+ void onSameElement(a, b), |
+ void onDifferentElements(a, b), |
+ void onUnfoundElement(a), |
+ void onExtraElement(b), |
+ String elementToString(key): defaultToString}) { |
+ List<List> common = <List>[]; |
+ List mismatch = []; |
+ List unfound = []; |
+ List extra = []; |
+ int index = 0; |
+ while (index < list1.length && index < list2.length) { |
+ var element1 = list1[index]; |
+ var element2 = list2[index]; |
+ if (sameElement(element1, element2)) { |
+ if (onSameElement != null) { |
+ onSameElement(element1, element2); |
+ } |
+ common.add([element1, element2]); |
+ } else { |
+ if (onDifferentElements != null) { |
+ onDifferentElements(element1, element2); |
+ } |
+ mismatch = [element1, element2]; |
+ break; |
+ } |
+ index++; |
+ } |
+ for (int tail = index; tail < list1.length; tail++) { |
+ var element1 = list1[tail]; |
+ if (onUnfoundElement != null) { |
+ onUnfoundElement(element1); |
+ } |
+ unfound.add(element1); |
+ } |
+ for (int tail = index; tail < list2.length; tail++) { |
+ var element2 = list2[tail]; |
+ if (onExtraElement != null) { |
+ onExtraElement(element2); |
+ } |
+ extra.add(element2); |
+ } |
+ StringBuffer sb = new StringBuffer(); |
+ sb.write("$messagePrefix:"); |
+ if (verbose) { |
+ 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 (mismatch.isNotEmpty) { |
+ sb.write("\n Mismatch @ $index:\n " |
+ "${mismatch.map(elementToString).join('\n ')}"); |
+ } |
+ |
+ if (unfound.isNotEmpty || verbose) { |
+ sb.write("\n Unfound:\n ${unfound.map(elementToString).join('\n ')}"); |
+ } |
+ if (extra.isNotEmpty || verbose) { |
+ sb.write("\n Extra: \n ${extra.map(elementToString).join('\n ')}"); |
+ } |
+ String message = sb.toString(); |
+ if (mismatch.isNotEmpty) { |
+ Expect.fail(message); |
+ } else if (verbose) { |
+ print(message); |
+ } |
+} |
+ |
void checkSets( |
Iterable set1, Iterable set2, String messagePrefix, bool sameElement(a, b), |
{bool failOnUnfound: true, |