tribool_io_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 199 行
CPP
199 行
// Copyright Douglas Gregor 2002-2004. Use, modification and// distribution is subject to the Boost Software License, Version// 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#include <boost/logic/tribool.hpp>#include <boost/logic/tribool_io.hpp>#include <boost/test/minimal.hpp>#include <sstream>#include <string>#include <iostream>#include <ios> // for std::boolalpha#ifndef BOOST_NO_STD_LOCALE# include <locale>#endifint test_main(int, char*[]){ using namespace boost::logic; tribool x; // Check tribool output std::ostringstream out; // Output false (noboolalpha) out.str(std::string()); x = false; out << x; std::cout << "Output false (noboolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == "0"); // Output true (noboolalpha) out.str(std::string()); x = true; out << x; std::cout << "Output true (noboolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == "1"); // Output indeterminate (noboolalpha) out.str(std::string()); x = indeterminate; out << x; std::cout << "Output indeterminate (noboolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == "2"); // Output indeterminate (noboolalpha) out.str(std::string()); out << indeterminate; std::cout << "Output indeterminate (noboolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == "2");#ifndef BOOST_NO_STD_LOCALE const std::numpunct<char>& punct = BOOST_USE_FACET(std::numpunct<char>, out.getloc()); // Output false (boolalpha) out.str(std::string()); x = false; out << std::boolalpha << x; std::cout << "Output false (boolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == punct.falsename()); // Output true (boolalpha) out.str(std::string()); x = true; out << std::boolalpha << x; std::cout << "Output true (boolalpha): " << out.str() << std::endl; BOOST_CHECK(out.str() == punct.truename()); // Output indeterminate (boolalpha - default name) out.str(std::string()); x = indeterminate; out << std::boolalpha << x; std::cout << "Output indeterminate (boolalpha - default name): " << out.str() << std::endl; BOOST_CHECK(out.str() == "indeterminate"); // Output indeterminate (boolalpha - default name) out.str(std::string()); out << std::boolalpha << indeterminate; std::cout << "Output indeterminate (boolalpha - default name): " << out.str() << std::endl; BOOST_CHECK(out.str() == "indeterminate");# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // No template constructors, so we can't build the test locale# else // Give indeterminate a new name, and output it via boolalpha std::locale global; std::locale test_locale(global, new indeterminate_name<char>("maybe")); out.imbue(test_locale); out.str(std::string()); out << std::boolalpha << x; std::cout << "Output indeterminate (boolalpha - \"maybe\"): " << out.str() << std::endl; BOOST_CHECK(out.str() == "maybe");# endif#endif // ! BOOST_NO_STD_LOCALE // Checking tribool input // Input false (noboolalpha) { std::istringstream in("0"); std::cout << "Input \"0\" (checks for false)" << std::endl; in >> x; BOOST_CHECK(x == false); } // Input true (noboolalpha) { std::istringstream in("1"); std::cout << "Input \"1\" (checks for true)" << std::endl; in >> x; BOOST_CHECK(x == true); } // Input false (noboolalpha) { std::istringstream in("2"); std::cout << "Input \"2\" (checks for indeterminate)" << std::endl; in >> x; BOOST_CHECK(indeterminate(x)); } // Input bad number (noboolalpha) { std::istringstream in("3"); std::cout << "Input \"3\" (checks for failure)" << std::endl; BOOST_CHECK(!(in >> x)); } // Input false (boolalpha) { std::istringstream in("false"); std::cout << "Input \"false\" (checks for false)" << std::endl; in >> std::boolalpha >> x; BOOST_CHECK(x == false); } // Input true (boolalpha) { std::istringstream in("true"); std::cout << "Input \"true\" (checks for true)" << std::endl; in >> std::boolalpha >> x; BOOST_CHECK(x == true); } // Input indeterminate (boolalpha) { std::istringstream in("indeterminate"); std::cout << "Input \"indeterminate\" (checks for indeterminate)" << std::endl; in >> std::boolalpha >> x; BOOST_CHECK(indeterminate(x)); } // Input bad string (boolalpha) { std::istringstream in("bad"); std::cout << "Input \"bad\" (checks for failure)" << std::endl; BOOST_CHECK(!(in >> std::boolalpha >> x)); }#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // No template constructors, so we can't build the test locale#elif !defined(BOOST_NO_STD_LOCALE) // Input indeterminate named "maybe" (boolalpha) { std::istringstream in("maybe"); in.imbue(test_locale); std::cout << "Input \"maybe\" (checks for indeterminate, uses locales)" << std::endl; in >> std::boolalpha >> x; BOOST_CHECK(indeterminate(x)); } // Input indeterminate named "true_or_false" (boolalpha) { std::locale my_locale(global, new indeterminate_name<char>("true_or_false")); std::istringstream in("true_or_false"); in.imbue(my_locale); std::cout << "Input \"true_or_false\" (checks for indeterminate)" << std::endl; in >> std::boolalpha >> x; BOOST_CHECK(indeterminate(x)); }#endif return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?