/** * Makes sure a branch is created correctly given the results from the splitter */ @Test public void computeBranch_dontTrack() { DummySplitter splitter = createSplitter(1,1,false); splitter.splitAxis = 1; splitter.splitPoint = new double[]{2,3}; KdTreeConstructor<double[]> alg = new KdTreeConstructor<>(new KdTreeMemory(),splitter); KdTree.Node n = alg.computeBranch(new ArrayList<>(),null); assertSame(n.point, splitter.splitPoint); assertEquals(n.split, splitter.splitAxis); assertEquals(-2, n.index); // default value in splitter assertTrue(n.left.isLeaf()); assertTrue(n.right.isLeaf()); assertSame(n.left.point, splitter.left.get(0)); assertEquals(-1, n.left.index); assertSame(n.right.point, splitter.right.get(0)); assertEquals(-1, n.right.index); }
/** * Basic tests to see if it can handle different sized input lists. */ @Test public void construct() { KdTreeConstructor<double[]> alg = new KdTreeConstructor<>(new KdTreeMemory(),createSplitter(1,1,false)); // test an empty list List<double[]> points = new ArrayList<>(); KdTree tree = alg.construct(points,false); assertEquals(2, tree.N); assertNull(tree.root); // add a point points.add( new double[]{1,2}); tree = alg.construct(points,false); assertEquals(2, tree.N); assertSame(tree.root.point, points.get(0)); assertTrue(tree.root.isLeaf()); // add another point. These input points are ignored by the dummy splitter points.add( new double[]{1,2,4,5}); tree = alg.construct(points,false); assertEquals(2, tree.N); assertTrue(tree.root.left.isLeaf()); assertTrue(tree.root.right.isLeaf()); }
/** * Same test as above but with associated data */ @Test public void computeBranch_trackIndexes() { DummySplitter splitter = createSplitter(1,1,true); splitter.splitAxis = 1; splitter.splitPoint = new double[]{2,3}; splitter.splitIndex = 2; KdTreeConstructor<double[]> alg = new KdTreeConstructor<>(new KdTreeMemory(),splitter); KdTree.Node n = alg.computeBranch(new ArrayList<>(),new GrowQueue_I32()); assertSame(n.point, splitter.splitPoint); assertEquals(n.split, splitter.splitAxis); assertEquals(n.index, splitter.splitIndex); assertTrue(n.left.isLeaf()); assertTrue(n.right.isLeaf()); assertSame(n.left.point, splitter.left.get(0)); assertEquals(n.left.index, splitter.leftIndex.get(0)); assertSame(n.right.point, splitter.right.get(0)); assertEquals(n.right.index, splitter.rightIndex.get(0)); }