diff --git a/src/mlpack/tests/rectangle_tree_test.cpp b/src/mlpack/tests/rectangle_tree_test.cpp index 4410f71b44..8f4719ba9c 100644 --- a/src/mlpack/tests/rectangle_tree_test.cpp +++ b/src/mlpack/tests/rectangle_tree_test.cpp @@ -158,9 +158,9 @@ void CheckExactContainment(const TreeType& tree) double max = -1.0 * DBL_MAX; for(size_t j = 0; j < tree.Count(); j++) { - if (tree.Dataset().col(tree.Points()[j])[i] < min) + if (tree.Dataset().col(tree.Point(j))[i] < min) min = tree.Dataset().col(tree.Points()[j])[i]; - if (tree.Dataset().col(tree.Points()[j])[i] > max) + if (tree.Dataset().col(tree.Point(j))[i] > max) max = tree.Dataset().col(tree.Points()[j])[i]; } BOOST_REQUIRE_EQUAL(max, tree.Bound()[i].Hi()); @@ -525,10 +525,8 @@ BOOST_AUTO_TEST_CASE(SingleTreeTraverserTest) } } - // A test to ensure that the SingleTreeTraverser is working correctly by // comparing its results to the results of a naive search. -//* This is known to not work: see #368. BOOST_AUTO_TEST_CASE(XTreeTraverserTest) { arma::mat dataset; @@ -546,9 +544,8 @@ BOOST_AUTO_TEST_CASE(XTreeTraverserTest) TreeType xTree(dataset, 20, 6, 5, 2, 0); // Nearest neighbor search with the X tree. - - NeighborSearch, arma::mat, XTree > - knn1(&xTree, true); + NeighborSearch, arma::mat, + XTree> knn1(&xTree, true); BOOST_REQUIRE_EQUAL(xTree.NumDescendants(), numP); @@ -583,13 +580,12 @@ BOOST_AUTO_TEST_CASE(HilbertRTreeTraverserTest) arma::mat distances2; typedef HilbertRTree,arma::mat> TreeType; + NeighborSearchStat, arma::mat> TreeType; TreeType hilbertRTree(dataset, 20, 6, 5, 2, 0); // Nearest neighbor search with the Hilbert R tree. - NeighborSearch, arma::mat, - HilbertRTree > knn1(&hilbertRTree, true); + HilbertRTree> knn1(&hilbertRTree, true); BOOST_REQUIRE_EQUAL(hilbertRTree.NumDescendants(), numP); @@ -612,38 +608,34 @@ BOOST_AUTO_TEST_CASE(HilbertRTreeTraverserTest) } template -void CheckHilbertOrdering(TreeType* tree) +void CheckHilbertOrdering(const TreeType& tree) { - if(tree->IsLeaf()) + if (tree.IsLeaf()) { - for(size_t i = 0; i < tree->NumPoints() - 1; i++) - BOOST_REQUIRE_LE( - tree->AuxiliaryInfo().HilbertValue().ComparePoints( - tree->Dataset().col(tree->Points()[i]), - tree->Dataset().col(tree->Points()[i+1])), - 0); + for (size_t i = 0; i < tree.NumPoints() - 1; i++) + BOOST_REQUIRE_LE(tree.AuxiliaryInfo().HilbertValue().ComparePoints( + tree.Dataset().col(tree.Point(i)), + tree.Dataset().col(tree.Point(i + 1))), + 0); - BOOST_REQUIRE_EQUAL( - tree->AuxiliaryInfo().HilbertValue().CompareWith( - tree->Dataset().col(tree->Points()[tree->NumPoints() - 1])), - 0); + BOOST_REQUIRE_EQUAL(tree.AuxiliaryInfo().HilbertValue().CompareWith( + tree.Dataset().col(tree.Points()[tree.NumPoints() - 1])), + 0); } else { - for(size_t i = 0; i < tree->NumChildren() - 1; i++) - BOOST_REQUIRE_LE( - tree->AuxiliaryInfo().HilbertValue().CompareValues( - tree->Children()[i]->AuxiliaryInfo().HilbertValue(), - tree->Children()[i+1]->AuxiliaryInfo().HilbertValue()), - 0); + for (size_t i = 0; i < tree.NumChildren() - 1; i++) + BOOST_REQUIRE_LE(tree.AuxiliaryInfo().HilbertValue().CompareValues( + tree.Child(i).AuxiliaryInfo().HilbertValue(), + tree.Child(i + 1).AuxiliaryInfo().HilbertValue()), + 0); - BOOST_REQUIRE_EQUAL( - tree->AuxiliaryInfo().HilbertValue().CompareWith( - tree->Children()[tree->NumChildren() - 1]->AuxiliaryInfo().HilbertValue()), - 0); + BOOST_REQUIRE_EQUAL(tree.AuxiliaryInfo().HilbertValue().CompareWith( + tree.Child(tree.NumChildren() - 1).AuxiliaryInfo().HilbertValue()), + 0); - for(size_t i = 0; i < tree->NumChildren(); i++) - CheckHilbertOrdering(tree->Children()[i]); + for (size_t i = 0; i < tree.NumChildren(); i++) + CheckHilbertOrdering(tree.Child(i)); } } @@ -653,36 +645,37 @@ BOOST_AUTO_TEST_CASE(HilbertRTreeOrderingTest) dataset.randu(8, 1000); // 1000 points in 8 dimensions. typedef HilbertRTree,arma::mat> TreeType; + NeighborSearchStat, arma::mat> TreeType; TreeType hilbertRTree(dataset, 20, 6, 5, 2, 0); - CheckHilbertOrdering(&hilbertRTree); + CheckHilbertOrdering(hilbertRTree); } template -void CheckDiscreteHilbertValueSync(const TreeType* tree) +void CheckDiscreteHilbertValueSync(const TreeType& tree) { typedef DiscreteHilbertValue HilbertValue; typedef typename HilbertValue::HilbertElemType HilbertElemType; - if (tree->IsLeaf()) + if (tree.IsLeaf()) { - const HilbertValue &value = tree->AuxiliaryInfo().HilbertValue(); + const HilbertValue& value = tree.AuxiliaryInfo().HilbertValue(); - for (size_t i = 0; i < tree->NumPoints(); i++) + for (size_t i = 0; i < tree.NumPoints(); i++) { arma::Col pointValue = - HilbertValue::CalculateValue(tree->Dataset().col(tree->Points()[i])); + HilbertValue::CalculateValue(tree.Dataset().col(tree.Points()[i])); - int equal = HilbertValue::CompareValues(value.LocalHilbertValues()->col(i), pointValue); + const int equal = HilbertValue::CompareValues( + value.LocalHilbertValues().col(i), pointValue); BOOST_REQUIRE_EQUAL(equal, 0); } } else - for (size_t i = 0; i < tree->NumChildren(); i++) - CheckDiscreteHilbertValueSync(tree->Children()[i]); + for (size_t i = 0; i < tree.NumChildren(); i++) + CheckDiscreteHilbertValueSync(tree.Child(i)); } BOOST_AUTO_TEST_CASE(DiscreteHilbertValueSyncTest) @@ -705,47 +698,56 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point01[0] = -DBL_MAX; point02[0] = DBL_MAX; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = -DBL_MAX; point02[0] = -100; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = -100; point02[0] = -1; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = -1; point02[0] = -std::numeric_limits::min(); - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = -std::numeric_limits::min(); point02[0] = 0; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = 0; point02[0] = std::numeric_limits::min(); - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = std::numeric_limits::min(); point02[0] = 1; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = 1; point02[0] = 100; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); point01[0] = 100; point02[0] = DBL_MAX; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01,point02), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point01, + point02), -1); arma::vec point1(2); arma::vec point2(2); @@ -756,7 +758,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point2[0] = 0; point2[1] = 0; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1,point2), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1, + point2), -1); point1[0] = -1; point1[1] = -1; @@ -764,7 +767,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point2[0] = 1; point2[1] = -1; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1,point2), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1, + point2), -1); point1[0] = -1; point1[1] = -1; @@ -772,7 +776,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point2[0] = -1; point2[1] = 1; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1,point2), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1, + point2), -1); point1[0] = -DBL_MAX + 1; point1[1] = -DBL_MAX + 1; @@ -780,7 +785,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point2[0] = -1; point2[1] = -1; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1,point2), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1, + point2), -1); point1[0] = DBL_MAX * 0.75; point1[1] = DBL_MAX * 0.75; @@ -788,7 +794,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point2[0] = DBL_MAX * 0.25; point2[1] = DBL_MAX * 0.25; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1,point2), 1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point1, + point2), 1); arma::vec point3(4); arma::vec point4(4); @@ -803,7 +810,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point4[2] = 1.0; point4[3] = 1.0; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point3,point4), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point3, + point4), -1); point3[0] = -DBL_MAX; point3[1] = DBL_MAX; @@ -815,7 +823,8 @@ BOOST_AUTO_TEST_CASE(DiscreteHilbertValueTest) point4[2] = DBL_MAX; point4[3] = DBL_MAX; - BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point3,point4), -1); + BOOST_REQUIRE_EQUAL(DiscreteHilbertValue::ComparePoints(point3, + point4), -1); } // Test the tree splitting. We set MaxLeafSize and MaxNumChildren rather low