multi_pass.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 771 行 · 第 1/2 页
CPP
771 行
BOOST_TEST(*mp1 > *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp2 < *mp1); BOOST_TEST(*mp2 <= *mp1); while (*mp2 != *mp1) { res << **mp2; ++*mp2; } BOOST_TEST(*mp1 == *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp1 <= *mp2); while (*mp1 != *mpend) { res << **mp1; ++*mp1; } BOOST_TEST(*mp1 != *mp2); BOOST_TEST(*mp1 > *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp2 < *mp1); BOOST_TEST(*mp2 <= *mp1); while (*mp2 != *mpend) { res << **mp2; ++*mp2; } BOOST_TEST(*mp1 == *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp1 <= *mp2); res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> a(ss); boost::scoped_ptr<fixed_multi_pass_t> mp1(new fixed_multi_pass_t(a)); boost::scoped_ptr<fixed_multi_pass_t> mp2(new fixed_multi_pass_t(a)); BOOST_TEST(*mp1 != *mp2); ++*mp1; BOOST_TEST(*mp1 != *mp2); }}void test_first_owner_multi_pass(){ res << "-*= test_first_owner_multi_pass =*-\n"; istream_iterator<char> end; boost::scoped_ptr<first_owner_multi_pass_t> mpend(new first_owner_multi_pass_t(end)); { sstream_t ss; ss << "test string"; istream_iterator<char> a(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp1(new first_owner_multi_pass_t(a)); while (*mp1 != *mpend) { res << *((*mp1)++); } res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> b(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(b)); boost::scoped_ptr<first_owner_multi_pass_t> mp3(new first_owner_multi_pass_t(*mp2)); for (int i = 0; i < 4; ++i) { res << **mp2; ++*mp2; } mp3.reset(); while (*mp2 != *mpend) { res << **mp2; ++*mp2; } res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> a(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp1(new first_owner_multi_pass_t(a)); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(*mp1)); for (int i = 0; i < 4; ++i) { res << **mp1; ++*mp1; } while (*mp2 != *mpend) { res << **mp2; ++*mp2; } while (*mp1 != *mpend) { res << **mp1; ++*mp1; } res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> b(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(b)); boost::scoped_ptr<first_owner_multi_pass_t> mp3(new first_owner_multi_pass_t(*mp2)); for (int i = 0; i < 4; ++i) { res << **mp2; ++*mp2; } mp3.reset(); ++*mp2; while (*mp2 != *mpend) { res << **mp2; ++*mp2; } res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> a(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp1(new first_owner_multi_pass_t(a)); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(*mp1)); BOOST_TEST(*mp1 == *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp1 <= *mp2); for (int i = 0; i < 4; ++i) { res << **mp1; ++*mp1; } BOOST_TEST(*mp1 != *mp2); BOOST_TEST(*mp1 > *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp2 < *mp1); BOOST_TEST(*mp2 <= *mp1); while (*mp2 != *mp1) { res << **mp2; ++*mp2; } BOOST_TEST(*mp1 == *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp1 <= *mp2); while (*mp1 != *mpend) { res << **mp1; ++*mp1; } BOOST_TEST(*mp1 != *mp2); BOOST_TEST(*mp1 > *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp2 < *mp1); BOOST_TEST(*mp2 <= *mp1); while (*mp2 != *mpend) { res << **mp2; ++*mp2; } BOOST_TEST(*mp1 == *mp2); BOOST_TEST(*mp1 >= *mp2); BOOST_TEST(*mp1 <= *mp2); res << endl; } { sstream_t ss; ss << "test string"; istream_iterator<char> a(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp1(new first_owner_multi_pass_t(a)); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(a)); BOOST_TEST(*mp1 != *mp2); ++*mp1; BOOST_TEST(*mp1 != *mp2); } { sstream_t ss; ss << "test string"; istream_iterator<char> b(ss); boost::scoped_ptr<first_owner_multi_pass_t> mp2(new first_owner_multi_pass_t(b)); boost::scoped_ptr<first_owner_multi_pass_t> mp3(new first_owner_multi_pass_t(*mp2)); for (int i = 0; i < 4; ++i) { res << **mp2; ++*mp2; } mp2->clear_queue(); while (*mp2 != *mpend) { res << **mp2; ++*mp2; } try { res << **mp3; // this should throw illegal_backtracking BOOST_TEST(0); } catch (const boost::spirit::multi_pass_policies::illegal_backtracking& /*e*/) { } res << endl; }}void test_functor_multi_pass(){ res << "-*= test_functor_multi_pass =*-\n"; functor_multi_pass_t mpend; { functor_multi_pass_t mp1 = functor_multi_pass_t(my_functor()); while (mp1 != mpend) { res << *(mp1++); } res << endl; } { functor_multi_pass_t mp1 = functor_multi_pass_t(my_functor()); functor_multi_pass_t mp2 = functor_multi_pass_t(mp1); for (int i = 0; i < 4; ++i) { res << *mp1; ++mp1; } while (mp2 != mpend) { res << *mp2; ++mp2; } while (mp1 != mpend) { res << *mp1; ++mp1; } res << endl; } { functor_multi_pass_t mp1 = functor_multi_pass_t(my_functor()); functor_multi_pass_t mp2 = functor_multi_pass_t(mp1); BOOST_TEST(mp1 == mp2); BOOST_TEST(mp1 >= mp2); BOOST_TEST(mp1 <= mp2); for (int i = 0; i < 4; ++i) { res << *mp1; ++mp1; } BOOST_TEST(mp1 != mp2); BOOST_TEST(mp1 > mp2); BOOST_TEST(mp1 >= mp2); BOOST_TEST(mp2 < mp1); BOOST_TEST(mp2 <= mp1); while (mp2 != mp1) { res << *mp2; ++mp2; } BOOST_TEST(mp1 == mp2); BOOST_TEST(mp1 >= mp2); BOOST_TEST(mp1 <= mp2); while (mp1 != mpend) { res << *mp1; ++mp1; } BOOST_TEST(mp1 != mp2); BOOST_TEST(mp1 > mp2); BOOST_TEST(mp1 >= mp2); BOOST_TEST(mp2 < mp1); BOOST_TEST(mp2 <= mp1); while (mp2 != mpend) { res << *mp2; ++mp2; } BOOST_TEST(mp1 == mp2); BOOST_TEST(mp1 >= mp2); BOOST_TEST(mp1 <= mp2); res << endl; } { functor_multi_pass_t mp1 = functor_multi_pass_t(my_functor()); functor_multi_pass_t mp2 = functor_multi_pass_t(my_functor()); BOOST_TEST(mp1 != mp2); ++mp1; BOOST_TEST(mp1 != mp2); }}int main(int, char**){ test_default_multi_pass(); test_fixed_multi_pass(); test_first_owner_multi_pass(); test_functor_multi_pass(); BOOST_TEST(getstring(res) == "-*= test_default_multi_pass =*-\n" "teststring\n" "teststring\n" "testteststringstring\n" "testtring\n" "testteststringstring\n" "teststring\n" "-*= test_fixed_multi_pass =*-\n" "teststring\n" "teststring\n" "testteststringstring\n" "testtring\n" "testteststringstring\n" "-*= test_first_owner_multi_pass =*-\n" "teststring\n" "teststring\n" "testteststringstring\n" "testtring\n" "testteststringstring\n" "teststring\n" "-*= test_functor_multi_pass =*-\n" "ABCDEFGHIJKL\n" "ABCDABCDEFGHIJKLEFGHIJKL\n" "ABCDABCDEFGHIJKLEFGHIJKL\n"); return boost::report_errors();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?