void CheckSync(const TreeType& tree) { if (tree.IsLeaf()) { for (size_t i = 0; i < tree.Count(); i++) { for (size_t j = 0; j < tree.LocalDataset().n_rows; j++) { BOOST_REQUIRE_EQUAL(tree.LocalDataset().col(i)[j], tree.Dataset().col(tree.Points()[i])[j]); } } } else { for (size_t i = 0; i < tree.NumChildren(); i++) CheckSync(*tree.Children()[i]); } }
void CheckExactContainment(const TreeType& tree) { if (tree.NumChildren() == 0) { for (size_t i = 0; i < tree.Bound().Dim(); i++) { double min = DBL_MAX; double max = -1.0 * DBL_MAX; for(size_t j = 0; j < tree.Count(); j++) { if (tree.LocalDataset().col(j)[i] < min) min = tree.LocalDataset().col(j)[i]; if (tree.LocalDataset().col(j)[i] > max) max = tree.LocalDataset().col(j)[i]; } BOOST_REQUIRE_EQUAL(max, tree.Bound()[i].Hi()); BOOST_REQUIRE_EQUAL(min, tree.Bound()[i].Lo()); } } else { for (size_t i = 0; i < tree.Bound().Dim(); i++) { double min = DBL_MAX; double max = -1.0 * DBL_MAX; for (size_t j = 0; j < tree.NumChildren(); j++) { if(tree.Child(j).Bound()[i].Lo() < min) min = tree.Child(j).Bound()[i].Lo(); if(tree.Child(j).Bound()[i].Hi() > max) max = tree.Child(j).Bound()[i].Hi(); } BOOST_REQUIRE_EQUAL(max, tree.Bound()[i].Hi()); BOOST_REQUIRE_EQUAL(min, tree.Bound()[i].Lo()); } for (size_t i = 0; i < tree.NumChildren(); i++) CheckExactContainment(tree.Child(i)); } }