Compare commits

..

2 Commits

Author SHA1 Message Date
c33eac8eda This commit was manufactured by cvs2svn to create tag
'Version_1_32_0'.

[SVN r26264]
2004-11-19 19:19:18 +00:00
e16b5c4bf2 This commit was manufactured by cvs2svn to create branch 'RC_1_32_0'.
[SVN r25797]
2004-10-20 08:26:43 +00:00
8 changed files with 193 additions and 210 deletions

View File

@ -2,7 +2,7 @@
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
"http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"> "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
<library name="Tribool" dirname="logic" id="tribool" <library name="Tribool" dirname="logic" id="tribool"
last-revision="$Date: 2007/05/03 03:28:53 $" xmlns:xi="http://www.w3.org/2001/XInclude"> last-revision="$Date: 2004/07/25 03:01:38 $" xmlns:xi="http://www.w3.org/2001/XInclude">
<libraryinfo> <libraryinfo>
<author> <author>
<firstname>Douglas</firstname> <firstname>Douglas</firstname>
@ -197,7 +197,7 @@ cout &lt;&lt; boolalpha &lt;&lt; x &lt;&lt; endl; // Prints "maybe"</programlist
</section> </section>
<xi:include href="reference.xml"/> <xi:include href="reference.boostbook"/>
<testsuite id="tribool.tests"> <testsuite id="tribool.tests">
<run-test filename="tribool_test.cpp"> <run-test filename="tribool_test.cpp">

View File

@ -118,7 +118,7 @@ public:
* The actual stored value in this 3-state boolean, which may be false, true, * The actual stored value in this 3-state boolean, which may be false, true,
* or indeterminate. * or indeterminate.
*/ */
enum value_t { false_value, true_value, indeterminate_value } value; enum { false_value, true_value, indeterminate_value } value;
}; };
// Check if the given tribool has an indeterminate value. Also doubles as a // Check if the given tribool has an indeterminate value. Also doubles as a

View File

@ -104,10 +104,9 @@ template<>
inline std::basic_string<char> get_default_indeterminate_name<char>() inline std::basic_string<char> get_default_indeterminate_name<char>()
{ return "indeterminate"; } { return "indeterminate"; }
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) #if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
// VC++ 6.0 chokes on the specialization below, so we're stuck without // VC++ 6.0 chokes on the specialization below, so we're stuck without
// wchar_t support. What a pain. TODO: it might just need a the template // wchar_t support. What a pain.
// parameter as function parameter...
#else #else
# ifndef BOOST_NO_WCHAR_T # ifndef BOOST_NO_WCHAR_T
/// Returns the wide character string L"indeterminate". /// Returns the wide character string L"indeterminate".
@ -202,26 +201,6 @@ operator<<(std::basic_ostream<CharT, Traits>& out, tribool x)
return out; return out;
} }
/**
* \brief Writes the indeterminate tribool value to a stream.
*
* This routine outputs either the integer
* value 2 (if <tt>(out.flags() & std::ios_base::boolalpha) == 0</tt>)
* or the name of the indeterminate value. The name of the
* indeterminate value comes from the indeterminate_name facet (if it
* is defined in the output stream's locale), or from the
* get_default_indeterminate_name function (if it is not defined in the
* locale or if the C++ standard library implementation does not
* support locales).
*
* \returns @p out
*/
template<typename CharT, typename Traits>
inline std::basic_ostream<CharT, Traits>&
operator<<(std::basic_ostream<CharT, Traits>& out,
bool (*)(tribool, detail::indeterminate_t))
{ return out << tribool(indeterminate); }
/** /**
* \brief Reads a tribool value from a stream. * \brief Reads a tribool value from a stream.
* *

35
test/Jamfile Normal file
View File

@ -0,0 +1,35 @@
# Tribool library
# Copyright (C) 2002-2003 Douglas Gregor
# 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)
# For more information, see http://www.boost.org/
# Testing Jamfile autogenerated from XML source
subproject libs/logic/test ;
# bring in rules for testing
SEARCH on testing.jam = $(BOOST_BUILD_PATH) ;
include testing.jam ;
# Make tests run by default.
DEPENDS all : test ;
{
# look in BOOST_ROOT for sources first, just in this Jamfile
local SEARCH_SOURCE = $(BOOST_ROOT) $(SEARCH_SOURCE) ;
test-suite logic
:
[ run libs/logic/test/tribool_test.cpp : : : : ]
[ run libs/logic/test/tribool_rename_test.cpp : : : : ]
[ run libs/logic/test/tribool_io_test.cpp : : : : ]
;
}

View File

@ -1,17 +0,0 @@
# Tribool library
# Copyright (C) 2002-2003 Douglas Gregor
# 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)
# For more information, see http://www.boost.org/
test-suite logic :
[ run tribool_test.cpp ]
[ run tribool_rename_test.cpp ]
[ run tribool_io_test.cpp ]
;

View File

@ -27,14 +27,14 @@ int test_main(int, char*[])
x = false; x = false;
out << x; out << x;
std::cout << "Output false (noboolalpha): " << out.str() << std::endl; std::cout << "Output false (noboolalpha): " << out.str() << std::endl;
BOOST_CHECK(out.str() == "0"); BOOST_TEST(out.str() == "0");
// Output true (noboolalpha) // Output true (noboolalpha)
out.str(std::string()); out.str(std::string());
x = true; x = true;
out << x; out << x;
std::cout << "Output true (noboolalpha): " << out.str() << std::endl; std::cout << "Output true (noboolalpha): " << out.str() << std::endl;
BOOST_CHECK(out.str() == "1"); BOOST_TEST(out.str() == "1");
// Output indeterminate (noboolalpha) // Output indeterminate (noboolalpha)
out.str(std::string()); out.str(std::string());
@ -42,14 +42,7 @@ int test_main(int, char*[])
out << x; out << x;
std::cout << "Output indeterminate (noboolalpha): " << out.str() std::cout << "Output indeterminate (noboolalpha): " << out.str()
<< std::endl; << std::endl;
BOOST_CHECK(out.str() == "2"); BOOST_TEST(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 #ifndef BOOST_NO_STD_LOCALE
const std::numpunct<char>& punct = const std::numpunct<char>& punct =
@ -60,7 +53,7 @@ int test_main(int, char*[])
x = false; x = false;
out << std::boolalpha << x; out << std::boolalpha << x;
std::cout << "Output false (boolalpha): " << out.str() << std::endl; std::cout << "Output false (boolalpha): " << out.str() << std::endl;
BOOST_CHECK(out.str() == punct.falsename()); BOOST_TEST(out.str() == punct.falsename());
// Output true (boolalpha) // Output true (boolalpha)
out.str(std::string()); out.str(std::string());
@ -68,7 +61,7 @@ int test_main(int, char*[])
out << std::boolalpha << x; out << std::boolalpha << x;
std::cout << "Output true (boolalpha): " << out.str() << std::endl; std::cout << "Output true (boolalpha): " << out.str() << std::endl;
BOOST_CHECK(out.str() == punct.truename()); BOOST_TEST(out.str() == punct.truename());
// Output indeterminate (boolalpha - default name) // Output indeterminate (boolalpha - default name)
out.str(std::string()); out.str(std::string());
@ -76,14 +69,7 @@ int test_main(int, char*[])
out << std::boolalpha << x; out << std::boolalpha << x;
std::cout << "Output indeterminate (boolalpha - default name): " << out.str() std::cout << "Output indeterminate (boolalpha - default name): " << out.str()
<< std::endl; << std::endl;
BOOST_CHECK(out.str() == "indeterminate"); BOOST_TEST(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) # if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
// No template constructors, so we can't build the test locale // No template constructors, so we can't build the test locale
@ -96,7 +82,7 @@ int test_main(int, char*[])
out << std::boolalpha << x; out << std::boolalpha << x;
std::cout << "Output indeterminate (boolalpha - \"maybe\"): " << out.str() std::cout << "Output indeterminate (boolalpha - \"maybe\"): " << out.str()
<< std::endl; << std::endl;
BOOST_CHECK(out.str() == "maybe"); BOOST_TEST(out.str() == "maybe");
# endif # endif
#endif // ! BOOST_NO_STD_LOCALE #endif // ! BOOST_NO_STD_LOCALE
@ -107,7 +93,7 @@ int test_main(int, char*[])
std::istringstream in("0"); std::istringstream in("0");
std::cout << "Input \"0\" (checks for false)" << std::endl; std::cout << "Input \"0\" (checks for false)" << std::endl;
in >> x; in >> x;
BOOST_CHECK(x == false); BOOST_TEST(x == false);
} }
// Input true (noboolalpha) // Input true (noboolalpha)
@ -115,7 +101,7 @@ int test_main(int, char*[])
std::istringstream in("1"); std::istringstream in("1");
std::cout << "Input \"1\" (checks for true)" << std::endl; std::cout << "Input \"1\" (checks for true)" << std::endl;
in >> x; in >> x;
BOOST_CHECK(x == true); BOOST_TEST(x == true);
} }
// Input false (noboolalpha) // Input false (noboolalpha)
@ -123,14 +109,14 @@ int test_main(int, char*[])
std::istringstream in("2"); std::istringstream in("2");
std::cout << "Input \"2\" (checks for indeterminate)" << std::endl; std::cout << "Input \"2\" (checks for indeterminate)" << std::endl;
in >> x; in >> x;
BOOST_CHECK(indeterminate(x)); BOOST_TEST(indeterminate(x));
} }
// Input bad number (noboolalpha) // Input bad number (noboolalpha)
{ {
std::istringstream in("3"); std::istringstream in("3");
std::cout << "Input \"3\" (checks for failure)" << std::endl; std::cout << "Input \"3\" (checks for failure)" << std::endl;
BOOST_CHECK(!(in >> x)); BOOST_TEST(!(in >> x));
} }
// Input false (boolalpha) // Input false (boolalpha)
@ -138,7 +124,7 @@ int test_main(int, char*[])
std::istringstream in("false"); std::istringstream in("false");
std::cout << "Input \"false\" (checks for false)" << std::endl; std::cout << "Input \"false\" (checks for false)" << std::endl;
in >> std::boolalpha >> x; in >> std::boolalpha >> x;
BOOST_CHECK(x == false); BOOST_TEST(x == false);
} }
// Input true (boolalpha) // Input true (boolalpha)
@ -146,7 +132,7 @@ int test_main(int, char*[])
std::istringstream in("true"); std::istringstream in("true");
std::cout << "Input \"true\" (checks for true)" << std::endl; std::cout << "Input \"true\" (checks for true)" << std::endl;
in >> std::boolalpha >> x; in >> std::boolalpha >> x;
BOOST_CHECK(x == true); BOOST_TEST(x == true);
} }
// Input indeterminate (boolalpha) // Input indeterminate (boolalpha)
@ -155,7 +141,7 @@ int test_main(int, char*[])
std::cout << "Input \"indeterminate\" (checks for indeterminate)" std::cout << "Input \"indeterminate\" (checks for indeterminate)"
<< std::endl; << std::endl;
in >> std::boolalpha >> x; in >> std::boolalpha >> x;
BOOST_CHECK(indeterminate(x)); BOOST_TEST(indeterminate(x));
} }
// Input bad string (boolalpha) // Input bad string (boolalpha)
@ -163,7 +149,7 @@ int test_main(int, char*[])
std::istringstream in("bad"); std::istringstream in("bad");
std::cout << "Input \"bad\" (checks for failure)" std::cout << "Input \"bad\" (checks for failure)"
<< std::endl; << std::endl;
BOOST_CHECK(!(in >> std::boolalpha >> x)); BOOST_TEST(!(in >> std::boolalpha >> x));
} }
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
@ -177,7 +163,7 @@ int test_main(int, char*[])
std::cout << "Input \"maybe\" (checks for indeterminate, uses locales)" std::cout << "Input \"maybe\" (checks for indeterminate, uses locales)"
<< std::endl; << std::endl;
in >> std::boolalpha >> x; in >> std::boolalpha >> x;
BOOST_CHECK(indeterminate(x)); BOOST_TEST(indeterminate(x));
} }
// Input indeterminate named "true_or_false" (boolalpha) // Input indeterminate named "true_or_false" (boolalpha)
@ -189,7 +175,7 @@ int test_main(int, char*[])
std::cout << "Input \"true_or_false\" (checks for indeterminate)" std::cout << "Input \"true_or_false\" (checks for indeterminate)"
<< std::endl; << std::endl;
in >> std::boolalpha >> x; in >> std::boolalpha >> x;
BOOST_CHECK(indeterminate(x)); BOOST_TEST(indeterminate(x));
} }
#endif #endif

View File

@ -19,103 +19,103 @@ int test_main(int,char*[])
tribool y(true); // true tribool y(true); // true
tribool z(maybe); // maybe tribool z(maybe); // maybe
BOOST_CHECK(!x); BOOST_TEST(!x);
BOOST_CHECK(x == false); BOOST_TEST(x == false);
BOOST_CHECK(false == x); BOOST_TEST(false == x);
BOOST_CHECK(x != true); BOOST_TEST(x != true);
BOOST_CHECK(true != x); BOOST_TEST(true != x);
BOOST_CHECK(maybe(x == maybe)); BOOST_TEST(maybe(x == maybe));
BOOST_CHECK(maybe(maybe == x)); BOOST_TEST(maybe(maybe == x));
BOOST_CHECK(maybe(x != maybe)); BOOST_TEST(maybe(x != maybe));
BOOST_CHECK(maybe(maybe != x)); BOOST_TEST(maybe(maybe != x));
BOOST_CHECK(x == x); BOOST_TEST(x == x);
BOOST_CHECK(!(x != x)); BOOST_TEST(!(x != x));
BOOST_CHECK(!(x && true)); BOOST_TEST(!(x && true));
BOOST_CHECK(!(true && x)); BOOST_TEST(!(true && x));
BOOST_CHECK(x || true); BOOST_TEST(x || true);
BOOST_CHECK(true || x); BOOST_TEST(true || x);
BOOST_CHECK(y); BOOST_TEST(y);
BOOST_CHECK(y == true); BOOST_TEST(y == true);
BOOST_CHECK(true == y); BOOST_TEST(true == y);
BOOST_CHECK(y != false); BOOST_TEST(y != false);
BOOST_CHECK(false != y); BOOST_TEST(false != y);
BOOST_CHECK(maybe(y == maybe)); BOOST_TEST(maybe(y == maybe));
BOOST_CHECK(maybe(maybe == y)); BOOST_TEST(maybe(maybe == y));
BOOST_CHECK(maybe(y != maybe)); BOOST_TEST(maybe(y != maybe));
BOOST_CHECK(maybe(maybe != y)); BOOST_TEST(maybe(maybe != y));
BOOST_CHECK(y == y); BOOST_TEST(y == y);
BOOST_CHECK(!(y != y)); BOOST_TEST(!(y != y));
BOOST_CHECK(maybe(z || !z)); BOOST_TEST(maybe(z || !z));
BOOST_CHECK(maybe(z == true)); BOOST_TEST(maybe(z == true));
BOOST_CHECK(maybe(true == z)); BOOST_TEST(maybe(true == z));
BOOST_CHECK(maybe(z == false)); BOOST_TEST(maybe(z == false));
BOOST_CHECK(maybe(false == z)); BOOST_TEST(maybe(false == z));
BOOST_CHECK(maybe(z == maybe)); BOOST_TEST(maybe(z == maybe));
BOOST_CHECK(maybe(maybe == z)); BOOST_TEST(maybe(maybe == z));
BOOST_CHECK(maybe(z != maybe)); BOOST_TEST(maybe(z != maybe));
BOOST_CHECK(maybe(maybe != z)); BOOST_TEST(maybe(maybe != z));
BOOST_CHECK(maybe(z == z)); BOOST_TEST(maybe(z == z));
BOOST_CHECK(maybe(z != z)); BOOST_TEST(maybe(z != z));
BOOST_CHECK(!(x == y)); BOOST_TEST(!(x == y));
BOOST_CHECK(x != y); BOOST_TEST(x != y);
BOOST_CHECK(maybe(x == z)); BOOST_TEST(maybe(x == z));
BOOST_CHECK(maybe(x != z)); BOOST_TEST(maybe(x != z));
BOOST_CHECK(maybe(y == z)); BOOST_TEST(maybe(y == z));
BOOST_CHECK(maybe(y != z)); BOOST_TEST(maybe(y != z));
BOOST_CHECK(!(x && y)); BOOST_TEST(!(x && y));
BOOST_CHECK(x || y); BOOST_TEST(x || y);
BOOST_CHECK(!(x && z)); BOOST_TEST(!(x && z));
BOOST_CHECK(maybe(y && z)); BOOST_TEST(maybe(y && z));
BOOST_CHECK(maybe(z && z)); BOOST_TEST(maybe(z && z));
BOOST_CHECK(maybe(z || z)); BOOST_TEST(maybe(z || z));
BOOST_CHECK(maybe(x || z)); BOOST_TEST(maybe(x || z));
BOOST_CHECK(y || z); BOOST_TEST(y || z);
BOOST_CHECK(maybe(y && maybe)); BOOST_TEST(maybe(y && maybe));
BOOST_CHECK(maybe(maybe && y)); BOOST_TEST(maybe(maybe && y));
BOOST_CHECK(!(x && maybe)); BOOST_TEST(!(x && maybe));
BOOST_CHECK(!(maybe && x)); BOOST_TEST(!(maybe && x));
BOOST_CHECK(maybe || y); BOOST_TEST(maybe || y);
BOOST_CHECK(y || maybe); BOOST_TEST(y || maybe);
BOOST_CHECK(maybe(x || maybe)); BOOST_TEST(maybe(x || maybe));
BOOST_CHECK(maybe(maybe || x)); BOOST_TEST(maybe(maybe || x));
// Test the if (z) ... else (!z) ... else ... idiom // Test the if (z) ... else (!z) ... else ... idiom
if (z) { if (z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else { else {
BOOST_CHECK(true); BOOST_TEST(true);
} }
z = true; z = true;
if (z) { if (z) {
BOOST_CHECK(true); BOOST_TEST(true);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else { else {
BOOST_CHECK(false); BOOST_TEST(false);
} }
z = false; z = false;
if (z) { if (z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(true); BOOST_TEST(true);
} }
else { else {
BOOST_CHECK(false); BOOST_TEST(false);
} }
std::cout << "no errors detected\n"; std::cout << "no errors detected\n";

View File

@ -15,103 +15,103 @@ int test_main(int, char*[])
tribool y(true); // true tribool y(true); // true
tribool z(indeterminate); // indeterminate tribool z(indeterminate); // indeterminate
BOOST_CHECK(!x); BOOST_TEST(!x);
BOOST_CHECK(x == false); BOOST_TEST(x == false);
BOOST_CHECK(false == x); BOOST_TEST(false == x);
BOOST_CHECK(x != true); BOOST_TEST(x != true);
BOOST_CHECK(true != x); BOOST_TEST(true != x);
BOOST_CHECK(indeterminate(x == indeterminate)); BOOST_TEST(indeterminate(x == indeterminate));
BOOST_CHECK(indeterminate(indeterminate == x)); BOOST_TEST(indeterminate(indeterminate == x));
BOOST_CHECK(indeterminate(x != indeterminate)); BOOST_TEST(indeterminate(x != indeterminate));
BOOST_CHECK(indeterminate(indeterminate != x)); BOOST_TEST(indeterminate(indeterminate != x));
BOOST_CHECK(x == x); BOOST_TEST(x == x);
BOOST_CHECK(!(x != x)); BOOST_TEST(!(x != x));
BOOST_CHECK(!(x && true)); BOOST_TEST(!(x && true));
BOOST_CHECK(!(true && x)); BOOST_TEST(!(true && x));
BOOST_CHECK(x || true); BOOST_TEST(x || true);
BOOST_CHECK(true || x); BOOST_TEST(true || x);
BOOST_CHECK(y); BOOST_TEST(y);
BOOST_CHECK(y == true); BOOST_TEST(y == true);
BOOST_CHECK(true == y); BOOST_TEST(true == y);
BOOST_CHECK(y != false); BOOST_TEST(y != false);
BOOST_CHECK(false != y); BOOST_TEST(false != y);
BOOST_CHECK(indeterminate(y == indeterminate)); BOOST_TEST(indeterminate(y == indeterminate));
BOOST_CHECK(indeterminate(indeterminate == y)); BOOST_TEST(indeterminate(indeterminate == y));
BOOST_CHECK(indeterminate(y != indeterminate)); BOOST_TEST(indeterminate(y != indeterminate));
BOOST_CHECK(indeterminate(indeterminate != y)); BOOST_TEST(indeterminate(indeterminate != y));
BOOST_CHECK(y == y); BOOST_TEST(y == y);
BOOST_CHECK(!(y != y)); BOOST_TEST(!(y != y));
BOOST_CHECK(indeterminate(z || !z)); BOOST_TEST(indeterminate(z || !z));
BOOST_CHECK(indeterminate(z == true)); BOOST_TEST(indeterminate(z == true));
BOOST_CHECK(indeterminate(true == z)); BOOST_TEST(indeterminate(true == z));
BOOST_CHECK(indeterminate(z == false)); BOOST_TEST(indeterminate(z == false));
BOOST_CHECK(indeterminate(false == z)); BOOST_TEST(indeterminate(false == z));
BOOST_CHECK(indeterminate(z == indeterminate)); BOOST_TEST(indeterminate(z == indeterminate));
BOOST_CHECK(indeterminate(indeterminate == z)); BOOST_TEST(indeterminate(indeterminate == z));
BOOST_CHECK(indeterminate(z != indeterminate)); BOOST_TEST(indeterminate(z != indeterminate));
BOOST_CHECK(indeterminate(indeterminate != z)); BOOST_TEST(indeterminate(indeterminate != z));
BOOST_CHECK(indeterminate(z == z)); BOOST_TEST(indeterminate(z == z));
BOOST_CHECK(indeterminate(z != z)); BOOST_TEST(indeterminate(z != z));
BOOST_CHECK(!(x == y)); BOOST_TEST(!(x == y));
BOOST_CHECK(x != y); BOOST_TEST(x != y);
BOOST_CHECK(indeterminate(x == z)); BOOST_TEST(indeterminate(x == z));
BOOST_CHECK(indeterminate(x != z)); BOOST_TEST(indeterminate(x != z));
BOOST_CHECK(indeterminate(y == z)); BOOST_TEST(indeterminate(y == z));
BOOST_CHECK(indeterminate(y != z)); BOOST_TEST(indeterminate(y != z));
BOOST_CHECK(!(x && y)); BOOST_TEST(!(x && y));
BOOST_CHECK(x || y); BOOST_TEST(x || y);
BOOST_CHECK(!(x && z)); BOOST_TEST(!(x && z));
BOOST_CHECK(indeterminate(y && z)); BOOST_TEST(indeterminate(y && z));
BOOST_CHECK(indeterminate(z && z)); BOOST_TEST(indeterminate(z && z));
BOOST_CHECK(indeterminate(z || z)); BOOST_TEST(indeterminate(z || z));
BOOST_CHECK(indeterminate(x || z)); BOOST_TEST(indeterminate(x || z));
BOOST_CHECK(y || z); BOOST_TEST(y || z);
BOOST_CHECK(indeterminate(y && indeterminate)); BOOST_TEST(indeterminate(y && indeterminate));
BOOST_CHECK(indeterminate(indeterminate && y)); BOOST_TEST(indeterminate(indeterminate && y));
BOOST_CHECK(!(x && indeterminate)); BOOST_TEST(!(x && indeterminate));
BOOST_CHECK(!(indeterminate && x)); BOOST_TEST(!(indeterminate && x));
BOOST_CHECK(indeterminate || y); BOOST_TEST(indeterminate || y);
BOOST_CHECK(y || indeterminate); BOOST_TEST(y || indeterminate);
BOOST_CHECK(indeterminate(x || indeterminate)); BOOST_TEST(indeterminate(x || indeterminate));
BOOST_CHECK(indeterminate(indeterminate || x)); BOOST_TEST(indeterminate(indeterminate || x));
// Test the if (z) ... else (!z) ... else ... idiom // Test the if (z) ... else (!z) ... else ... idiom
if (z) { if (z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else { else {
BOOST_CHECK(true); BOOST_TEST(true);
} }
z = true; z = true;
if (z) { if (z) {
BOOST_CHECK(true); BOOST_TEST(true);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else { else {
BOOST_CHECK(false); BOOST_TEST(false);
} }
z = false; z = false;
if (z) { if (z) {
BOOST_CHECK(false); BOOST_TEST(false);
} }
else if (!z) { else if (!z) {
BOOST_CHECK(true); BOOST_TEST(true);
} }
else { else {
BOOST_CHECK(false); BOOST_TEST(false);
} }
std::cout << "no errors detected\n"; std::cout << "no errors detected\n";