/*******************************************************************************
 * Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0 
 * which accompanies this distribution. 
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Oracle - initial API and implementation from Oracle TopLink
 ******************************************************************************/  
package org.eclipse.persistence.testing.tests.performance;

import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.tests.performance.java.*;
import org.eclipse.persistence.testing.tests.performance.jdbc.*;

/**
 * Performance tests that compare the performance of two or more ways of doing something.
 * This allows for the performance difference between two task to be determined and verified.
 * This can be used for analyzing which is the best way to do something,
 * or to verify that usage of a optimization feature continues to provide the expected benefit.
 * This model includes the non-TopLink tests used to check base Java performance
 * used to evaluate optimizations in TopLink.
 */
public class JavaPerformanceComparisonModel extends TestModel {
    public JavaPerformanceComparisonModel() {
        setDescription("Non-TopLink Java performance tests that compare/verify the performance of two or more ways of doing something.");
    }

    public void addTests() {
        addTest(getJavaTestSuite());
        addTest(getJDBCTestSuite());
    }

    public TestSuite getJavaTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("JavaTestSuite");
        suite.setDescription("This suite tests raw Java performance.");

        suite.addTest(new MapTest(10));
        suite.addTest(new MapTest(100));
        suite.addTest(new MapTest(1000));
        suite.addTest(new ListTest(10));
        suite.addTest(new ListTest(100));
        suite.addTest(new ListTest(1000));
        suite.addTest(new ForLoopTest());
        suite.addTest(new InstanceCreationTest());
        suite.addTest(new ClassForNameTest());
        suite.addTest(new LinkedHashMapTest());
        suite.addTest(new MethodTest());
        suite.addTest(new FieldTest());
        suite.addTest(new ComplexMethodTest());
        suite.addTest(new CalendarTimeTest());
        suite.addTest(new DatePrintingTest());
        suite.addTest(new DoPrivilegedTest());
        suite.addTest(new LazyInitConcurrentTest());
        suite.addTest(new SynchronizedLazyInitConcurrentTest());
        suite.addTest(new UnsynchronizedLazyInitConcurrentTest());
        suite.addTest(new VolatileLazyInitConcurrentTest());
        suite.addTest(new HashMapGetConcurrentTest());
        suite.addTest(new HashtableGetConcurrentTest());
        suite.addTest(new ConcurrentHashMapGetConcurrentTest());
        suite.addTest(new HashMapPutConcurrentTest());
        suite.addTest(new HashtablePutConcurrentTest());
        suite.addTest(new ConcurrentHashMapPutConcurrentTest());
        
        return suite;
    }

    public TestSuite getJDBCTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("JDBCTestSuite");
        suite.setDescription("This suite tests raw JDBC performance.");

        suite.addTest(new RowFetchTest());
        suite.addTest(new LargeRowFetchTest());
        suite.addTest(new TimestampTest());
        suite.addTest(new TimestampDateTest());
        suite.addTest(new InheritanceOuterJoinTest());

        return suite;
    }
}
