/* XXL: The eXtensible and fleXible Library for data processing Copyright (C) 2000-2011 Prof. Dr. Bernhard Seeger Head of the Database Research Group Department of Mathematics and Computer Science University of Marburg Germany This library 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 3 of the License, or (at your option) any later version. This library 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 library; If not, see <http://www.gnu.org/licenses/>. http://code.google.com/p/xxl/ */ package xxl.core.indexStructures.btrees; import java.util.Iterator; import xxl.core.collections.containers.Container; import xxl.core.collections.containers.MapContainer; import xxl.core.cursors.Cursors; import xxl.core.cursors.sources.Permutator; import xxl.core.functions.AbstractFunction; import xxl.core.functions.Function; import xxl.core.indexStructures.MultiDiskBTree; import xxl.core.util.Interval1D; /** * Class for testing the {@link xxl.core.indexStructures.MultiDiskBTree}. */ public class MultiDiskBTreeTest { /** * Creates a main-memory BTree with minimum (maximum) capacity given * by the command line argument 0 (1) by inserting a permutation of * the numbers ranging fom 0 (inclusive) to the value of command line * argument 2. Argument 3 determines the number of disks to be used * for the B-tree. * After that, all elements of the tree are read. * This version works on main-memory-Containers. * * @param args command line parameters * @throws Exception */ public static void main (String [] args) throws Exception { int minCap=10, maxCap=25, maxNumber=10000, disks=7; if (args.length>0) { minCap = Integer.parseInt(args[0]); maxCap = Integer.parseInt(args[1]); maxNumber = Integer.parseInt(args[2]); disks = Integer.parseInt(args[3]); } // a function that creates a descriptor for a given object Function getDescriptor = new AbstractFunction() { public Object invoke (Object object) { return new Interval1D(object); } }; // the container that stores the inner nodes of the MultiDiskBTree Container container = new MapContainer(); // the containers that store the leafs of the MultiDiskBTree Container [] containers = new Container [disks]; for (int i=0; i<containers.length; i++) containers[i] = new MapContainer(); // initialize the MultiDiskBTree MultiDiskBTree btree = new MultiDiskBTree().initialize(getDescriptor, container, containers, minCap, maxCap); Iterator it = new Permutator(maxNumber); long time = System.currentTimeMillis(); // insert an iterator of objects by inserting every single object while (it.hasNext()) btree.insert(it.next()); System.out.println("Insertion: "+(-time+(time = System.currentTimeMillis()))+" ms"); System.out.println("Insertion complete, height: "+btree.height()+", universe: "+btree.rootDescriptor()); time = System.currentTimeMillis(); // perform a range-query System.out.println(Cursors.count(btree.query(new Interval1D(new Integer(0), new Integer(maxNumber)), 0))); System.out.println("Query: "+(-time+(time = System.currentTimeMillis()))+" ms"); } }