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 CheckContainment(const TreeType& tree) { if (tree.NumChildren() == 0) { for (size_t i = 0; i < tree.Count(); i++) BOOST_REQUIRE(tree.Bound().Contains( tree.Dataset().unsafe_col(tree.Points()[i]))); } else { for (size_t i = 0; i < tree.NumChildren(); i++) { for (size_t j = 0; j < tree.Bound().Dim(); j++) BOOST_REQUIRE(tree.Bound()[j].Contains(tree.Children()[i]->Bound()[j])); CheckContainment(*(tree.Children()[i])); } } }
std::vector<arma::vec*> GetAllPointsInTree(const TreeType& tree) { std::vector<arma::vec*> vec; if (tree.NumChildren() > 0) { for (size_t i = 0; i < tree.NumChildren(); i++) { std::vector<arma::vec*> tmp = GetAllPointsInTree(*(tree.Children()[i])); vec.insert(vec.begin(), tmp.begin(), tmp.end()); } } else { for (size_t i = 0; i < tree.Count(); i++) { arma::vec* c = new arma::vec(tree.Dataset().col(tree.Points()[i])); vec.push_back(c); } } return vec; }