void test_cst_dfs_iterator_and_depth(Cst& cst, typename Cst::size_type times=1000000, bool output=false) { if (times > 2*cst.nodes()-cst.size()) times = 2*cst.nodes()-cst.size(); typedef typename Cst::size_type size_type; size_type cnt=0; write_R_output("cst","dfs and depth","begin",times,cnt); typename Cst::const_iterator it = cst.begin(); if (!output) { for (size_type i=0; i<times; ++i, ++it) { if (!cst.is_leaf(*it)) cnt += cst.depth(*it); } } else { for (size_type i=0; i<times; ++i, ++it) { if (!cst.is_leaf(*it)) { size_type d = cst.depth(*it); std::cerr << d << "-[" << cst.lb(*it) << "," << cst.rb(*it) << "] "; if (d < 60) { for (int i=1; i<=d; ++i) std::cerr<< cst.edge(*it, i); } std::cerr << std::endl; cnt += d; } } } write_R_output("cst","dfs and depth","end",times,cnt); }
void test_cst_dfs_iterator(Cst& cst, typename Cst::size_type times=100000) { if (times > cst.nodes()) times = cst.nodes(); typedef typename Cst::size_type size_type; size_type cnt=0; { // calc values for cnt typename Cst::const_iterator it = cst.begin(); for (size_type i=0; i < std::min(times,(size_type)1000); ++i, ++it) { cnt += cst.depth(*it); } } write_R_output("cst","dfs","begin",times,cnt); typename Cst::const_iterator it = cst.begin(); for (size_type i=0; i<times; ++i) { ++it; } write_R_output("cst", "dfs", "end", times, cnt + cst.depth(*it)); }
void test_cst_dfs_iterator_and_id(Cst& cst, typename Cst::size_type times=1000000, bool output=false) { if (times > 2*cst.nodes()-cst.size()) times = 2*cst.nodes()-cst.size(); typedef typename Cst::size_type size_type; size_type cnt=0; write_R_output("cst","dfs and id","begin",times,cnt); typename Cst::const_iterator it = cst.begin(); if (!output) { for (size_type i=0; i<times; ++i, ++it) { cnt += cst.id(*it); } } else { for (size_type i=0; i<times; ++i, ++it) { size_type id = cst.id(*it); std::cerr << id << std::endl; cnt += id; } } write_R_output("cst","dfs and id","end",times,cnt); }