/*
 * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation
//
package org.eclipse.persistence.jpa.tests.jpql.parser;

import junit.framework.TestCase;

/**
 * This test invokes already defined tests from {@link JPQLQueriesTest1_0} but they will be invoked
 * many times and concurrently by {@link AllJPQLParserConcurrentTests}.
 *
 * @version 2.4.1
 * @since 2.4.1
 * @author Pascal Filion
 */
public final class JPQLParserConcurrentTest extends TestCase {

    public void test_Query_001() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_001(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_002() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_002(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_003() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_003(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_004() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_004(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_005() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_005(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_006() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_006(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_007() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_007(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_008() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_008(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_009() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_009(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_010() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_010(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_011() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_011(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_012() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_012(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_013() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_013(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_014() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_014(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_015() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_015(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_016() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_016(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_017() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_017(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_018() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_018(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_019() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_019(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_020() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_020(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_021() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_021(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_022() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_022(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_023() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_023(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_024() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_024(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_025() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_025(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_026() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_026(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_027() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_027(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_028() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_028(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_029() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_029(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_030() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_030(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_031() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_031(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_032() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_032(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_033() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_033(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_034() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_034(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_035() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_035(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_036() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_036(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_037() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_037(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_038() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_038(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_039() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_039(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_040() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_040(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_041() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_041(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_042() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_042(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_043() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_043(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_044() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_044(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_045() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_045(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_046() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_046(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_047() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_047(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_048() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_048(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_049() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_049(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_050() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_050(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_051() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_051(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_052() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_052(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_053() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_053(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_054() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_054(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_055() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_055(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_056() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_056(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_057() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_057(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_058() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_058(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_059() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_059(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_060() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_060(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_061() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_061(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_062() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_062(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_063() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_063(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_064() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_064(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_065() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_065(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_066() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_066(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_067() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_067(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_068() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_068(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_069() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_069(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_070() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_070(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_071() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_071(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_072() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_072(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_073() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_073(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_074() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_074(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_075() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_075(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_076() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_076(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_077() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_077(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_078() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_078(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_079() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_079(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_080() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_080(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_081() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_081(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_082() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_082(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_083() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_083(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_084() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_084(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_085() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_085(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_086() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_086(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_087() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_087(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_088() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_088(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_089() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_089(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_090() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_090(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_091() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_091(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_092() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_092(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_093() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_093(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_094() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_094(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_095() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_095(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_096() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_096(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_097() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_097(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_098() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_098(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_099() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_099(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_100() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_101(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_101() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_101(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_102() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_102(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_103() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_103(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_104() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_104(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_105() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_105(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_106() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_106(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_107() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_107(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_108() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_108(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_109() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_109(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_110() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_110(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_111() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_111(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_112() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_112(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_113() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_113(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_114() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_114(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_115() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_115(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_116() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_116(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_117() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_117(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_118() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_118(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_119() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_119(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_120() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_120(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_121() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_121(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_122() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_122(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_123() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_123(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_124() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_124(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_125() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_125(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_126() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_126(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_127() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_127(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_128() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_128(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_129() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_129(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_130() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_130(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_131() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_131(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_132() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_132(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_133() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_133(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_134() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_134(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_135() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_135(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_136() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_136(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_137() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_137(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_138() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_138(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_139() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_139(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_140() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_140(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_141() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_141(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_142() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_142(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_143() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_143(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_144() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_144(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_145() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_145(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_146() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_146(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_147() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_147(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_148() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_148(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_149() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_149(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_150() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_150(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_151() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_151(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_152() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_152(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_153() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_153(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_154() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_154(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_155() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_155(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_156() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_156(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_157() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_157(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_158() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_158(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_159() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_159(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_160() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_160(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_161() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_161(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_162() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_162(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_163() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_163(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_164() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_164(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_165() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_165(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_166() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_166(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_167() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_167(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_168() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_168(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_169() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_169(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_170() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_170(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_171() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_171(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_172() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_172(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_173() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_173(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_174() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_174(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_175() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_175(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_176() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_176(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_177() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_177(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_178() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_178(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_179() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_179(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_180() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_180(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_181() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_181(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_182() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_182(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_183() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_183(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_184() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_184(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_185() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_185(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_186() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_186(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_187() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_187(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_188() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_188(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_189() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_189(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_190() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_190(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_191() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_191(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_192() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_192(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_193() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_193(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_194() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_194(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_195() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_195(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_196() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_196(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_197() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_197(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_198() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_198(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_199() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_199(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_201() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_201(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_202() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_202(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_203() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_203(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_204() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_204(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_205() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_205(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_206() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_206(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_207() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_207(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_208() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_208(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_209() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_209(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_210() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_210(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_211() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_211(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_212() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_212(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_213() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_213(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_214() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_214(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_215() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_215(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_216() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_216(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_217() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_217(AllJPQLParserConcurrentTests.jpqlGrammar);
    }

    public void test_Query_218() {
        JPQLQueriesTest1_0 test = new JPQLQueriesTest1_0();
        test.test_Query_218(AllJPQLParserConcurrentTests.jpqlGrammar);
    }
}
