void test() { NodePtr hello = new Leaf("hello"); NodePtr world = new Leaf("world"); //check_node(hello); NodePtr hw = hello->concat_with(world); //hw->debug_print(); check_node(hw); //concatenation for (int i = 0; i<100; i++) { if (i%20 == 0) std::cout<<i<<std::endl; hw = hw->concat_with(hello); //hw->debug_print(); assert(check_node(hw)); } assert(check_node(hw)); hw->debug_print(); //random access for (int i = 0; i<100; i++) { Iterator iter = Iterator(hw); int pos = 0; std::string s = hw->as_string(); while (pos < hw->length()) { //std::cout<<pos<<" "; assert(s[pos] == iter.current()); int d = rand()%100; pos += d; iter.advance(d); } assert(!iter.valid); //std::cout<<std::endl; } //slices for (int i = 0; i<100; i++) { int begin = rand()%(hw->length()+1); int end = begin+rand()%(hw->length()-begin+1); NodePtr slice = hw->slice(begin, end); assert(check_node(slice)); std::cout<<begin<<" "<<end<<std::endl; } std::cout<<"hw depth "<<hw->depth()<<std::endl; }