/*
*  eXist Open Source Native XML Database
*  Copyright (C) 2001-04 Wolfgang M. Meier (wolfgang@exist-db.org) 
*  and others (see http://exist-db.org)
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* 
*  $Id: ConcurrentQueryTest.java 4481 2006-10-04 14:54:50Z wolfgang_m $
*/
package org.exist.xmldb.test.concurrent;

import java.io.File;

import org.exist.storage.DBBroker;
import org.exist.xmldb.test.concurrent.action.XQueryAction;

/**
 * @author wolf
 */
public class ConcurrentQueryTest extends ConcurrentTestBase {

	private final static String URI = "xmldb:exist://" + DBBroker.ROOT_COLLECTION;
	
	public static void main(String[] args) {
		junit.textui.TestRunner.run(ConcurrentQueryTest.class);
	}
	
	private File tempFile;
	
	private XQueryAction action0, action1, action2;
	
	/**
     * 
     * 
     * @param name 
     */
	public ConcurrentQueryTest(String name) {
		super(name, URI, "C1");
	}

	/* (non-Javadoc)
	 * @see org.exist.xmldb.test.concurrent.ConcurrentTestBase#setUp()
	 */
	protected void setUp() {
		try {
			super.setUp();		
			String[] wordList = DBUtils.wordList(rootCol);
			tempFile = DBUtils.generateXMLFile(500, 7, wordList);
			DBUtils.addXMLResource(getTestCollection(), "R1.xml", tempFile);
			
			String query0 = "/ROOT-ELEMENT/ELEMENT/ELEMENT-1/ELEMENT-2[@attribute-3]";
			String query1 = "distinct-values(//ELEMENT/@attribute-2)";
			String query2 = "/ROOT-ELEMENT//ELEMENT-1[@attribute-3]";
			
			action0 = new XQueryAction(URI + "/C1", "R1.xml", query0);
			action1 = new XQueryAction(URI + "/C1", "R1.xml", query1);
			action2 = new XQueryAction(URI + "/C1", "R1.xml", query2);
	//		action3 = new XQueryAction(URI + "/C1", "R1.xml", query0);
	//		action4 = new XQueryAction(URI + "/C1", "R1.xml", query0);
	//		action5 = new XQueryAction(URI + "/C1", "R1.xml", query0);
			
			addAction(action0, 50, 500, 0);
			addAction(action1, 50, 250, 0);
			addAction(action2, 50, 0, 0);
	//		addAction(action3, 50, 0, 0);
	//		addAction(action4, 50, 0, 0);
	//		addAction(action5, 50, 0, 0);
		} catch (Exception e) {            
            fail(e.getMessage()); 
        }				
	}
	
	/* (non-Javadoc)
     * @see org.exist.xmldb.test.concurrent.ConcurrentTestBase#tearDown()
     */
    protected void tearDown() {    	
        super.tearDown();
        System.out.println("Avg. query time for " + action0.getQuery() + ": " + action0.avgExecTime());
        System.out.println("Avg. query time for " + action1.getQuery() + ": " + action1.avgExecTime());
        System.out.println("Avg. query time for " + action2.getQuery() + ": " + action2.avgExecTime());
//        System.out.println("Avg. query time for " + action3.getQuery() + ": " + action3.avgExecTime());
//        System.out.println("Avg. query time for " + action4.getQuery() + ": " + action4.avgExecTime());
//        System.out.println("Avg. query time for " + action5.getQuery() + ": " + action5.avgExecTime());        
//        System.out.println("element index: " + NativeElementIndex.getTime());	        
    }
}
