/* * Copyright (c) 2002-2009 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.index.impl.sortedtree; import java.util.Comparator; import org.neo4j.graphdb.Node; import org.neo4j.index.Neo4jTestCase; import org.neo4j.index.impl.btree.BTree.RelTypes; public class TestSortedTree extends Neo4jTestCase { private SortedTree bTree; @Override public void setUp() throws Exception { super.setUp(); Node bNode = graphDb().createNode(); graphDb().getReferenceNode().createRelationshipTo( bNode, RelTypes.TREE_ROOT ); bTree = new SortedTree( graphDb(), bNode, new NodeSorter() ); } private static final String VALUE = "value"; static class NodeSorter implements Comparator<Node> { public int compare( Node o1, Node o2 ) { Comparable c1 = (Comparable) o1.getProperty( VALUE ); Comparable c2 = (Comparable) o2.getProperty( VALUE ); return c1.compareTo( c2 ); } } @Override public void tearDown() throws Exception { bTree.delete(); super.tearDown(); } public void testBasicSort() { bTree.addNode( createNode( 'c' ) ); bTree.addNode( createNode( 'n' ) ); bTree.addNode( createNode( 'g' ) ); bTree.addNode( createNode( 'a' ) ); bTree.addNode( createNode( 'h' ) ); bTree.addNode( createNode( 'e' ) ); bTree.addNode( createNode( 'k' ) ); bTree.addNode( createNode( 'i' ) ); bTree.addNode( createNode( 'q' ) ); bTree.addNode( createNode( 'm' ) ); bTree.addNode( createNode( 'f' ) ); bTree.addNode( createNode( 'w' ) ); bTree.addNode( createNode( 'l' ) ); bTree.addNode( createNode( 't' ) ); bTree.addNode( createNode( 'z' ) ); bTree.addNode( createNode( 'd' ) ); bTree.addNode( createNode( 'p' ) ); bTree.addNode( createNode( 'r' ) ); bTree.addNode( createNode( 'x' ) ); bTree.addNode( createNode( 'y' ) ); bTree.addNode( createNode( 's' ) ); bTree.addNode( createNode( 'b' ) ); bTree.addNode( createNode( 'j' ) ); bTree.addNode( createNode( 'o' ) ); bTree.addNode( createNode( 'u' ) ); bTree.addNode( createNode( 'v' ) ); char c = 'a'; for ( Node node : bTree.getSortedNodes() ) { assertEquals( c, node.getProperty( VALUE ) ); c++; } } public Node createNode( char c ) { Node node = graphDb().createNode(); node.setProperty( VALUE, c ); return node; } }