multi_pass_tests.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 766 行 · 第 1/2 页

CPP
766
字号
        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_CLASSIC_NS::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 + -
显示快捷键?