| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- var CompoundString =
- {
- create: function(charCount, pointerCount, cloneCount, strings) {
- var ch = "a";
- var ptr = "<aaaaaaa>";
- var s = "";
- while(true) {
- s += ""; // nondestructive, clone if necessary
- for(var i = 0; i < charCount; ++i)
- s += ch; // destructive
- for(var i = 0; i < pointerCount; ++i)
- s += ptr; // destructive
- if(cloneCount === 0)
- break;
- var s2 = s + ch; // nondestructive, clone for appending
- strings.push(s);
- s = s2;
- --cloneCount;
- charCount >>= 2;
- pointerCount >>= 2;
- }
- strings.push(s);
- },
- createTestStrings: function() {
- var strings = [];
- for(var pointerCount = 0; pointerCount <= 128; pointerCount = pointerCount === 0 ? 1 : pointerCount << 2) {
- for(var charCount = 0; charCount <= 1024; charCount = charCount === 0 ? 1 : charCount << 2) {
- for(var cloneCount = 0; cloneCount <= 8; cloneCount = cloneCount === 0 ? 1 : cloneCount << 2) {
- this.create(charCount, pointerCount, cloneCount, strings);
- if(charCount !== 0)
- this.create(charCount + 1, pointerCount, cloneCount, strings);
- if(pointerCount !== 0)
- this.create(charCount + 1, pointerCount, cloneCount, strings);
- }
- }
- }
- var ch = "a";
- var ptr = "<aaaaaaa>";
- var replaceCh = "_";
- var replaceRegex = /_/;
- strings.push((ch + replaceCh + ch).replace(replaceRegex, ch));
- strings.push((ptr + replaceCh + ptr).replace(replaceRegex, ch));
- strings.push((ch + replaceCh + ch).replace(replaceRegex, ptr));
- strings.push((ptr + replaceCh + ptr).replace(replaceRegex, ptr));
- // Large CompoundString created by concatenating a string to itself multiple times
- var bigString = "b"; // not using "a" here so that the concats will be destructive
- for(var i = 0; i < 16; ++i)
- bigString += bigString; // destructive
- bigString += replaceCh;
- if(bigString.length !== 0x10001)
- throw new Error("Big string length is invalid");
- strings.push(bigString.replace(replaceRegex, ch));
- // String with a high nesting level of CompoundString objects
- var nestedCompoundString = "c";
- nestedCompoundString += "c";
- nestedCompoundString += "c";
- for(var i = 0; i < 100000; ++i) {
- var s = "c";
- s += "c";
- s += "c";
- s += nestedCompoundString;
- nestedCompoundString = s;
- }
- strings.push(nestedCompoundString);
- // String with a high nesting level of ConcatString objects
- var nestedConcatString = "d";
- for(var i = 0; i < 100000; ++i)
- nestedConcatString = "d" + nestedConcatString;
- strings.push(nestedConcatString);
- // String with a high nesting level of alternating CompoundString and ConcatString objects
- var nestedConcatCompoundString = "";
- for(var i = 0; i < 100000; ++i) {
- var s = "e";
- s += "e";
- s += "e";
- s += nestedConcatCompoundString;
- nestedConcatCompoundString = "e" + s;
- }
- strings.push(nestedConcatCompoundString);
- return strings;
- }
- };
|