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

Unified Diff: tests/language/string_interpolate_test.dart

Issue 551823002: Optimize _GrowableArray._join and _StringBase._interpolate. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Removed operator+ change. Added more tests. Created 6 years, 3 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/corelib/iterable_join_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/string_interpolate_test.dart
diff --git a/tests/language/string_interpolate_test.dart b/tests/language/string_interpolate_test.dart
index ae9b0f0b24eb310e2f4e91f7e00c110453431c83..6961c285bef4641a8fcbb1ae4f2240aabdb9a358 100644
--- a/tests/language/string_interpolate_test.dart
+++ b/tests/language/string_interpolate_test.dart
@@ -21,45 +21,224 @@ class ThingamaBob extends WhatchamaCallIt {
toString() => "Hansel";
}
-class StringInterpolateTest {
-
- static const String A = "svin";
- static const String B = "hest";
- static const int N = 1 + 1;
- static String Printers;
- static String AAR_Printers;
-
- static testMain() {
- Printers = "Printers: $A and $B";
- AAR_Printers = "AAR has $N $Printers.";
-
- var x = 1;
- var s = "eins und \$x macht zwei.";
- print(s);
- Expect.equals(r"eins und $x macht zwei.", s);
-
- s = "eins und $x macht zwei.";
- print(s);
- Expect.equals(r"eins und 1 macht zwei.", s);
-
- print(AAR_Printers);
- Expect.equals(r"AAR has 2 Printers: svin and hest.", AAR_Printers);
-
- var s$eins = "eins";
- var $1 = 1;
- var zw = "zw";
- var ei = "ei";
- var zw$ei = "\"Martini, dry? Nai zwai.\"";
- s = "${s$eins} und ${$1} macht $zw$ei.";
- print(s);
- Expect.equals(r"eins und 1 macht zwei.", s);
-
- var t = new ThingamaBob("Gretel");
- print(t.foo());
- Expect.equals(t.foo(), "Hansel and Gretel");
- }
-}
+const String A = "svin";
+const String B = "hest";
+const int N = 1 + 1;
+String Printers;
+String AAR_Printers;
main() {
- StringInterpolateTest.testMain();
+ Printers = "Printers: $A and $B";
+ AAR_Printers = "AAR has $N $Printers.";
+
+ var x = 1;
+ var s = "eins und \$x macht zwei.";
+ print(s);
+ Expect.equals(r"eins und $x macht zwei.", s);
+
+ s = "eins und $x macht zwei.";
+ print(s);
+ Expect.equals(r"eins und 1 macht zwei.", s);
+
+ print(AAR_Printers);
+ Expect.equals(r"AAR has 2 Printers: svin and hest.", AAR_Printers);
+
+ var s$eins = "eins";
+ var $1 = 1;
+ var zw = "zw";
+ var ei = "ei";
+ var zw$ei = "\"Martini, dry? Nai zwai.\"";
+ s = "${s$eins} und ${$1} macht $zw$ei.";
+ print(s);
+ Expect.equals(r"eins und 1 macht zwei.", s);
+
+ var t = new ThingamaBob("Gretel");
+ print(t.foo());
+ Expect.equals(t.foo(), "Hansel and Gretel");
+
+ testStringVariants();
+}
+
+
+class Stringable {
+ final String value;
+ Stringable(this.value);
+ String toString() => value;
+ operator *(int count) => new Stringable(value * count);
+}
+
+void testStringVariants() {
+ String latin = "ab\x00\xff";
+ String nonLatin = "\u2000\u{10000}\ufeff";
+ Object oLatin = new Stringable(latin);
+ Object oNonLatin = new Stringable(nonLatin);
+
+ // ASCII.
+ Expect.equals(latin * 3, "$latin$latin$latin");
+ Expect.equals(latin * 64, "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin");
+ Expect.equals(latin * 64, "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}");
+ // Non-ASCII.
+ Expect.equals(nonLatin * 3, "$nonLatin$nonLatin$nonLatin");
+ Expect.equals(nonLatin * 64, "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin");
+ Expect.equals(nonLatin * 64, "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}"
+ "${nonLatin * 4}${nonLatin * 4}");
+ // Mixed.
+ Expect.equals(latin * 3 + nonLatin, "$latin$latin$latin$nonLatin");
+ Expect.equals(nonLatin + latin * 3, "$nonLatin$latin$latin$latin");
+ Expect.equals(latin * 60 + nonLatin * 4,
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin"
+ "$nonLatin$nonLatin$nonLatin$nonLatin");
+ Expect.equals(nonLatin * 4 + latin * 60,
+ "$nonLatin$nonLatin$nonLatin$nonLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin$latin$latin$latin$latin"
+ "$latin$latin$latin$latin");
+ Expect.equals(latin * 60 + nonLatin * 4,
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${nonLatin * 4}");
+ Expect.equals(nonLatin * 4 + latin * 60,
+ "${nonLatin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${latin * 4}");
+ // With objects.
+ Expect.equals(latin * 3, "$latin$oLatin$latin");
+ Expect.equals(latin * 64, "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ "$latin$latin$latin$latin$latin$latin$latin$oLatin"
+ );
+ Expect.equals(latin * 64, "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
+ "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
+ );
+ // Non-ASCII.
+ Expect.equals(nonLatin * 3, "$nonLatin$oNonLatin$nonLatin");
+ Expect.equals(nonLatin * 64, "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin"
+ "$nonLatin$nonLatin$nonLatin$oNonLatin");
+ Expect.equals(nonLatin * 64, "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}"
+ "${nonLatin * 4}${oNonLatin * 4}");
+ // Mixed.
+ Expect.equals(latin * 2 + nonLatin * 2, "$latin$oLatin$nonLatin$oNonLatin");
+ Expect.equals(nonLatin * 2 + latin * 2, "$nonLatin$oNonLatin$latin$oLatin");
+ Expect.equals((latin * 2 + nonLatin * 2) * 8,
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin"
+ "$latin$oLatin$nonLatin$oNonLatin");
+ Expect.equals((nonLatin * 2 + latin * 2) * 8,
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin"
+ "$nonLatin$oNonLatin$latin$oLatin");
+
+ // All combinations
+ var o1 = new Stringable("x");
+ var o2 = new Stringable("\ufeff");
+
+ Expect.equals("a\u2000x\ufeff", "${"a"}${"\u2000"}${o1}${o2}");
+ Expect.equals("a\u2000\ufeffx", "${"a"}${"\u2000"}${o2}${o1}");
+ Expect.equals("ax\u2000\ufeff", "${"a"}${o1}${"\u2000"}${o2}");
+ Expect.equals("ax\ufeff\u2000", "${"a"}${o1}${o2}${"\u2000"}");
+ Expect.equals("a\ufeffx\u2000", "${"a"}${o2}${o1}${"\u2000"}");
+ Expect.equals("a\ufeff\u2000x", "${"a"}${o2}${"\u2000"}${o1}");
+
+ Expect.equals("\u2000ax\ufeff", "${"\u2000"}${"a"}${o1}${o2}");
+ Expect.equals("\u2000a\ufeffx", "${"\u2000"}${"a"}${o2}${o1}");
+ Expect.equals("xa\u2000\ufeff", "${o1}${"a"}${"\u2000"}${o2}");
+ Expect.equals("xa\ufeff\u2000", "${o1}${"a"}${o2}${"\u2000"}");
+ Expect.equals("\ufeffax\u2000", "${o2}${"a"}${o1}${"\u2000"}");
+ Expect.equals("\ufeffa\u2000x", "${o2}${"a"}${"\u2000"}${o1}");
+
+ Expect.equals("\u2000xa\ufeff", "${"\u2000"}${o1}${"a"}${o2}");
+ Expect.equals("\u2000\ufeffax", "${"\u2000"}${o2}${"a"}${o1}");
+ Expect.equals("x\u2000a\ufeff", "${o1}${"\u2000"}${"a"}${o2}");
+ Expect.equals("x\ufeffa\u2000", "${o1}${o2}${"a"}${"\u2000"}");
+ Expect.equals("\ufeffxa\u2000", "${o2}${o1}${"a"}${"\u2000"}");
+ Expect.equals("\ufeff\u2000ax", "${o2}${"\u2000"}${"a"}${o1}");
+
+ Expect.equals("\u2000x\ufeffa", "${"\u2000"}${o1}${o2}${"a"}");
+ Expect.equals("\u2000\ufeffxa", "${"\u2000"}${o2}${o1}${"a"}");
+ Expect.equals("x\u2000\ufeffa", "${o1}${"\u2000"}${o2}${"a"}");
+ Expect.equals("x\ufeff\u2000a", "${o1}${o2}${"\u2000"}${"a"}");
+ Expect.equals("\ufeffx\u2000a", "${o2}${o1}${"\u2000"}${"a"}");
+ Expect.equals("\ufeff\u2000xa", "${o2}${"\u2000"}${o1}${"a"}");
}
« no previous file with comments | « tests/corelib/iterable_join_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698