/** * Make two of the points identical and see if things blow up */ @Test public void identical_points() { List<double[]> points = createPoints(2, 1,2, 1.1,4 , 1,2); AxisSplitterMedian<double[]> alg = new AxisSplitterMedian<>(distance,new DummyRule(0)); alg.splitData(points,null,left,null,right,null); // sorted order should be (1,2) (1,2) (1.1,4) assertEquals(1, left.size()); assertEquals(1, right.size()); assertEquals(1,alg.getSplitPoint()[0],1e-8); assertEquals(1,left.get(0)[0],1e-8); assertEquals(1.1,right.get(0)[0],1e-8); }
/** * Make sure the split point is returned */ @Test public void splitData_split_point() { List<double[]> points = createPoints(2, 1,2 , 3,5 , -3,4); AxisSplitterMedian<double[]> alg = new AxisSplitterMedian<>(distance,new DummyRule(1)); alg.splitData(points,null,left,null,right,null); assertEquals(1,alg.getSplitAxis()); assertEquals(-3,alg.getSplitPoint()[0],1e-8); // assertEquals(2, alg.getSplitIndex()); }
@Test public void splitData_withData() { List<double[]> points = createPoints(2, 1,2 , 3,5 , -3,4); GrowQueue_I32 data = new GrowQueue_I32(); for( int i = 0; i < points.size(); i++ ) data.add(i); AxisSplitterMedian<double[]> alg = new AxisSplitterMedian<>(distance,new DummyRule(1)); alg.splitData(points,data,left,leftData,right,rightData); assertEquals(1,left.size()); assertEquals(1,right.size()); assertEquals(1,leftData.size()); assertEquals(1,rightData.size()); assertEquals(1,alg.getSplitAxis(),1e-8); assertEquals(-3,alg.getSplitPoint()[0],1e-8); assertTrue(data.get(2) == alg.getSplitIndex()); assertTrue(data.get(0) == leftData.get(0)); assertTrue(data.get(1) == rightData.get(0)); }