/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package bugs

import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.condition.DisabledIfSystemProperty

import static groovy.test.GroovyAssert.assertScript

/**
 * Tests for GROOVY-7785: StackOverflowError with deeply nested chained method calls.
 * Each test uses chained method calls to verify the fix handles deep chains.
 * <p>
 * The fix (iterative chain flattening) is implemented in the invokedynamic
 * writer only; classic bytecode generation still overflows the stack on very
 * deep call chains. Classic is being phased out, so this is a documented
 * limitation rather than a bug to fix — hence the tests are skipped when
 * compiling with {@code groovy.target.indy=false}.
 */
@DisabledIfSystemProperty(named = 'groovy.target.indy', matches = '(?i)false',
    disabledReason = 'GROOVY-7785 deep-chain flattening is indy-only; classic codegen overflows on very deep chains')
final class Groovy7785 {

    @Test
    void testManyChainedMethodCalls() {
        // 1000 chained append calls on StringBuilder
        assertScript '''
            def r = new StringBuilder().append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a").append("a")
            assert r.toString() == 'a' * 1000
        '''
    }

    @Test
    void testChainedCaseConversions() {
        // 1000 chained toUpperCase/toLowerCase calls
        assertScript '''
            def result = "hello".toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase().toUpperCase().toLowerCase()
            assert result == "hello"  // 1000 is even, ends with toLowerCase
        '''
    }

    @Test
    void testChainedReplaceOperations() {
        // 1000 chained replace calls (none match, string unchanged)
        assertScript '''
            def result = "test string".replace("NOTFOUND0", "X").replace("NOTFOUND1", "X").replace("NOTFOUND2", "X").replace("NOTFOUND3", "X").replace("NOTFOUND4", "X").replace("NOTFOUND5", "X").replace("NOTFOUND6", "X").replace("NOTFOUND7", "X").replace("NOTFOUND8", "X").replace("NOTFOUND9", "X").replace("NOTFOUND10", "X").replace("NOTFOUND11", "X").replace("NOTFOUND12", "X").replace("NOTFOUND13", "X").replace("NOTFOUND14", "X").replace("NOTFOUND15", "X").replace("NOTFOUND16", "X").replace("NOTFOUND17", "X").replace("NOTFOUND18", "X").replace("NOTFOUND19", "X").replace("NOTFOUND20", "X").replace("NOTFOUND21", "X").replace("NOTFOUND22", "X").replace("NOTFOUND23", "X").replace("NOTFOUND24", "X").replace("NOTFOUND25", "X").replace("NOTFOUND26", "X").replace("NOTFOUND27", "X").replace("NOTFOUND28", "X").replace("NOTFOUND29", "X").replace("NOTFOUND30", "X").replace("NOTFOUND31", "X").replace("NOTFOUND32", "X").replace("NOTFOUND33", "X").replace("NOTFOUND34", "X").replace("NOTFOUND35", "X").replace("NOTFOUND36", "X").replace("NOTFOUND37", "X").replace("NOTFOUND38", "X").replace("NOTFOUND39", "X").replace("NOTFOUND40", "X").replace("NOTFOUND41", "X").replace("NOTFOUND42", "X").replace("NOTFOUND43", "X").replace("NOTFOUND44", "X").replace("NOTFOUND45", "X").replace("NOTFOUND46", "X").replace("NOTFOUND47", "X").replace("NOTFOUND48", "X").replace("NOTFOUND49", "X").replace("NOTFOUND50", "X").replace("NOTFOUND51", "X").replace("NOTFOUND52", "X").replace("NOTFOUND53", "X").replace("NOTFOUND54", "X").replace("NOTFOUND55", "X").replace("NOTFOUND56", "X").replace("NOTFOUND57", "X").replace("NOTFOUND58", "X").replace("NOTFOUND59", "X").replace("NOTFOUND60", "X").replace("NOTFOUND61", "X").replace("NOTFOUND62", "X").replace("NOTFOUND63", "X").replace("NOTFOUND64", "X").replace("NOTFOUND65", "X").replace("NOTFOUND66", "X").replace("NOTFOUND67", "X").replace("NOTFOUND68", "X").replace("NOTFOUND69", "X").replace("NOTFOUND70", "X").replace("NOTFOUND71", "X").replace("NOTFOUND72", "X").replace("NOTFOUND73", "X").replace("NOTFOUND74", "X").replace("NOTFOUND75", "X").replace("NOTFOUND76", "X").replace("NOTFOUND77", "X").replace("NOTFOUND78", "X").replace("NOTFOUND79", "X").replace("NOTFOUND80", "X").replace("NOTFOUND81", "X").replace("NOTFOUND82", "X").replace("NOTFOUND83", "X").replace("NOTFOUND84", "X").replace("NOTFOUND85", "X").replace("NOTFOUND86", "X").replace("NOTFOUND87", "X").replace("NOTFOUND88", "X").replace("NOTFOUND89", "X").replace("NOTFOUND90", "X").replace("NOTFOUND91", "X").replace("NOTFOUND92", "X").replace("NOTFOUND93", "X").replace("NOTFOUND94", "X").replace("NOTFOUND95", "X").replace("NOTFOUND96", "X").replace("NOTFOUND97", "X").replace("NOTFOUND98", "X").replace("NOTFOUND99", "X").replace("NOTFOUND100", "X").replace("NOTFOUND101", "X").replace("NOTFOUND102", "X").replace("NOTFOUND103", "X").replace("NOTFOUND104", "X").replace("NOTFOUND105", "X").replace("NOTFOUND106", "X").replace("NOTFOUND107", "X").replace("NOTFOUND108", "X").replace("NOTFOUND109", "X").replace("NOTFOUND110", "X").replace("NOTFOUND111", "X").replace("NOTFOUND112", "X").replace("NOTFOUND113", "X").replace("NOTFOUND114", "X").replace("NOTFOUND115", "X").replace("NOTFOUND116", "X").replace("NOTFOUND117", "X").replace("NOTFOUND118", "X").replace("NOTFOUND119", "X").replace("NOTFOUND120", "X").replace("NOTFOUND121", "X").replace("NOTFOUND122", "X").replace("NOTFOUND123", "X").replace("NOTFOUND124", "X").replace("NOTFOUND125", "X").replace("NOTFOUND126", "X").replace("NOTFOUND127", "X").replace("NOTFOUND128", "X").replace("NOTFOUND129", "X").replace("NOTFOUND130", "X").replace("NOTFOUND131", "X").replace("NOTFOUND132", "X").replace("NOTFOUND133", "X").replace("NOTFOUND134", "X").replace("NOTFOUND135", "X").replace("NOTFOUND136", "X").replace("NOTFOUND137", "X").replace("NOTFOUND138", "X").replace("NOTFOUND139", "X").replace("NOTFOUND140", "X").replace("NOTFOUND141", "X").replace("NOTFOUND142", "X").replace("NOTFOUND143", "X").replace("NOTFOUND144", "X").replace("NOTFOUND145", "X").replace("NOTFOUND146", "X").replace("NOTFOUND147", "X").replace("NOTFOUND148", "X").replace("NOTFOUND149", "X").replace("NOTFOUND150", "X").replace("NOTFOUND151", "X").replace("NOTFOUND152", "X").replace("NOTFOUND153", "X").replace("NOTFOUND154", "X").replace("NOTFOUND155", "X").replace("NOTFOUND156", "X").replace("NOTFOUND157", "X").replace("NOTFOUND158", "X").replace("NOTFOUND159", "X").replace("NOTFOUND160", "X").replace("NOTFOUND161", "X").replace("NOTFOUND162", "X").replace("NOTFOUND163", "X").replace("NOTFOUND164", "X").replace("NOTFOUND165", "X").replace("NOTFOUND166", "X").replace("NOTFOUND167", "X").replace("NOTFOUND168", "X").replace("NOTFOUND169", "X").replace("NOTFOUND170", "X").replace("NOTFOUND171", "X").replace("NOTFOUND172", "X").replace("NOTFOUND173", "X").replace("NOTFOUND174", "X").replace("NOTFOUND175", "X").replace("NOTFOUND176", "X").replace("NOTFOUND177", "X").replace("NOTFOUND178", "X").replace("NOTFOUND179", "X").replace("NOTFOUND180", "X").replace("NOTFOUND181", "X").replace("NOTFOUND182", "X").replace("NOTFOUND183", "X").replace("NOTFOUND184", "X").replace("NOTFOUND185", "X").replace("NOTFOUND186", "X").replace("NOTFOUND187", "X").replace("NOTFOUND188", "X").replace("NOTFOUND189", "X").replace("NOTFOUND190", "X").replace("NOTFOUND191", "X").replace("NOTFOUND192", "X").replace("NOTFOUND193", "X").replace("NOTFOUND194", "X").replace("NOTFOUND195", "X").replace("NOTFOUND196", "X").replace("NOTFOUND197", "X").replace("NOTFOUND198", "X").replace("NOTFOUND199", "X").replace("NOTFOUND200", "X").replace("NOTFOUND201", "X").replace("NOTFOUND202", "X").replace("NOTFOUND203", "X").replace("NOTFOUND204", "X").replace("NOTFOUND205", "X").replace("NOTFOUND206", "X").replace("NOTFOUND207", "X").replace("NOTFOUND208", "X").replace("NOTFOUND209", "X").replace("NOTFOUND210", "X").replace("NOTFOUND211", "X").replace("NOTFOUND212", "X").replace("NOTFOUND213", "X").replace("NOTFOUND214", "X").replace("NOTFOUND215", "X").replace("NOTFOUND216", "X").replace("NOTFOUND217", "X").replace("NOTFOUND218", "X").replace("NOTFOUND219", "X").replace("NOTFOUND220", "X").replace("NOTFOUND221", "X").replace("NOTFOUND222", "X").replace("NOTFOUND223", "X").replace("NOTFOUND224", "X").replace("NOTFOUND225", "X").replace("NOTFOUND226", "X").replace("NOTFOUND227", "X").replace("NOTFOUND228", "X").replace("NOTFOUND229", "X").replace("NOTFOUND230", "X").replace("NOTFOUND231", "X").replace("NOTFOUND232", "X").replace("NOTFOUND233", "X").replace("NOTFOUND234", "X").replace("NOTFOUND235", "X").replace("NOTFOUND236", "X").replace("NOTFOUND237", "X").replace("NOTFOUND238", "X").replace("NOTFOUND239", "X").replace("NOTFOUND240", "X").replace("NOTFOUND241", "X").replace("NOTFOUND242", "X").replace("NOTFOUND243", "X").replace("NOTFOUND244", "X").replace("NOTFOUND245", "X").replace("NOTFOUND246", "X").replace("NOTFOUND247", "X").replace("NOTFOUND248", "X").replace("NOTFOUND249", "X").replace("NOTFOUND250", "X").replace("NOTFOUND251", "X").replace("NOTFOUND252", "X").replace("NOTFOUND253", "X").replace("NOTFOUND254", "X").replace("NOTFOUND255", "X").replace("NOTFOUND256", "X").replace("NOTFOUND257", "X").replace("NOTFOUND258", "X").replace("NOTFOUND259", "X").replace("NOTFOUND260", "X").replace("NOTFOUND261", "X").replace("NOTFOUND262", "X").replace("NOTFOUND263", "X").replace("NOTFOUND264", "X").replace("NOTFOUND265", "X").replace("NOTFOUND266", "X").replace("NOTFOUND267", "X").replace("NOTFOUND268", "X").replace("NOTFOUND269", "X").replace("NOTFOUND270", "X").replace("NOTFOUND271", "X").replace("NOTFOUND272", "X").replace("NOTFOUND273", "X").replace("NOTFOUND274", "X").replace("NOTFOUND275", "X").replace("NOTFOUND276", "X").replace("NOTFOUND277", "X").replace("NOTFOUND278", "X").replace("NOTFOUND279", "X").replace("NOTFOUND280", "X").replace("NOTFOUND281", "X").replace("NOTFOUND282", "X").replace("NOTFOUND283", "X").replace("NOTFOUND284", "X").replace("NOTFOUND285", "X").replace("NOTFOUND286", "X").replace("NOTFOUND287", "X").replace("NOTFOUND288", "X").replace("NOTFOUND289", "X").replace("NOTFOUND290", "X").replace("NOTFOUND291", "X").replace("NOTFOUND292", "X").replace("NOTFOUND293", "X").replace("NOTFOUND294", "X").replace("NOTFOUND295", "X").replace("NOTFOUND296", "X").replace("NOTFOUND297", "X").replace("NOTFOUND298", "X").replace("NOTFOUND299", "X").replace("NOTFOUND300", "X").replace("NOTFOUND301", "X").replace("NOTFOUND302", "X").replace("NOTFOUND303", "X").replace("NOTFOUND304", "X").replace("NOTFOUND305", "X").replace("NOTFOUND306", "X").replace("NOTFOUND307", "X").replace("NOTFOUND308", "X").replace("NOTFOUND309", "X").replace("NOTFOUND310", "X").replace("NOTFOUND311", "X").replace("NOTFOUND312", "X").replace("NOTFOUND313", "X").replace("NOTFOUND314", "X").replace("NOTFOUND315", "X").replace("NOTFOUND316", "X").replace("NOTFOUND317", "X").replace("NOTFOUND318", "X").replace("NOTFOUND319", "X").replace("NOTFOUND320", "X").replace("NOTFOUND321", "X").replace("NOTFOUND322", "X").replace("NOTFOUND323", "X").replace("NOTFOUND324", "X").replace("NOTFOUND325", "X").replace("NOTFOUND326", "X").replace("NOTFOUND327", "X").replace("NOTFOUND328", "X").replace("NOTFOUND329", "X").replace("NOTFOUND330", "X").replace("NOTFOUND331", "X").replace("NOTFOUND332", "X").replace("NOTFOUND333", "X").replace("NOTFOUND334", "X").replace("NOTFOUND335", "X").replace("NOTFOUND336", "X").replace("NOTFOUND337", "X").replace("NOTFOUND338", "X").replace("NOTFOUND339", "X").replace("NOTFOUND340", "X").replace("NOTFOUND341", "X").replace("NOTFOUND342", "X").replace("NOTFOUND343", "X").replace("NOTFOUND344", "X").replace("NOTFOUND345", "X").replace("NOTFOUND346", "X").replace("NOTFOUND347", "X").replace("NOTFOUND348", "X").replace("NOTFOUND349", "X").replace("NOTFOUND350", "X").replace("NOTFOUND351", "X").replace("NOTFOUND352", "X").replace("NOTFOUND353", "X").replace("NOTFOUND354", "X").replace("NOTFOUND355", "X").replace("NOTFOUND356", "X").replace("NOTFOUND357", "X").replace("NOTFOUND358", "X").replace("NOTFOUND359", "X").replace("NOTFOUND360", "X").replace("NOTFOUND361", "X").replace("NOTFOUND362", "X").replace("NOTFOUND363", "X").replace("NOTFOUND364", "X").replace("NOTFOUND365", "X").replace("NOTFOUND366", "X").replace("NOTFOUND367", "X").replace("NOTFOUND368", "X").replace("NOTFOUND369", "X").replace("NOTFOUND370", "X").replace("NOTFOUND371", "X").replace("NOTFOUND372", "X").replace("NOTFOUND373", "X").replace("NOTFOUND374", "X").replace("NOTFOUND375", "X").replace("NOTFOUND376", "X").replace("NOTFOUND377", "X").replace("NOTFOUND378", "X").replace("NOTFOUND379", "X").replace("NOTFOUND380", "X").replace("NOTFOUND381", "X").replace("NOTFOUND382", "X").replace("NOTFOUND383", "X").replace("NOTFOUND384", "X").replace("NOTFOUND385", "X").replace("NOTFOUND386", "X").replace("NOTFOUND387", "X").replace("NOTFOUND388", "X").replace("NOTFOUND389", "X").replace("NOTFOUND390", "X").replace("NOTFOUND391", "X").replace("NOTFOUND392", "X").replace("NOTFOUND393", "X").replace("NOTFOUND394", "X").replace("NOTFOUND395", "X").replace("NOTFOUND396", "X").replace("NOTFOUND397", "X").replace("NOTFOUND398", "X").replace("NOTFOUND399", "X").replace("NOTFOUND400", "X").replace("NOTFOUND401", "X").replace("NOTFOUND402", "X").replace("NOTFOUND403", "X").replace("NOTFOUND404", "X").replace("NOTFOUND405", "X").replace("NOTFOUND406", "X").replace("NOTFOUND407", "X").replace("NOTFOUND408", "X").replace("NOTFOUND409", "X").replace("NOTFOUND410", "X").replace("NOTFOUND411", "X").replace("NOTFOUND412", "X").replace("NOTFOUND413", "X").replace("NOTFOUND414", "X").replace("NOTFOUND415", "X").replace("NOTFOUND416", "X").replace("NOTFOUND417", "X").replace("NOTFOUND418", "X").replace("NOTFOUND419", "X").replace("NOTFOUND420", "X").replace("NOTFOUND421", "X").replace("NOTFOUND422", "X").replace("NOTFOUND423", "X").replace("NOTFOUND424", "X").replace("NOTFOUND425", "X").replace("NOTFOUND426", "X").replace("NOTFOUND427", "X").replace("NOTFOUND428", "X").replace("NOTFOUND429", "X").replace("NOTFOUND430", "X").replace("NOTFOUND431", "X").replace("NOTFOUND432", "X").replace("NOTFOUND433", "X").replace("NOTFOUND434", "X").replace("NOTFOUND435", "X").replace("NOTFOUND436", "X").replace("NOTFOUND437", "X").replace("NOTFOUND438", "X").replace("NOTFOUND439", "X").replace("NOTFOUND440", "X").replace("NOTFOUND441", "X").replace("NOTFOUND442", "X").replace("NOTFOUND443", "X").replace("NOTFOUND444", "X").replace("NOTFOUND445", "X").replace("NOTFOUND446", "X").replace("NOTFOUND447", "X").replace("NOTFOUND448", "X").replace("NOTFOUND449", "X").replace("NOTFOUND450", "X").replace("NOTFOUND451", "X").replace("NOTFOUND452", "X").replace("NOTFOUND453", "X").replace("NOTFOUND454", "X").replace("NOTFOUND455", "X").replace("NOTFOUND456", "X").replace("NOTFOUND457", "X").replace("NOTFOUND458", "X").replace("NOTFOUND459", "X").replace("NOTFOUND460", "X").replace("NOTFOUND461", "X").replace("NOTFOUND462", "X").replace("NOTFOUND463", "X").replace("NOTFOUND464", "X").replace("NOTFOUND465", "X").replace("NOTFOUND466", "X").replace("NOTFOUND467", "X").replace("NOTFOUND468", "X").replace("NOTFOUND469", "X").replace("NOTFOUND470", "X").replace("NOTFOUND471", "X").replace("NOTFOUND472", "X").replace("NOTFOUND473", "X").replace("NOTFOUND474", "X").replace("NOTFOUND475", "X").replace("NOTFOUND476", "X").replace("NOTFOUND477", "X").replace("NOTFOUND478", "X").replace("NOTFOUND479", "X").replace("NOTFOUND480", "X").replace("NOTFOUND481", "X").replace("NOTFOUND482", "X").replace("NOTFOUND483", "X").replace("NOTFOUND484", "X").replace("NOTFOUND485", "X").replace("NOTFOUND486", "X").replace("NOTFOUND487", "X").replace("NOTFOUND488", "X").replace("NOTFOUND489", "X").replace("NOTFOUND490", "X").replace("NOTFOUND491", "X").replace("NOTFOUND492", "X").replace("NOTFOUND493", "X").replace("NOTFOUND494", "X").replace("NOTFOUND495", "X").replace("NOTFOUND496", "X").replace("NOTFOUND497", "X").replace("NOTFOUND498", "X").replace("NOTFOUND499", "X").replace("NOTFOUND500", "X").replace("NOTFOUND501", "X").replace("NOTFOUND502", "X").replace("NOTFOUND503", "X").replace("NOTFOUND504", "X").replace("NOTFOUND505", "X").replace("NOTFOUND506", "X").replace("NOTFOUND507", "X").replace("NOTFOUND508", "X").replace("NOTFOUND509", "X").replace("NOTFOUND510", "X").replace("NOTFOUND511", "X").replace("NOTFOUND512", "X").replace("NOTFOUND513", "X").replace("NOTFOUND514", "X").replace("NOTFOUND515", "X").replace("NOTFOUND516", "X").replace("NOTFOUND517", "X").replace("NOTFOUND518", "X").replace("NOTFOUND519", "X").replace("NOTFOUND520", "X").replace("NOTFOUND521", "X").replace("NOTFOUND522", "X").replace("NOTFOUND523", "X").replace("NOTFOUND524", "X").replace("NOTFOUND525", "X").replace("NOTFOUND526", "X").replace("NOTFOUND527", "X").replace("NOTFOUND528", "X").replace("NOTFOUND529", "X").replace("NOTFOUND530", "X").replace("NOTFOUND531", "X").replace("NOTFOUND532", "X").replace("NOTFOUND533", "X").replace("NOTFOUND534", "X").replace("NOTFOUND535", "X").replace("NOTFOUND536", "X").replace("NOTFOUND537", "X").replace("NOTFOUND538", "X").replace("NOTFOUND539", "X").replace("NOTFOUND540", "X").replace("NOTFOUND541", "X").replace("NOTFOUND542", "X").replace("NOTFOUND543", "X").replace("NOTFOUND544", "X").replace("NOTFOUND545", "X").replace("NOTFOUND546", "X").replace("NOTFOUND547", "X").replace("NOTFOUND548", "X").replace("NOTFOUND549", "X").replace("NOTFOUND550", "X").replace("NOTFOUND551", "X").replace("NOTFOUND552", "X").replace("NOTFOUND553", "X").replace("NOTFOUND554", "X").replace("NOTFOUND555", "X").replace("NOTFOUND556", "X").replace("NOTFOUND557", "X").replace("NOTFOUND558", "X").replace("NOTFOUND559", "X").replace("NOTFOUND560", "X").replace("NOTFOUND561", "X").replace("NOTFOUND562", "X").replace("NOTFOUND563", "X").replace("NOTFOUND564", "X").replace("NOTFOUND565", "X").replace("NOTFOUND566", "X").replace("NOTFOUND567", "X").replace("NOTFOUND568", "X").replace("NOTFOUND569", "X").replace("NOTFOUND570", "X").replace("NOTFOUND571", "X").replace("NOTFOUND572", "X").replace("NOTFOUND573", "X").replace("NOTFOUND574", "X").replace("NOTFOUND575", "X").replace("NOTFOUND576", "X").replace("NOTFOUND577", "X").replace("NOTFOUND578", "X").replace("NOTFOUND579", "X").replace("NOTFOUND580", "X").replace("NOTFOUND581", "X").replace("NOTFOUND582", "X").replace("NOTFOUND583", "X").replace("NOTFOUND584", "X").replace("NOTFOUND585", "X").replace("NOTFOUND586", "X").replace("NOTFOUND587", "X").replace("NOTFOUND588", "X").replace("NOTFOUND589", "X").replace("NOTFOUND590", "X").replace("NOTFOUND591", "X").replace("NOTFOUND592", "X").replace("NOTFOUND593", "X").replace("NOTFOUND594", "X").replace("NOTFOUND595", "X").replace("NOTFOUND596", "X").replace("NOTFOUND597", "X").replace("NOTFOUND598", "X").replace("NOTFOUND599", "X").replace("NOTFOUND600", "X").replace("NOTFOUND601", "X").replace("NOTFOUND602", "X").replace("NOTFOUND603", "X").replace("NOTFOUND604", "X").replace("NOTFOUND605", "X").replace("NOTFOUND606", "X").replace("NOTFOUND607", "X").replace("NOTFOUND608", "X").replace("NOTFOUND609", "X").replace("NOTFOUND610", "X").replace("NOTFOUND611", "X").replace("NOTFOUND612", "X").replace("NOTFOUND613", "X").replace("NOTFOUND614", "X").replace("NOTFOUND615", "X").replace("NOTFOUND616", "X").replace("NOTFOUND617", "X").replace("NOTFOUND618", "X").replace("NOTFOUND619", "X").replace("NOTFOUND620", "X").replace("NOTFOUND621", "X").replace("NOTFOUND622", "X").replace("NOTFOUND623", "X").replace("NOTFOUND624", "X").replace("NOTFOUND625", "X").replace("NOTFOUND626", "X").replace("NOTFOUND627", "X").replace("NOTFOUND628", "X").replace("NOTFOUND629", "X").replace("NOTFOUND630", "X").replace("NOTFOUND631", "X").replace("NOTFOUND632", "X").replace("NOTFOUND633", "X").replace("NOTFOUND634", "X").replace("NOTFOUND635", "X").replace("NOTFOUND636", "X").replace("NOTFOUND637", "X").replace("NOTFOUND638", "X").replace("NOTFOUND639", "X").replace("NOTFOUND640", "X").replace("NOTFOUND641", "X").replace("NOTFOUND642", "X").replace("NOTFOUND643", "X").replace("NOTFOUND644", "X").replace("NOTFOUND645", "X").replace("NOTFOUND646", "X").replace("NOTFOUND647", "X").replace("NOTFOUND648", "X").replace("NOTFOUND649", "X").replace("NOTFOUND650", "X").replace("NOTFOUND651", "X").replace("NOTFOUND652", "X").replace("NOTFOUND653", "X").replace("NOTFOUND654", "X").replace("NOTFOUND655", "X").replace("NOTFOUND656", "X").replace("NOTFOUND657", "X").replace("NOTFOUND658", "X").replace("NOTFOUND659", "X").replace("NOTFOUND660", "X").replace("NOTFOUND661", "X").replace("NOTFOUND662", "X").replace("NOTFOUND663", "X").replace("NOTFOUND664", "X").replace("NOTFOUND665", "X").replace("NOTFOUND666", "X").replace("NOTFOUND667", "X").replace("NOTFOUND668", "X").replace("NOTFOUND669", "X").replace("NOTFOUND670", "X").replace("NOTFOUND671", "X").replace("NOTFOUND672", "X").replace("NOTFOUND673", "X").replace("NOTFOUND674", "X").replace("NOTFOUND675", "X").replace("NOTFOUND676", "X").replace("NOTFOUND677", "X").replace("NOTFOUND678", "X").replace("NOTFOUND679", "X").replace("NOTFOUND680", "X").replace("NOTFOUND681", "X").replace("NOTFOUND682", "X").replace("NOTFOUND683", "X").replace("NOTFOUND684", "X").replace("NOTFOUND685", "X").replace("NOTFOUND686", "X").replace("NOTFOUND687", "X").replace("NOTFOUND688", "X").replace("NOTFOUND689", "X").replace("NOTFOUND690", "X").replace("NOTFOUND691", "X").replace("NOTFOUND692", "X").replace("NOTFOUND693", "X").replace("NOTFOUND694", "X").replace("NOTFOUND695", "X").replace("NOTFOUND696", "X").replace("NOTFOUND697", "X").replace("NOTFOUND698", "X").replace("NOTFOUND699", "X").replace("NOTFOUND700", "X").replace("NOTFOUND701", "X").replace("NOTFOUND702", "X").replace("NOTFOUND703", "X").replace("NOTFOUND704", "X").replace("NOTFOUND705", "X").replace("NOTFOUND706", "X").replace("NOTFOUND707", "X").replace("NOTFOUND708", "X").replace("NOTFOUND709", "X").replace("NOTFOUND710", "X").replace("NOTFOUND711", "X").replace("NOTFOUND712", "X").replace("NOTFOUND713", "X").replace("NOTFOUND714", "X").replace("NOTFOUND715", "X").replace("NOTFOUND716", "X").replace("NOTFOUND717", "X").replace("NOTFOUND718", "X").replace("NOTFOUND719", "X").replace("NOTFOUND720", "X").replace("NOTFOUND721", "X").replace("NOTFOUND722", "X").replace("NOTFOUND723", "X").replace("NOTFOUND724", "X").replace("NOTFOUND725", "X").replace("NOTFOUND726", "X").replace("NOTFOUND727", "X").replace("NOTFOUND728", "X").replace("NOTFOUND729", "X").replace("NOTFOUND730", "X").replace("NOTFOUND731", "X").replace("NOTFOUND732", "X").replace("NOTFOUND733", "X").replace("NOTFOUND734", "X").replace("NOTFOUND735", "X").replace("NOTFOUND736", "X").replace("NOTFOUND737", "X").replace("NOTFOUND738", "X").replace("NOTFOUND739", "X").replace("NOTFOUND740", "X").replace("NOTFOUND741", "X").replace("NOTFOUND742", "X").replace("NOTFOUND743", "X").replace("NOTFOUND744", "X").replace("NOTFOUND745", "X").replace("NOTFOUND746", "X").replace("NOTFOUND747", "X").replace("NOTFOUND748", "X").replace("NOTFOUND749", "X").replace("NOTFOUND750", "X").replace("NOTFOUND751", "X").replace("NOTFOUND752", "X").replace("NOTFOUND753", "X").replace("NOTFOUND754", "X").replace("NOTFOUND755", "X").replace("NOTFOUND756", "X").replace("NOTFOUND757", "X").replace("NOTFOUND758", "X").replace("NOTFOUND759", "X").replace("NOTFOUND760", "X").replace("NOTFOUND761", "X").replace("NOTFOUND762", "X").replace("NOTFOUND763", "X").replace("NOTFOUND764", "X").replace("NOTFOUND765", "X").replace("NOTFOUND766", "X").replace("NOTFOUND767", "X").replace("NOTFOUND768", "X").replace("NOTFOUND769", "X").replace("NOTFOUND770", "X").replace("NOTFOUND771", "X").replace("NOTFOUND772", "X").replace("NOTFOUND773", "X").replace("NOTFOUND774", "X").replace("NOTFOUND775", "X").replace("NOTFOUND776", "X").replace("NOTFOUND777", "X").replace("NOTFOUND778", "X").replace("NOTFOUND779", "X").replace("NOTFOUND780", "X").replace("NOTFOUND781", "X").replace("NOTFOUND782", "X").replace("NOTFOUND783", "X").replace("NOTFOUND784", "X").replace("NOTFOUND785", "X").replace("NOTFOUND786", "X").replace("NOTFOUND787", "X").replace("NOTFOUND788", "X").replace("NOTFOUND789", "X").replace("NOTFOUND790", "X").replace("NOTFOUND791", "X").replace("NOTFOUND792", "X").replace("NOTFOUND793", "X").replace("NOTFOUND794", "X").replace("NOTFOUND795", "X").replace("NOTFOUND796", "X").replace("NOTFOUND797", "X").replace("NOTFOUND798", "X").replace("NOTFOUND799", "X").replace("NOTFOUND800", "X").replace("NOTFOUND801", "X").replace("NOTFOUND802", "X").replace("NOTFOUND803", "X").replace("NOTFOUND804", "X").replace("NOTFOUND805", "X").replace("NOTFOUND806", "X").replace("NOTFOUND807", "X").replace("NOTFOUND808", "X").replace("NOTFOUND809", "X").replace("NOTFOUND810", "X").replace("NOTFOUND811", "X").replace("NOTFOUND812", "X").replace("NOTFOUND813", "X").replace("NOTFOUND814", "X").replace("NOTFOUND815", "X").replace("NOTFOUND816", "X").replace("NOTFOUND817", "X").replace("NOTFOUND818", "X").replace("NOTFOUND819", "X").replace("NOTFOUND820", "X").replace("NOTFOUND821", "X").replace("NOTFOUND822", "X").replace("NOTFOUND823", "X").replace("NOTFOUND824", "X").replace("NOTFOUND825", "X").replace("NOTFOUND826", "X").replace("NOTFOUND827", "X").replace("NOTFOUND828", "X").replace("NOTFOUND829", "X").replace("NOTFOUND830", "X").replace("NOTFOUND831", "X").replace("NOTFOUND832", "X").replace("NOTFOUND833", "X").replace("NOTFOUND834", "X").replace("NOTFOUND835", "X").replace("NOTFOUND836", "X").replace("NOTFOUND837", "X").replace("NOTFOUND838", "X").replace("NOTFOUND839", "X").replace("NOTFOUND840", "X").replace("NOTFOUND841", "X").replace("NOTFOUND842", "X").replace("NOTFOUND843", "X").replace("NOTFOUND844", "X").replace("NOTFOUND845", "X").replace("NOTFOUND846", "X").replace("NOTFOUND847", "X").replace("NOTFOUND848", "X").replace("NOTFOUND849", "X").replace("NOTFOUND850", "X").replace("NOTFOUND851", "X").replace("NOTFOUND852", "X").replace("NOTFOUND853", "X").replace("NOTFOUND854", "X").replace("NOTFOUND855", "X").replace("NOTFOUND856", "X").replace("NOTFOUND857", "X").replace("NOTFOUND858", "X").replace("NOTFOUND859", "X").replace("NOTFOUND860", "X").replace("NOTFOUND861", "X").replace("NOTFOUND862", "X").replace("NOTFOUND863", "X").replace("NOTFOUND864", "X").replace("NOTFOUND865", "X").replace("NOTFOUND866", "X").replace("NOTFOUND867", "X").replace("NOTFOUND868", "X").replace("NOTFOUND869", "X").replace("NOTFOUND870", "X").replace("NOTFOUND871", "X").replace("NOTFOUND872", "X").replace("NOTFOUND873", "X").replace("NOTFOUND874", "X").replace("NOTFOUND875", "X").replace("NOTFOUND876", "X").replace("NOTFOUND877", "X").replace("NOTFOUND878", "X").replace("NOTFOUND879", "X").replace("NOTFOUND880", "X").replace("NOTFOUND881", "X").replace("NOTFOUND882", "X").replace("NOTFOUND883", "X").replace("NOTFOUND884", "X").replace("NOTFOUND885", "X").replace("NOTFOUND886", "X").replace("NOTFOUND887", "X").replace("NOTFOUND888", "X").replace("NOTFOUND889", "X").replace("NOTFOUND890", "X").replace("NOTFOUND891", "X").replace("NOTFOUND892", "X").replace("NOTFOUND893", "X").replace("NOTFOUND894", "X").replace("NOTFOUND895", "X").replace("NOTFOUND896", "X").replace("NOTFOUND897", "X").replace("NOTFOUND898", "X").replace("NOTFOUND899", "X").replace("NOTFOUND900", "X").replace("NOTFOUND901", "X").replace("NOTFOUND902", "X").replace("NOTFOUND903", "X").replace("NOTFOUND904", "X").replace("NOTFOUND905", "X").replace("NOTFOUND906", "X").replace("NOTFOUND907", "X").replace("NOTFOUND908", "X").replace("NOTFOUND909", "X").replace("NOTFOUND910", "X").replace("NOTFOUND911", "X").replace("NOTFOUND912", "X").replace("NOTFOUND913", "X").replace("NOTFOUND914", "X").replace("NOTFOUND915", "X").replace("NOTFOUND916", "X").replace("NOTFOUND917", "X").replace("NOTFOUND918", "X").replace("NOTFOUND919", "X").replace("NOTFOUND920", "X").replace("NOTFOUND921", "X").replace("NOTFOUND922", "X").replace("NOTFOUND923", "X").replace("NOTFOUND924", "X").replace("NOTFOUND925", "X").replace("NOTFOUND926", "X").replace("NOTFOUND927", "X").replace("NOTFOUND928", "X").replace("NOTFOUND929", "X").replace("NOTFOUND930", "X").replace("NOTFOUND931", "X").replace("NOTFOUND932", "X").replace("NOTFOUND933", "X").replace("NOTFOUND934", "X").replace("NOTFOUND935", "X").replace("NOTFOUND936", "X").replace("NOTFOUND937", "X").replace("NOTFOUND938", "X").replace("NOTFOUND939", "X").replace("NOTFOUND940", "X").replace("NOTFOUND941", "X").replace("NOTFOUND942", "X").replace("NOTFOUND943", "X").replace("NOTFOUND944", "X").replace("NOTFOUND945", "X").replace("NOTFOUND946", "X").replace("NOTFOUND947", "X").replace("NOTFOUND948", "X").replace("NOTFOUND949", "X").replace("NOTFOUND950", "X").replace("NOTFOUND951", "X").replace("NOTFOUND952", "X").replace("NOTFOUND953", "X").replace("NOTFOUND954", "X").replace("NOTFOUND955", "X").replace("NOTFOUND956", "X").replace("NOTFOUND957", "X").replace("NOTFOUND958", "X").replace("NOTFOUND959", "X").replace("NOTFOUND960", "X").replace("NOTFOUND961", "X").replace("NOTFOUND962", "X").replace("NOTFOUND963", "X").replace("NOTFOUND964", "X").replace("NOTFOUND965", "X").replace("NOTFOUND966", "X").replace("NOTFOUND967", "X").replace("NOTFOUND968", "X").replace("NOTFOUND969", "X").replace("NOTFOUND970", "X").replace("NOTFOUND971", "X").replace("NOTFOUND972", "X").replace("NOTFOUND973", "X").replace("NOTFOUND974", "X").replace("NOTFOUND975", "X").replace("NOTFOUND976", "X").replace("NOTFOUND977", "X").replace("NOTFOUND978", "X").replace("NOTFOUND979", "X").replace("NOTFOUND980", "X").replace("NOTFOUND981", "X").replace("NOTFOUND982", "X").replace("NOTFOUND983", "X").replace("NOTFOUND984", "X").replace("NOTFOUND985", "X").replace("NOTFOUND986", "X").replace("NOTFOUND987", "X").replace("NOTFOUND988", "X").replace("NOTFOUND989", "X").replace("NOTFOUND990", "X").replace("NOTFOUND991", "X").replace("NOTFOUND992", "X").replace("NOTFOUND993", "X").replace("NOTFOUND994", "X").replace("NOTFOUND995", "X").replace("NOTFOUND996", "X").replace("NOTFOUND997", "X").replace("NOTFOUND998", "X").replace("NOTFOUND999", "X")
            assert result == "test string"
        '''
    }

    @Test
    void testChainedTrimOperations() {
        // 1000 chained trim calls (idempotent operation)
        assertScript '''
            def result = "  hello world  ".trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim()
            assert result == "hello world"
        '''
    }

    @Test
    void testChainedCollectionOperations() {
        // 1000 chained collect calls on a list
        assertScript '''
            def result = [1, 2, 3].collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }.collect { it }
            assert result == [1, 2, 3]
        '''
    }

    @Test
    void testChainedBuilderPattern() {
        // 1000 chained builder set calls
        assertScript '''
            class Builder {
                private map = [:]
                Builder set(String key, value) {
                    map[key] = value
                    return this
                }
                Map build() { map }
            }

            def result = new Builder().set("k0", 0).set("k1", 1).set("k2", 2).set("k3", 3).set("k4", 4).set("k5", 5).set("k6", 6).set("k7", 7).set("k8", 8).set("k9", 9).set("k10", 10).set("k11", 11).set("k12", 12).set("k13", 13).set("k14", 14).set("k15", 15).set("k16", 16).set("k17", 17).set("k18", 18).set("k19", 19).set("k20", 20).set("k21", 21).set("k22", 22).set("k23", 23).set("k24", 24).set("k25", 25).set("k26", 26).set("k27", 27).set("k28", 28).set("k29", 29).set("k30", 30).set("k31", 31).set("k32", 32).set("k33", 33).set("k34", 34).set("k35", 35).set("k36", 36).set("k37", 37).set("k38", 38).set("k39", 39).set("k40", 40).set("k41", 41).set("k42", 42).set("k43", 43).set("k44", 44).set("k45", 45).set("k46", 46).set("k47", 47).set("k48", 48).set("k49", 49).set("k50", 50).set("k51", 51).set("k52", 52).set("k53", 53).set("k54", 54).set("k55", 55).set("k56", 56).set("k57", 57).set("k58", 58).set("k59", 59).set("k60", 60).set("k61", 61).set("k62", 62).set("k63", 63).set("k64", 64).set("k65", 65).set("k66", 66).set("k67", 67).set("k68", 68).set("k69", 69).set("k70", 70).set("k71", 71).set("k72", 72).set("k73", 73).set("k74", 74).set("k75", 75).set("k76", 76).set("k77", 77).set("k78", 78).set("k79", 79).set("k80", 80).set("k81", 81).set("k82", 82).set("k83", 83).set("k84", 84).set("k85", 85).set("k86", 86).set("k87", 87).set("k88", 88).set("k89", 89).set("k90", 90).set("k91", 91).set("k92", 92).set("k93", 93).set("k94", 94).set("k95", 95).set("k96", 96).set("k97", 97).set("k98", 98).set("k99", 99).set("k100", 100).set("k101", 101).set("k102", 102).set("k103", 103).set("k104", 104).set("k105", 105).set("k106", 106).set("k107", 107).set("k108", 108).set("k109", 109).set("k110", 110).set("k111", 111).set("k112", 112).set("k113", 113).set("k114", 114).set("k115", 115).set("k116", 116).set("k117", 117).set("k118", 118).set("k119", 119).set("k120", 120).set("k121", 121).set("k122", 122).set("k123", 123).set("k124", 124).set("k125", 125).set("k126", 126).set("k127", 127).set("k128", 128).set("k129", 129).set("k130", 130).set("k131", 131).set("k132", 132).set("k133", 133).set("k134", 134).set("k135", 135).set("k136", 136).set("k137", 137).set("k138", 138).set("k139", 139).set("k140", 140).set("k141", 141).set("k142", 142).set("k143", 143).set("k144", 144).set("k145", 145).set("k146", 146).set("k147", 147).set("k148", 148).set("k149", 149).set("k150", 150).set("k151", 151).set("k152", 152).set("k153", 153).set("k154", 154).set("k155", 155).set("k156", 156).set("k157", 157).set("k158", 158).set("k159", 159).set("k160", 160).set("k161", 161).set("k162", 162).set("k163", 163).set("k164", 164).set("k165", 165).set("k166", 166).set("k167", 167).set("k168", 168).set("k169", 169).set("k170", 170).set("k171", 171).set("k172", 172).set("k173", 173).set("k174", 174).set("k175", 175).set("k176", 176).set("k177", 177).set("k178", 178).set("k179", 179).set("k180", 180).set("k181", 181).set("k182", 182).set("k183", 183).set("k184", 184).set("k185", 185).set("k186", 186).set("k187", 187).set("k188", 188).set("k189", 189).set("k190", 190).set("k191", 191).set("k192", 192).set("k193", 193).set("k194", 194).set("k195", 195).set("k196", 196).set("k197", 197).set("k198", 198).set("k199", 199).set("k200", 200).set("k201", 201).set("k202", 202).set("k203", 203).set("k204", 204).set("k205", 205).set("k206", 206).set("k207", 207).set("k208", 208).set("k209", 209).set("k210", 210).set("k211", 211).set("k212", 212).set("k213", 213).set("k214", 214).set("k215", 215).set("k216", 216).set("k217", 217).set("k218", 218).set("k219", 219).set("k220", 220).set("k221", 221).set("k222", 222).set("k223", 223).set("k224", 224).set("k225", 225).set("k226", 226).set("k227", 227).set("k228", 228).set("k229", 229).set("k230", 230).set("k231", 231).set("k232", 232).set("k233", 233).set("k234", 234).set("k235", 235).set("k236", 236).set("k237", 237).set("k238", 238).set("k239", 239).set("k240", 240).set("k241", 241).set("k242", 242).set("k243", 243).set("k244", 244).set("k245", 245).set("k246", 246).set("k247", 247).set("k248", 248).set("k249", 249).set("k250", 250).set("k251", 251).set("k252", 252).set("k253", 253).set("k254", 254).set("k255", 255).set("k256", 256).set("k257", 257).set("k258", 258).set("k259", 259).set("k260", 260).set("k261", 261).set("k262", 262).set("k263", 263).set("k264", 264).set("k265", 265).set("k266", 266).set("k267", 267).set("k268", 268).set("k269", 269).set("k270", 270).set("k271", 271).set("k272", 272).set("k273", 273).set("k274", 274).set("k275", 275).set("k276", 276).set("k277", 277).set("k278", 278).set("k279", 279).set("k280", 280).set("k281", 281).set("k282", 282).set("k283", 283).set("k284", 284).set("k285", 285).set("k286", 286).set("k287", 287).set("k288", 288).set("k289", 289).set("k290", 290).set("k291", 291).set("k292", 292).set("k293", 293).set("k294", 294).set("k295", 295).set("k296", 296).set("k297", 297).set("k298", 298).set("k299", 299).set("k300", 300).set("k301", 301).set("k302", 302).set("k303", 303).set("k304", 304).set("k305", 305).set("k306", 306).set("k307", 307).set("k308", 308).set("k309", 309).set("k310", 310).set("k311", 311).set("k312", 312).set("k313", 313).set("k314", 314).set("k315", 315).set("k316", 316).set("k317", 317).set("k318", 318).set("k319", 319).set("k320", 320).set("k321", 321).set("k322", 322).set("k323", 323).set("k324", 324).set("k325", 325).set("k326", 326).set("k327", 327).set("k328", 328).set("k329", 329).set("k330", 330).set("k331", 331).set("k332", 332).set("k333", 333).set("k334", 334).set("k335", 335).set("k336", 336).set("k337", 337).set("k338", 338).set("k339", 339).set("k340", 340).set("k341", 341).set("k342", 342).set("k343", 343).set("k344", 344).set("k345", 345).set("k346", 346).set("k347", 347).set("k348", 348).set("k349", 349).set("k350", 350).set("k351", 351).set("k352", 352).set("k353", 353).set("k354", 354).set("k355", 355).set("k356", 356).set("k357", 357).set("k358", 358).set("k359", 359).set("k360", 360).set("k361", 361).set("k362", 362).set("k363", 363).set("k364", 364).set("k365", 365).set("k366", 366).set("k367", 367).set("k368", 368).set("k369", 369).set("k370", 370).set("k371", 371).set("k372", 372).set("k373", 373).set("k374", 374).set("k375", 375).set("k376", 376).set("k377", 377).set("k378", 378).set("k379", 379).set("k380", 380).set("k381", 381).set("k382", 382).set("k383", 383).set("k384", 384).set("k385", 385).set("k386", 386).set("k387", 387).set("k388", 388).set("k389", 389).set("k390", 390).set("k391", 391).set("k392", 392).set("k393", 393).set("k394", 394).set("k395", 395).set("k396", 396).set("k397", 397).set("k398", 398).set("k399", 399).set("k400", 400).set("k401", 401).set("k402", 402).set("k403", 403).set("k404", 404).set("k405", 405).set("k406", 406).set("k407", 407).set("k408", 408).set("k409", 409).set("k410", 410).set("k411", 411).set("k412", 412).set("k413", 413).set("k414", 414).set("k415", 415).set("k416", 416).set("k417", 417).set("k418", 418).set("k419", 419).set("k420", 420).set("k421", 421).set("k422", 422).set("k423", 423).set("k424", 424).set("k425", 425).set("k426", 426).set("k427", 427).set("k428", 428).set("k429", 429).set("k430", 430).set("k431", 431).set("k432", 432).set("k433", 433).set("k434", 434).set("k435", 435).set("k436", 436).set("k437", 437).set("k438", 438).set("k439", 439).set("k440", 440).set("k441", 441).set("k442", 442).set("k443", 443).set("k444", 444).set("k445", 445).set("k446", 446).set("k447", 447).set("k448", 448).set("k449", 449).set("k450", 450).set("k451", 451).set("k452", 452).set("k453", 453).set("k454", 454).set("k455", 455).set("k456", 456).set("k457", 457).set("k458", 458).set("k459", 459).set("k460", 460).set("k461", 461).set("k462", 462).set("k463", 463).set("k464", 464).set("k465", 465).set("k466", 466).set("k467", 467).set("k468", 468).set("k469", 469).set("k470", 470).set("k471", 471).set("k472", 472).set("k473", 473).set("k474", 474).set("k475", 475).set("k476", 476).set("k477", 477).set("k478", 478).set("k479", 479).set("k480", 480).set("k481", 481).set("k482", 482).set("k483", 483).set("k484", 484).set("k485", 485).set("k486", 486).set("k487", 487).set("k488", 488).set("k489", 489).set("k490", 490).set("k491", 491).set("k492", 492).set("k493", 493).set("k494", 494).set("k495", 495).set("k496", 496).set("k497", 497).set("k498", 498).set("k499", 499).set("k500", 500).set("k501", 501).set("k502", 502).set("k503", 503).set("k504", 504).set("k505", 505).set("k506", 506).set("k507", 507).set("k508", 508).set("k509", 509).set("k510", 510).set("k511", 511).set("k512", 512).set("k513", 513).set("k514", 514).set("k515", 515).set("k516", 516).set("k517", 517).set("k518", 518).set("k519", 519).set("k520", 520).set("k521", 521).set("k522", 522).set("k523", 523).set("k524", 524).set("k525", 525).set("k526", 526).set("k527", 527).set("k528", 528).set("k529", 529).set("k530", 530).set("k531", 531).set("k532", 532).set("k533", 533).set("k534", 534).set("k535", 535).set("k536", 536).set("k537", 537).set("k538", 538).set("k539", 539).set("k540", 540).set("k541", 541).set("k542", 542).set("k543", 543).set("k544", 544).set("k545", 545).set("k546", 546).set("k547", 547).set("k548", 548).set("k549", 549).set("k550", 550).set("k551", 551).set("k552", 552).set("k553", 553).set("k554", 554).set("k555", 555).set("k556", 556).set("k557", 557).set("k558", 558).set("k559", 559).set("k560", 560).set("k561", 561).set("k562", 562).set("k563", 563).set("k564", 564).set("k565", 565).set("k566", 566).set("k567", 567).set("k568", 568).set("k569", 569).set("k570", 570).set("k571", 571).set("k572", 572).set("k573", 573).set("k574", 574).set("k575", 575).set("k576", 576).set("k577", 577).set("k578", 578).set("k579", 579).set("k580", 580).set("k581", 581).set("k582", 582).set("k583", 583).set("k584", 584).set("k585", 585).set("k586", 586).set("k587", 587).set("k588", 588).set("k589", 589).set("k590", 590).set("k591", 591).set("k592", 592).set("k593", 593).set("k594", 594).set("k595", 595).set("k596", 596).set("k597", 597).set("k598", 598).set("k599", 599).set("k600", 600).set("k601", 601).set("k602", 602).set("k603", 603).set("k604", 604).set("k605", 605).set("k606", 606).set("k607", 607).set("k608", 608).set("k609", 609).set("k610", 610).set("k611", 611).set("k612", 612).set("k613", 613).set("k614", 614).set("k615", 615).set("k616", 616).set("k617", 617).set("k618", 618).set("k619", 619).set("k620", 620).set("k621", 621).set("k622", 622).set("k623", 623).set("k624", 624).set("k625", 625).set("k626", 626).set("k627", 627).set("k628", 628).set("k629", 629).set("k630", 630).set("k631", 631).set("k632", 632).set("k633", 633).set("k634", 634).set("k635", 635).set("k636", 636).set("k637", 637).set("k638", 638).set("k639", 639).set("k640", 640).set("k641", 641).set("k642", 642).set("k643", 643).set("k644", 644).set("k645", 645).set("k646", 646).set("k647", 647).set("k648", 648).set("k649", 649).set("k650", 650).set("k651", 651).set("k652", 652).set("k653", 653).set("k654", 654).set("k655", 655).set("k656", 656).set("k657", 657).set("k658", 658).set("k659", 659).set("k660", 660).set("k661", 661).set("k662", 662).set("k663", 663).set("k664", 664).set("k665", 665).set("k666", 666).set("k667", 667).set("k668", 668).set("k669", 669).set("k670", 670).set("k671", 671).set("k672", 672).set("k673", 673).set("k674", 674).set("k675", 675).set("k676", 676).set("k677", 677).set("k678", 678).set("k679", 679).set("k680", 680).set("k681", 681).set("k682", 682).set("k683", 683).set("k684", 684).set("k685", 685).set("k686", 686).set("k687", 687).set("k688", 688).set("k689", 689).set("k690", 690).set("k691", 691).set("k692", 692).set("k693", 693).set("k694", 694).set("k695", 695).set("k696", 696).set("k697", 697).set("k698", 698).set("k699", 699).set("k700", 700).set("k701", 701).set("k702", 702).set("k703", 703).set("k704", 704).set("k705", 705).set("k706", 706).set("k707", 707).set("k708", 708).set("k709", 709).set("k710", 710).set("k711", 711).set("k712", 712).set("k713", 713).set("k714", 714).set("k715", 715).set("k716", 716).set("k717", 717).set("k718", 718).set("k719", 719).set("k720", 720).set("k721", 721).set("k722", 722).set("k723", 723).set("k724", 724).set("k725", 725).set("k726", 726).set("k727", 727).set("k728", 728).set("k729", 729).set("k730", 730).set("k731", 731).set("k732", 732).set("k733", 733).set("k734", 734).set("k735", 735).set("k736", 736).set("k737", 737).set("k738", 738).set("k739", 739).set("k740", 740).set("k741", 741).set("k742", 742).set("k743", 743).set("k744", 744).set("k745", 745).set("k746", 746).set("k747", 747).set("k748", 748).set("k749", 749).set("k750", 750).set("k751", 751).set("k752", 752).set("k753", 753).set("k754", 754).set("k755", 755).set("k756", 756).set("k757", 757).set("k758", 758).set("k759", 759).set("k760", 760).set("k761", 761).set("k762", 762).set("k763", 763).set("k764", 764).set("k765", 765).set("k766", 766).set("k767", 767).set("k768", 768).set("k769", 769).set("k770", 770).set("k771", 771).set("k772", 772).set("k773", 773).set("k774", 774).set("k775", 775).set("k776", 776).set("k777", 777).set("k778", 778).set("k779", 779).set("k780", 780).set("k781", 781).set("k782", 782).set("k783", 783).set("k784", 784).set("k785", 785).set("k786", 786).set("k787", 787).set("k788", 788).set("k789", 789).set("k790", 790).set("k791", 791).set("k792", 792).set("k793", 793).set("k794", 794).set("k795", 795).set("k796", 796).set("k797", 797).set("k798", 798).set("k799", 799).set("k800", 800).set("k801", 801).set("k802", 802).set("k803", 803).set("k804", 804).set("k805", 805).set("k806", 806).set("k807", 807).set("k808", 808).set("k809", 809).set("k810", 810).set("k811", 811).set("k812", 812).set("k813", 813).set("k814", 814).set("k815", 815).set("k816", 816).set("k817", 817).set("k818", 818).set("k819", 819).set("k820", 820).set("k821", 821).set("k822", 822).set("k823", 823).set("k824", 824).set("k825", 825).set("k826", 826).set("k827", 827).set("k828", 828).set("k829", 829).set("k830", 830).set("k831", 831).set("k832", 832).set("k833", 833).set("k834", 834).set("k835", 835).set("k836", 836).set("k837", 837).set("k838", 838).set("k839", 839).set("k840", 840).set("k841", 841).set("k842", 842).set("k843", 843).set("k844", 844).set("k845", 845).set("k846", 846).set("k847", 847).set("k848", 848).set("k849", 849).set("k850", 850).set("k851", 851).set("k852", 852).set("k853", 853).set("k854", 854).set("k855", 855).set("k856", 856).set("k857", 857).set("k858", 858).set("k859", 859).set("k860", 860).set("k861", 861).set("k862", 862).set("k863", 863).set("k864", 864).set("k865", 865).set("k866", 866).set("k867", 867).set("k868", 868).set("k869", 869).set("k870", 870).set("k871", 871).set("k872", 872).set("k873", 873).set("k874", 874).set("k875", 875).set("k876", 876).set("k877", 877).set("k878", 878).set("k879", 879).set("k880", 880).set("k881", 881).set("k882", 882).set("k883", 883).set("k884", 884).set("k885", 885).set("k886", 886).set("k887", 887).set("k888", 888).set("k889", 889).set("k890", 890).set("k891", 891).set("k892", 892).set("k893", 893).set("k894", 894).set("k895", 895).set("k896", 896).set("k897", 897).set("k898", 898).set("k899", 899).set("k900", 900).set("k901", 901).set("k902", 902).set("k903", 903).set("k904", 904).set("k905", 905).set("k906", 906).set("k907", 907).set("k908", 908).set("k909", 909).set("k910", 910).set("k911", 911).set("k912", 912).set("k913", 913).set("k914", 914).set("k915", 915).set("k916", 916).set("k917", 917).set("k918", 918).set("k919", 919).set("k920", 920).set("k921", 921).set("k922", 922).set("k923", 923).set("k924", 924).set("k925", 925).set("k926", 926).set("k927", 927).set("k928", 928).set("k929", 929).set("k930", 930).set("k931", 931).set("k932", 932).set("k933", 933).set("k934", 934).set("k935", 935).set("k936", 936).set("k937", 937).set("k938", 938).set("k939", 939).set("k940", 940).set("k941", 941).set("k942", 942).set("k943", 943).set("k944", 944).set("k945", 945).set("k946", 946).set("k947", 947).set("k948", 948).set("k949", 949).set("k950", 950).set("k951", 951).set("k952", 952).set("k953", 953).set("k954", 954).set("k955", 955).set("k956", 956).set("k957", 957).set("k958", 958).set("k959", 959).set("k960", 960).set("k961", 961).set("k962", 962).set("k963", 963).set("k964", 964).set("k965", 965).set("k966", 966).set("k967", 967).set("k968", 968).set("k969", 969).set("k970", 970).set("k971", 971).set("k972", 972).set("k973", 973).set("k974", 974).set("k975", 975).set("k976", 976).set("k977", 977).set("k978", 978).set("k979", 979).set("k980", 980).set("k981", 981).set("k982", 982).set("k983", 983).set("k984", 984).set("k985", 985).set("k986", 986).set("k987", 987).set("k988", 988).set("k989", 989).set("k990", 990).set("k991", 991).set("k992", 992).set("k993", 993).set("k994", 994).set("k995", 995).set("k996", 996).set("k997", 997).set("k998", 998).set("k999", 999).build()
            assert result.size() == 1000
            assert result.k0 == 0
            assert result.k999 == 999
        '''
    }

    @Test
    void testChainedAppendWithDifferentTypes() {
        // 1000 chained appends with mixed content (400x + 400y + 200z)
        assertScript '''
            def sb = new StringBuilder().append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("x").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("y").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z").append("z")
            assert sb.length() == 1000
            assert sb.toString().startsWith("x" * 400)
            assert sb.toString().endsWith("z" * 200)
        '''
    }

    @Test
    void testChainedNavigationDeep() {
        // 1000 chained getNext() calls
        assertScript '''
            class Node {
                Node next
                String value = "v"
                Node getNext() { next }
            }

            // Build a chain of 1001 nodes
            def root = new Node()
            def current = root
            1000.times {
                current.next = new Node()
                current = current.next
            }

            // Navigate through 1000 nodes
            def nav = root.getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext()
            assert nav.value == "v"
            assert nav.next == null
        '''
    }

    @Test
    void testChainedStreamOperations() {
        // 1000 chained stream map operations
        assertScript '''
            import java.util.stream.Collectors

            def result = [1, 2, 3].stream().map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.collect(Collectors.toList())
            assert result == [1, 2, 3]
        '''
    }

    @Test
    void testChainedOptionalOperations() {
        // 1000 chained Optional map operations
        assertScript '''
            def result = Optional.of(42).map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.map { it }.orElse(-1)
            assert result == 42
        '''
    }

    @Test
    void testChainedFindAllOperations() {
        // 1000 chained findAll with always-true predicate
        assertScript '''
            def list = [1, 2, 3, 4, 5].findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }.findAll { true }
            assert list == [1, 2, 3, 4, 5]
        '''
    }

    @Test
    void testMixedChainedOperations() {
        // 1000 mixed string operations (trim/toString/replace/intern)
        assertScript '''
            def result = "HELLO".trim().toString().replace("NOTFOUND2", "X").intern().trim().toString().replace("NOTFOUND6", "X").intern().trim().toString().replace("NOTFOUND10", "X").intern().trim().toString().replace("NOTFOUND14", "X").intern().trim().toString().replace("NOTFOUND18", "X").intern().trim().toString().replace("NOTFOUND22", "X").intern().trim().toString().replace("NOTFOUND26", "X").intern().trim().toString().replace("NOTFOUND30", "X").intern().trim().toString().replace("NOTFOUND34", "X").intern().trim().toString().replace("NOTFOUND38", "X").intern().trim().toString().replace("NOTFOUND42", "X").intern().trim().toString().replace("NOTFOUND46", "X").intern().trim().toString().replace("NOTFOUND50", "X").intern().trim().toString().replace("NOTFOUND54", "X").intern().trim().toString().replace("NOTFOUND58", "X").intern().trim().toString().replace("NOTFOUND62", "X").intern().trim().toString().replace("NOTFOUND66", "X").intern().trim().toString().replace("NOTFOUND70", "X").intern().trim().toString().replace("NOTFOUND74", "X").intern().trim().toString().replace("NOTFOUND78", "X").intern().trim().toString().replace("NOTFOUND82", "X").intern().trim().toString().replace("NOTFOUND86", "X").intern().trim().toString().replace("NOTFOUND90", "X").intern().trim().toString().replace("NOTFOUND94", "X").intern().trim().toString().replace("NOTFOUND98", "X").intern().trim().toString().replace("NOTFOUND102", "X").intern().trim().toString().replace("NOTFOUND106", "X").intern().trim().toString().replace("NOTFOUND110", "X").intern().trim().toString().replace("NOTFOUND114", "X").intern().trim().toString().replace("NOTFOUND118", "X").intern().trim().toString().replace("NOTFOUND122", "X").intern().trim().toString().replace("NOTFOUND126", "X").intern().trim().toString().replace("NOTFOUND130", "X").intern().trim().toString().replace("NOTFOUND134", "X").intern().trim().toString().replace("NOTFOUND138", "X").intern().trim().toString().replace("NOTFOUND142", "X").intern().trim().toString().replace("NOTFOUND146", "X").intern().trim().toString().replace("NOTFOUND150", "X").intern().trim().toString().replace("NOTFOUND154", "X").intern().trim().toString().replace("NOTFOUND158", "X").intern().trim().toString().replace("NOTFOUND162", "X").intern().trim().toString().replace("NOTFOUND166", "X").intern().trim().toString().replace("NOTFOUND170", "X").intern().trim().toString().replace("NOTFOUND174", "X").intern().trim().toString().replace("NOTFOUND178", "X").intern().trim().toString().replace("NOTFOUND182", "X").intern().trim().toString().replace("NOTFOUND186", "X").intern().trim().toString().replace("NOTFOUND190", "X").intern().trim().toString().replace("NOTFOUND194", "X").intern().trim().toString().replace("NOTFOUND198", "X").intern().trim().toString().replace("NOTFOUND202", "X").intern().trim().toString().replace("NOTFOUND206", "X").intern().trim().toString().replace("NOTFOUND210", "X").intern().trim().toString().replace("NOTFOUND214", "X").intern().trim().toString().replace("NOTFOUND218", "X").intern().trim().toString().replace("NOTFOUND222", "X").intern().trim().toString().replace("NOTFOUND226", "X").intern().trim().toString().replace("NOTFOUND230", "X").intern().trim().toString().replace("NOTFOUND234", "X").intern().trim().toString().replace("NOTFOUND238", "X").intern().trim().toString().replace("NOTFOUND242", "X").intern().trim().toString().replace("NOTFOUND246", "X").intern().trim().toString().replace("NOTFOUND250", "X").intern().trim().toString().replace("NOTFOUND254", "X").intern().trim().toString().replace("NOTFOUND258", "X").intern().trim().toString().replace("NOTFOUND262", "X").intern().trim().toString().replace("NOTFOUND266", "X").intern().trim().toString().replace("NOTFOUND270", "X").intern().trim().toString().replace("NOTFOUND274", "X").intern().trim().toString().replace("NOTFOUND278", "X").intern().trim().toString().replace("NOTFOUND282", "X").intern().trim().toString().replace("NOTFOUND286", "X").intern().trim().toString().replace("NOTFOUND290", "X").intern().trim().toString().replace("NOTFOUND294", "X").intern().trim().toString().replace("NOTFOUND298", "X").intern().trim().toString().replace("NOTFOUND302", "X").intern().trim().toString().replace("NOTFOUND306", "X").intern().trim().toString().replace("NOTFOUND310", "X").intern().trim().toString().replace("NOTFOUND314", "X").intern().trim().toString().replace("NOTFOUND318", "X").intern().trim().toString().replace("NOTFOUND322", "X").intern().trim().toString().replace("NOTFOUND326", "X").intern().trim().toString().replace("NOTFOUND330", "X").intern().trim().toString().replace("NOTFOUND334", "X").intern().trim().toString().replace("NOTFOUND338", "X").intern().trim().toString().replace("NOTFOUND342", "X").intern().trim().toString().replace("NOTFOUND346", "X").intern().trim().toString().replace("NOTFOUND350", "X").intern().trim().toString().replace("NOTFOUND354", "X").intern().trim().toString().replace("NOTFOUND358", "X").intern().trim().toString().replace("NOTFOUND362", "X").intern().trim().toString().replace("NOTFOUND366", "X").intern().trim().toString().replace("NOTFOUND370", "X").intern().trim().toString().replace("NOTFOUND374", "X").intern().trim().toString().replace("NOTFOUND378", "X").intern().trim().toString().replace("NOTFOUND382", "X").intern().trim().toString().replace("NOTFOUND386", "X").intern().trim().toString().replace("NOTFOUND390", "X").intern().trim().toString().replace("NOTFOUND394", "X").intern().trim().toString().replace("NOTFOUND398", "X").intern().trim().toString().replace("NOTFOUND402", "X").intern().trim().toString().replace("NOTFOUND406", "X").intern().trim().toString().replace("NOTFOUND410", "X").intern().trim().toString().replace("NOTFOUND414", "X").intern().trim().toString().replace("NOTFOUND418", "X").intern().trim().toString().replace("NOTFOUND422", "X").intern().trim().toString().replace("NOTFOUND426", "X").intern().trim().toString().replace("NOTFOUND430", "X").intern().trim().toString().replace("NOTFOUND434", "X").intern().trim().toString().replace("NOTFOUND438", "X").intern().trim().toString().replace("NOTFOUND442", "X").intern().trim().toString().replace("NOTFOUND446", "X").intern().trim().toString().replace("NOTFOUND450", "X").intern().trim().toString().replace("NOTFOUND454", "X").intern().trim().toString().replace("NOTFOUND458", "X").intern().trim().toString().replace("NOTFOUND462", "X").intern().trim().toString().replace("NOTFOUND466", "X").intern().trim().toString().replace("NOTFOUND470", "X").intern().trim().toString().replace("NOTFOUND474", "X").intern().trim().toString().replace("NOTFOUND478", "X").intern().trim().toString().replace("NOTFOUND482", "X").intern().trim().toString().replace("NOTFOUND486", "X").intern().trim().toString().replace("NOTFOUND490", "X").intern().trim().toString().replace("NOTFOUND494", "X").intern().trim().toString().replace("NOTFOUND498", "X").intern().trim().toString().replace("NOTFOUND502", "X").intern().trim().toString().replace("NOTFOUND506", "X").intern().trim().toString().replace("NOTFOUND510", "X").intern().trim().toString().replace("NOTFOUND514", "X").intern().trim().toString().replace("NOTFOUND518", "X").intern().trim().toString().replace("NOTFOUND522", "X").intern().trim().toString().replace("NOTFOUND526", "X").intern().trim().toString().replace("NOTFOUND530", "X").intern().trim().toString().replace("NOTFOUND534", "X").intern().trim().toString().replace("NOTFOUND538", "X").intern().trim().toString().replace("NOTFOUND542", "X").intern().trim().toString().replace("NOTFOUND546", "X").intern().trim().toString().replace("NOTFOUND550", "X").intern().trim().toString().replace("NOTFOUND554", "X").intern().trim().toString().replace("NOTFOUND558", "X").intern().trim().toString().replace("NOTFOUND562", "X").intern().trim().toString().replace("NOTFOUND566", "X").intern().trim().toString().replace("NOTFOUND570", "X").intern().trim().toString().replace("NOTFOUND574", "X").intern().trim().toString().replace("NOTFOUND578", "X").intern().trim().toString().replace("NOTFOUND582", "X").intern().trim().toString().replace("NOTFOUND586", "X").intern().trim().toString().replace("NOTFOUND590", "X").intern().trim().toString().replace("NOTFOUND594", "X").intern().trim().toString().replace("NOTFOUND598", "X").intern().trim().toString().replace("NOTFOUND602", "X").intern().trim().toString().replace("NOTFOUND606", "X").intern().trim().toString().replace("NOTFOUND610", "X").intern().trim().toString().replace("NOTFOUND614", "X").intern().trim().toString().replace("NOTFOUND618", "X").intern().trim().toString().replace("NOTFOUND622", "X").intern().trim().toString().replace("NOTFOUND626", "X").intern().trim().toString().replace("NOTFOUND630", "X").intern().trim().toString().replace("NOTFOUND634", "X").intern().trim().toString().replace("NOTFOUND638", "X").intern().trim().toString().replace("NOTFOUND642", "X").intern().trim().toString().replace("NOTFOUND646", "X").intern().trim().toString().replace("NOTFOUND650", "X").intern().trim().toString().replace("NOTFOUND654", "X").intern().trim().toString().replace("NOTFOUND658", "X").intern().trim().toString().replace("NOTFOUND662", "X").intern().trim().toString().replace("NOTFOUND666", "X").intern().trim().toString().replace("NOTFOUND670", "X").intern().trim().toString().replace("NOTFOUND674", "X").intern().trim().toString().replace("NOTFOUND678", "X").intern().trim().toString().replace("NOTFOUND682", "X").intern().trim().toString().replace("NOTFOUND686", "X").intern().trim().toString().replace("NOTFOUND690", "X").intern().trim().toString().replace("NOTFOUND694", "X").intern().trim().toString().replace("NOTFOUND698", "X").intern().trim().toString().replace("NOTFOUND702", "X").intern().trim().toString().replace("NOTFOUND706", "X").intern().trim().toString().replace("NOTFOUND710", "X").intern().trim().toString().replace("NOTFOUND714", "X").intern().trim().toString().replace("NOTFOUND718", "X").intern().trim().toString().replace("NOTFOUND722", "X").intern().trim().toString().replace("NOTFOUND726", "X").intern().trim().toString().replace("NOTFOUND730", "X").intern().trim().toString().replace("NOTFOUND734", "X").intern().trim().toString().replace("NOTFOUND738", "X").intern().trim().toString().replace("NOTFOUND742", "X").intern().trim().toString().replace("NOTFOUND746", "X").intern().trim().toString().replace("NOTFOUND750", "X").intern().trim().toString().replace("NOTFOUND754", "X").intern().trim().toString().replace("NOTFOUND758", "X").intern().trim().toString().replace("NOTFOUND762", "X").intern().trim().toString().replace("NOTFOUND766", "X").intern().trim().toString().replace("NOTFOUND770", "X").intern().trim().toString().replace("NOTFOUND774", "X").intern().trim().toString().replace("NOTFOUND778", "X").intern().trim().toString().replace("NOTFOUND782", "X").intern().trim().toString().replace("NOTFOUND786", "X").intern().trim().toString().replace("NOTFOUND790", "X").intern().trim().toString().replace("NOTFOUND794", "X").intern().trim().toString().replace("NOTFOUND798", "X").intern().trim().toString().replace("NOTFOUND802", "X").intern().trim().toString().replace("NOTFOUND806", "X").intern().trim().toString().replace("NOTFOUND810", "X").intern().trim().toString().replace("NOTFOUND814", "X").intern().trim().toString().replace("NOTFOUND818", "X").intern().trim().toString().replace("NOTFOUND822", "X").intern().trim().toString().replace("NOTFOUND826", "X").intern().trim().toString().replace("NOTFOUND830", "X").intern().trim().toString().replace("NOTFOUND834", "X").intern().trim().toString().replace("NOTFOUND838", "X").intern().trim().toString().replace("NOTFOUND842", "X").intern().trim().toString().replace("NOTFOUND846", "X").intern().trim().toString().replace("NOTFOUND850", "X").intern().trim().toString().replace("NOTFOUND854", "X").intern().trim().toString().replace("NOTFOUND858", "X").intern().trim().toString().replace("NOTFOUND862", "X").intern().trim().toString().replace("NOTFOUND866", "X").intern().trim().toString().replace("NOTFOUND870", "X").intern().trim().toString().replace("NOTFOUND874", "X").intern().trim().toString().replace("NOTFOUND878", "X").intern().trim().toString().replace("NOTFOUND882", "X").intern().trim().toString().replace("NOTFOUND886", "X").intern().trim().toString().replace("NOTFOUND890", "X").intern().trim().toString().replace("NOTFOUND894", "X").intern().trim().toString().replace("NOTFOUND898", "X").intern().trim().toString().replace("NOTFOUND902", "X").intern().trim().toString().replace("NOTFOUND906", "X").intern().trim().toString().replace("NOTFOUND910", "X").intern().trim().toString().replace("NOTFOUND914", "X").intern().trim().toString().replace("NOTFOUND918", "X").intern().trim().toString().replace("NOTFOUND922", "X").intern().trim().toString().replace("NOTFOUND926", "X").intern().trim().toString().replace("NOTFOUND930", "X").intern().trim().toString().replace("NOTFOUND934", "X").intern().trim().toString().replace("NOTFOUND938", "X").intern().trim().toString().replace("NOTFOUND942", "X").intern().trim().toString().replace("NOTFOUND946", "X").intern().trim().toString().replace("NOTFOUND950", "X").intern().trim().toString().replace("NOTFOUND954", "X").intern().trim().toString().replace("NOTFOUND958", "X").intern().trim().toString().replace("NOTFOUND962", "X").intern().trim().toString().replace("NOTFOUND966", "X").intern().trim().toString().replace("NOTFOUND970", "X").intern().trim().toString().replace("NOTFOUND974", "X").intern().trim().toString().replace("NOTFOUND978", "X").intern().trim().toString().replace("NOTFOUND982", "X").intern().trim().toString().replace("NOTFOUND986", "X").intern().trim().toString().replace("NOTFOUND990", "X").intern().trim().toString().replace("NOTFOUND994", "X").intern().trim().toString().replace("NOTFOUND998", "X").intern()
            assert result.toLowerCase() == "hello"
        '''
    }

    @Test
    void testChainedWithClosureReturningThis() {
        // 1000 chained increment operations
        assertScript '''
            class Counter {
                int count = 0
                Counter increment() { count++; this }
            }

            def c = new Counter().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment().increment()
            assert c.count == 1000
        '''
    }


    @Test
    void testChainedCallOperations() {
        assertScript '''
            def str = "  hello world  "
            def result = str.trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim()
            assert result == "hello world"
        '''
    }

    @Test
    void testChainedCallOperationsInClass() {
        assertScript '''
            class X {
                static void test() {
                    def str = "  hello world  "
                    def result = str.trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim()
                    assert result == "hello world"
                }
            }
            X.test()
        '''
    }

    @Test
    void testChainedCallOperationsInClass_2() {
        assertScript '''
            class X {
                static void test() {
                    X x = new X()
                    x.doProcess()
                }
                void doProcess() {
                    def str = "  hello world  "
                    def result = process(str)
                    assert result == "hello world"
                }
                def process(str) {
                    def result = str.trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim()
                    return result
                }
            }
            X.test()
        '''
    }

    /**
     * It takes too long to compile, disable it for now.
     */
    @Disabled
    @Test
    void testChainedCallOperationsInClass_2_CS() {
        assertScript '''
            @groovy.transform.CompileStatic
            class X {
                static void test() {
                    X x = new X()
                    x.doProcess()
                }
                void doProcess() {
                    def str = "  hello world  "
                    def result = process(str)
                    assert result == "hello world"
                }
                def process(str) {
                    def result = str.trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim().trim()
                    return result
                }
            }
            X.test()
        '''
    }


    @Test
    void testChainedSafeCallOperations() {
        // 1000 chained safe navigation calls (?.)
        assertScript '''
            def str = "  hello world  "
            def result = str?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()
            assert result == "hello world"
        '''
    }

    @Test
    void testChainedSafeCallOperationsInClass() {
        // 1000 chained safe navigation calls (?.)
        assertScript '''
            class X {
                static void test() {
                    def str = "  hello world  "
                    def result = str?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()
                    assert result == "hello world"
                }
            }
            X.test()
        '''
    }

    @Test
    void testChainedSafeCallOperationsInClass_2() {
        // 1000 chained safe navigation calls (?.)
        assertScript '''
            class X {
                static void test() {
                    X x = new X()
                    x.doProcess()
                }
                void doProcess() {
                    def str = "  hello world  "
                    def result = process(str)
                    assert result == "hello world"
                }
                def process(str) {
                    def result = str?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()
                    return result
                }
            }
            X.test()
        '''
    }

    /**
     * It takes too long to compile, disable it for now.
     */
    @Disabled
    @Test
    void testChainedSafeCallOperationsInClass_2_CS() {
        // 1000 chained safe navigation calls (?.)
        assertScript '''
            @groovy.transform.CompileStatic
            class X {
                static void test() {
                    X x = new X()
                    x.doProcess()
                }
                void doProcess() {
                    def str = "  hello world  "
                    def result = process(str)
                    assert result == "hello world"
                }
                def process(str) {
                    def result = str?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()?.trim()
                    return result
                }
            }
            X.test()
        '''
    }
}
