| // Try the dumpStringRepresentation shell function on various types of |
| // strings, and make sure it doesn't crash. |
| |
| if (typeof dumpStringRepresentation !== 'function') |
| quit(0); |
| |
| print("Empty string:"); |
| dumpStringRepresentation(""); |
| |
| print("\nResult of coercion to string:"); |
| dumpStringRepresentation(); |
| |
| print("\ns = Simple short atom:"); |
| var s = "xxxxxxxx"; |
| dumpStringRepresentation(s); |
| |
| // Simple non-atom flat. |
| print("\ns + s: Non-atom flat:"); |
| var s2 = s + s; |
| dumpStringRepresentation(s2); |
| |
| print("\nNon-Latin1 flat:"); |
| var j = "渋谷区"; |
| dumpStringRepresentation(j); |
| |
| print("\nt = Non-inline atom:"); |
| var t = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 31 characters |
| dumpStringRepresentation(t); |
| |
| print("\nr1 = t + s: Simple rope:"); |
| var r1 = t + s; |
| dumpStringRepresentation(r1); |
| |
| // Flatten that rope, and re-examine the representations of both the result and |
| // its former leaves. This should be an extensible string. |
| print("\nr1, former rope after flattening, now extensible:"); |
| r1.match(/x/); |
| dumpStringRepresentation(r1); |
| |
| print("\nt, s: Original leaves, representation unchanged:"); |
| dumpStringRepresentation(t); |
| dumpStringRepresentation(s); |
| |
| // Create a new rope with the extensible string as its left child. |
| print("\nr2 = r1 + s: Rope with extensible leftmost child:"); |
| var r2 = r1 + s; |
| dumpStringRepresentation(r2); |
| |
| // Flatten that; this should re-use the extensible string's buffer. |
| print("\nr2: flattened, stole r1's buffer:"); |
| r2.match(/x/); |
| dumpStringRepresentation(r2); |
| |
| print("\nr1: mutated into a dependent string:"); |
| dumpStringRepresentation(r1); |
| |
| print("\nr3 = r2 + s: a new rope with an extensible leftmost child:"); |
| r3 = r2 + s; |
| r3.match(/x/); |
| dumpStringRepresentation(r3); |
| |
| print("\nr2: now mutated into a dependent string"); |
| dumpStringRepresentation(r2); |
| |
| print("\nr1: now a doubly-dependent string, because of r2's mutation:"); |
| dumpStringRepresentation(r1); |
| |
| print("\nt, s: Original leaves, representation unchanged:"); |
| dumpStringRepresentation(t); |
| dumpStringRepresentation(s); |