1// Copyright 2008 the V8 project authors. All rights reserved. 2// Redistribution and use in source and binary forms, with or without 3// modification, are permitted provided that the following conditions are 4// met: 5// 6// * Redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer. 8// * Redistributions in binary form must reproduce the above 9// copyright notice, this list of conditions and the following 10// disclaimer in the documentation and/or other materials provided 11// with the distribution. 12// * Neither the name of Google Inc. nor the names of its 13// contributors may be used to endorse or promote products derived 14// from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28/** 29 * @fileoverview Check that flattening deep trees of cons strings does not 30 * cause stack overflows. 31 */ 32 33function newdeep(start, depth) { 34 var d = start; 35 for (var i = 0; i < depth; i++) { 36 d = d + "f"; 37 } 38 return d; 39} 40 41var default_depth = 110000; 42 43var deep = newdeep("foo", default_depth); 44assertEquals('f', deep[0]); 45 46var cmp1 = newdeep("a", default_depth); 47var cmp2 = newdeep("b", default_depth); 48 49assertEquals(-1, cmp1.localeCompare(cmp2), "ab"); 50 51var cmp2empty = newdeep("c", default_depth); 52assertTrue(cmp2empty.localeCompare("") > 0, "c"); 53 54var cmp3empty = newdeep("d", default_depth); 55assertTrue("".localeCompare(cmp3empty) < 0), "d"; 56 57var slicer_depth = 1100; 58 59var slicer = newdeep("slice", slicer_depth); 60 61for (i = 0; i < slicer_depth + 4; i += 2) { 62 slicer = slicer.slice(1, -1); 63} 64 65assertEquals("f", slicer[0]); 66assertEquals(1, slicer.length); 67