// Boost.Convert test and usage example // Copyright (c) 2009-2014 Vladimir Batov. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt. #include "./test.hpp" using std::string; using std::wstring; static void test_user_type() { boost::cnv::cstream cnv; // stringstream-based char converter direction const up_dir1 = direction::up; direction const dn_dir1 = direction::dn; string const up_dir0_str = boost::convert(direction::up, cnv).value(); string const dn_dir0_str = boost::convert(direction::dn, cnv).value(); string const up_dir1_str = boost::convert(up_dir1, cnv).value(); string const dn_dir1_str = boost::convert(dn_dir1, cnv).value(); direction const up_dir2 = boost::convert(up_dir1_str, cnv).value(); direction const dn_dir2 = boost::convert(dn_dir1_str, cnv).value(); direction const up_dir3 = boost::convert(up_dir1_str, cnv).value(); direction const dn_dir3 = boost::convert(dn_dir1_str, cnv).value(); direction const dn_dir4 = boost::convert("junk", cnv).value_or(direction::dn); boost::optional up_dir4 = boost::convert("junk", cnv); BOOST_TEST(up_dir0_str == "up"); BOOST_TEST(dn_dir0_str == "dn"); BOOST_TEST(up_dir1_str == "up"); BOOST_TEST(dn_dir1_str == "dn"); BOOST_TEST(up_dir2 == up_dir1); BOOST_TEST(dn_dir2 == dn_dir1); BOOST_TEST(up_dir3 == direction::up); BOOST_TEST(dn_dir3 == direction::dn); BOOST_TEST(dn_dir4 == direction::dn); BOOST_TEST(!up_dir4); // Failed conversion } static void test_algorithms() { boost::array chgs1 = {{ change::no, change::up, change::dn }}; boost::array chgs2 = {{ change::no, change::up, change::dn }}; std::vector strs1; std::vector strs2; std::vector strs3; boost::cnv::cstream cnv; std::transform(chgs1.begin(), chgs1.end(), std::back_inserter(strs1), boost::convert(boost::cref(cnv))); std::transform(chgs2.begin(), chgs2.end(), std::back_inserter(strs2), boost::convert(boost::cref(cnv))); std::transform(chgs2.begin(), chgs2.end(), std::back_inserter(strs3), boost::convert(boost::cref(cnv))); BOOST_TEST(strs1.size() == 3); BOOST_TEST(strs1[0] == "no"); BOOST_TEST(strs1[1] == "up"); BOOST_TEST(strs1[2] == "dn"); BOOST_TEST(strs2.size() == 3); BOOST_TEST(strs2[0] == "no"); BOOST_TEST(strs2[1] == "up"); BOOST_TEST(strs2[2] == "dn"); BOOST_TEST(strs3.size() == 3); BOOST_TEST(strs3[0] == "0"); BOOST_TEST(strs3[1] == "1"); BOOST_TEST(strs3[2] == "2"); } void test::cnv::user_type() { test_user_type(); test_algorithms(); }