Compare commits

...

10 Commits

Author SHA1 Message Date
nobody
3dbffb616c This commit was manufactured by cvs2svn to create tag
'Version_1_33_1_beta'.

[SVN r31604]
2005-11-08 23:18:41 +00:00
nobody
4d881f1aa0 This commit was manufactured by cvs2svn to create branch 'RC_1_33_0'.
[SVN r30300]
2005-07-28 18:22:24 +00:00
Douglas Gregor
0a8936b80a Give the enum a name
[SVN r29349]
2005-06-01 19:08:00 +00:00
Vladimir Prus
ea15a9abf6 Add V2 Jamfile
[SVN r28242]
2005-04-14 11:47:45 +00:00
Douglas Gregor
1982b3ee5a Try to make sure indeterminate output works
[SVN r27918]
2005-04-01 22:54:04 +00:00
Douglas Gregor
192433a5e1 Permit output of indeterminate value that isn't converted to a tribool
[SVN r27739]
2005-03-18 20:40:06 +00:00
Stefan Slapeta
796f4a5fa8 Replaced BOOST_TEST
[SVN r27050]
2005-02-03 12:27:14 +00:00
Douglas Gregor
e5c2ea9a90 Update copyrights
[SVN r24019]
2004-07-25 03:01:38 +00:00
Douglas Gregor
72bd21d653 Doug Gregor -> Douglas Gregor
[SVN r24016]
2004-07-25 02:29:29 +00:00
Douglas Gregor
bf76f4668b Add title
[SVN r23928]
2004-07-22 04:11:15 +00:00
8 changed files with 217 additions and 163 deletions

View File

@@ -2,17 +2,18 @@
<!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: 2004/07/12 03:04:09 $" 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>
<surname>Gregor</surname> <surname>Gregor</surname>
<email>gregod@cs.rpi.edu</email> <email>dgregor -at- cs.indiana.edu</email>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<year>2003</year> <year>2003</year>
<year>2004</year>
<holder>Douglas Gregor</holder> <holder>Douglas Gregor</holder>
</copyright> </copyright>
@@ -27,6 +28,8 @@
<librarycategory name="category:misc"/> <librarycategory name="category:misc"/>
</libraryinfo> </libraryinfo>
<title>Boost.Tribool</title>
<section id="tribool.introduction"> <section id="tribool.introduction">
<title>Introduction</title> <title>Introduction</title>
@@ -213,4 +216,4 @@ cout &lt;&lt; boolalpha &lt;&lt; x &lt;&lt; endl; // Prints "maybe"</programlist
<purpose><para>Test tribool input/output.</para></purpose> <purpose><para>Test tribool input/output.</para></purpose>
</run-test> </run-test>
</testsuite> </testsuite>
</library> </library>

View File

@@ -1,6 +1,6 @@
// Three-state boolean logic library // Three-state boolean logic library
// Copyright Doug Gregor 2002-2004. Use, modification and // Copyright Douglas Gregor 2002-2004. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
@@ -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 { false_value, true_value, indeterminate_value } value; enum value_t { 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

@@ -1,6 +1,6 @@
// Three-state boolean logic library // Three-state boolean logic library
// Copyright Doug Gregor 2002-2004. Use, modification and // Copyright Douglas Gregor 2002-2004. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)

View File

@@ -1,6 +1,6 @@
// Three-state boolean logic library // Three-state boolean logic library
// Copyright Doug Gregor 2002-2003. Use, modification and // Copyright Douglas Gregor 2002-2004. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
@@ -201,6 +201,26 @@ 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.
* *

17
test/Jamfile.v2 Normal file
View File

@@ -0,0 +1,17 @@
# 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

@@ -1,4 +1,4 @@
// Copyright Doug Gregor 2002-2003. Use, modification and // Copyright Douglas Gregor 2002-2004. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
@@ -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_TEST(out.str() == "0"); BOOST_CHECK(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_TEST(out.str() == "1"); BOOST_CHECK(out.str() == "1");
// Output indeterminate (noboolalpha) // Output indeterminate (noboolalpha)
out.str(std::string()); out.str(std::string());
@@ -42,7 +42,14 @@ 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_TEST(out.str() == "2"); 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 #ifndef BOOST_NO_STD_LOCALE
const std::numpunct<char>& punct = const std::numpunct<char>& punct =
@@ -53,7 +60,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_TEST(out.str() == punct.falsename()); BOOST_CHECK(out.str() == punct.falsename());
// Output true (boolalpha) // Output true (boolalpha)
out.str(std::string()); out.str(std::string());
@@ -61,7 +68,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_TEST(out.str() == punct.truename()); BOOST_CHECK(out.str() == punct.truename());
// Output indeterminate (boolalpha - default name) // Output indeterminate (boolalpha - default name)
out.str(std::string()); out.str(std::string());
@@ -69,7 +76,14 @@ 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_TEST(out.str() == "indeterminate"); 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) # 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
@@ -82,7 +96,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_TEST(out.str() == "maybe"); BOOST_CHECK(out.str() == "maybe");
# endif # endif
#endif // ! BOOST_NO_STD_LOCALE #endif // ! BOOST_NO_STD_LOCALE
@@ -93,7 +107,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_TEST(x == false); BOOST_CHECK(x == false);
} }
// Input true (noboolalpha) // Input true (noboolalpha)
@@ -101,7 +115,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_TEST(x == true); BOOST_CHECK(x == true);
} }
// Input false (noboolalpha) // Input false (noboolalpha)
@@ -109,14 +123,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_TEST(indeterminate(x)); BOOST_CHECK(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_TEST(!(in >> x)); BOOST_CHECK(!(in >> x));
} }
// Input false (boolalpha) // Input false (boolalpha)
@@ -124,7 +138,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_TEST(x == false); BOOST_CHECK(x == false);
} }
// Input true (boolalpha) // Input true (boolalpha)
@@ -132,7 +146,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_TEST(x == true); BOOST_CHECK(x == true);
} }
// Input indeterminate (boolalpha) // Input indeterminate (boolalpha)
@@ -141,7 +155,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_TEST(indeterminate(x)); BOOST_CHECK(indeterminate(x));
} }
// Input bad string (boolalpha) // Input bad string (boolalpha)
@@ -149,7 +163,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_TEST(!(in >> std::boolalpha >> x)); BOOST_CHECK(!(in >> std::boolalpha >> x));
} }
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
@@ -163,7 +177,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_TEST(indeterminate(x)); BOOST_CHECK(indeterminate(x));
} }
// Input indeterminate named "true_or_false" (boolalpha) // Input indeterminate named "true_or_false" (boolalpha)
@@ -175,7 +189,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_TEST(indeterminate(x)); BOOST_CHECK(indeterminate(x));
} }
#endif #endif

View File

@@ -1,4 +1,4 @@
// Copyright Doug Gregor 2002-2003. Use, modification and // Copyright Douglas Gregor 2002-2003. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
@@ -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_TEST(!x); BOOST_CHECK(!x);
BOOST_TEST(x == false); BOOST_CHECK(x == false);
BOOST_TEST(false == x); BOOST_CHECK(false == x);
BOOST_TEST(x != true); BOOST_CHECK(x != true);
BOOST_TEST(true != x); BOOST_CHECK(true != x);
BOOST_TEST(maybe(x == maybe)); BOOST_CHECK(maybe(x == maybe));
BOOST_TEST(maybe(maybe == x)); BOOST_CHECK(maybe(maybe == x));
BOOST_TEST(maybe(x != maybe)); BOOST_CHECK(maybe(x != maybe));
BOOST_TEST(maybe(maybe != x)); BOOST_CHECK(maybe(maybe != x));
BOOST_TEST(x == x); BOOST_CHECK(x == x);
BOOST_TEST(!(x != x)); BOOST_CHECK(!(x != x));
BOOST_TEST(!(x && true)); BOOST_CHECK(!(x && true));
BOOST_TEST(!(true && x)); BOOST_CHECK(!(true && x));
BOOST_TEST(x || true); BOOST_CHECK(x || true);
BOOST_TEST(true || x); BOOST_CHECK(true || x);
BOOST_TEST(y); BOOST_CHECK(y);
BOOST_TEST(y == true); BOOST_CHECK(y == true);
BOOST_TEST(true == y); BOOST_CHECK(true == y);
BOOST_TEST(y != false); BOOST_CHECK(y != false);
BOOST_TEST(false != y); BOOST_CHECK(false != y);
BOOST_TEST(maybe(y == maybe)); BOOST_CHECK(maybe(y == maybe));
BOOST_TEST(maybe(maybe == y)); BOOST_CHECK(maybe(maybe == y));
BOOST_TEST(maybe(y != maybe)); BOOST_CHECK(maybe(y != maybe));
BOOST_TEST(maybe(maybe != y)); BOOST_CHECK(maybe(maybe != y));
BOOST_TEST(y == y); BOOST_CHECK(y == y);
BOOST_TEST(!(y != y)); BOOST_CHECK(!(y != y));
BOOST_TEST(maybe(z || !z)); BOOST_CHECK(maybe(z || !z));
BOOST_TEST(maybe(z == true)); BOOST_CHECK(maybe(z == true));
BOOST_TEST(maybe(true == z)); BOOST_CHECK(maybe(true == z));
BOOST_TEST(maybe(z == false)); BOOST_CHECK(maybe(z == false));
BOOST_TEST(maybe(false == z)); BOOST_CHECK(maybe(false == z));
BOOST_TEST(maybe(z == maybe)); BOOST_CHECK(maybe(z == maybe));
BOOST_TEST(maybe(maybe == z)); BOOST_CHECK(maybe(maybe == z));
BOOST_TEST(maybe(z != maybe)); BOOST_CHECK(maybe(z != maybe));
BOOST_TEST(maybe(maybe != z)); BOOST_CHECK(maybe(maybe != z));
BOOST_TEST(maybe(z == z)); BOOST_CHECK(maybe(z == z));
BOOST_TEST(maybe(z != z)); BOOST_CHECK(maybe(z != z));
BOOST_TEST(!(x == y)); BOOST_CHECK(!(x == y));
BOOST_TEST(x != y); BOOST_CHECK(x != y);
BOOST_TEST(maybe(x == z)); BOOST_CHECK(maybe(x == z));
BOOST_TEST(maybe(x != z)); BOOST_CHECK(maybe(x != z));
BOOST_TEST(maybe(y == z)); BOOST_CHECK(maybe(y == z));
BOOST_TEST(maybe(y != z)); BOOST_CHECK(maybe(y != z));
BOOST_TEST(!(x && y)); BOOST_CHECK(!(x && y));
BOOST_TEST(x || y); BOOST_CHECK(x || y);
BOOST_TEST(!(x && z)); BOOST_CHECK(!(x && z));
BOOST_TEST(maybe(y && z)); BOOST_CHECK(maybe(y && z));
BOOST_TEST(maybe(z && z)); BOOST_CHECK(maybe(z && z));
BOOST_TEST(maybe(z || z)); BOOST_CHECK(maybe(z || z));
BOOST_TEST(maybe(x || z)); BOOST_CHECK(maybe(x || z));
BOOST_TEST(y || z); BOOST_CHECK(y || z);
BOOST_TEST(maybe(y && maybe)); BOOST_CHECK(maybe(y && maybe));
BOOST_TEST(maybe(maybe && y)); BOOST_CHECK(maybe(maybe && y));
BOOST_TEST(!(x && maybe)); BOOST_CHECK(!(x && maybe));
BOOST_TEST(!(maybe && x)); BOOST_CHECK(!(maybe && x));
BOOST_TEST(maybe || y); BOOST_CHECK(maybe || y);
BOOST_TEST(y || maybe); BOOST_CHECK(y || maybe);
BOOST_TEST(maybe(x || maybe)); BOOST_CHECK(maybe(x || maybe));
BOOST_TEST(maybe(maybe || x)); BOOST_CHECK(maybe(maybe || x));
// Test the if (z) ... else (!z) ... else ... idiom // Test the if (z) ... else (!z) ... else ... idiom
if (z) { if (z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else if (!z) { else if (!z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else { else {
BOOST_TEST(true); BOOST_CHECK(true);
} }
z = true; z = true;
if (z) { if (z) {
BOOST_TEST(true); BOOST_CHECK(true);
} }
else if (!z) { else if (!z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else { else {
BOOST_TEST(false); BOOST_CHECK(false);
} }
z = false; z = false;
if (z) { if (z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else if (!z) { else if (!z) {
BOOST_TEST(true); BOOST_CHECK(true);
} }
else { else {
BOOST_TEST(false); BOOST_CHECK(false);
} }
std::cout << "no errors detected\n"; std::cout << "no errors detected\n";

View File

@@ -1,4 +1,4 @@
// Copyright Doug Gregor 2002-2003. Use, modification and // Copyright Douglas Gregor 2002-2003. Use, modification and
// distribution is subject to the Boost Software License, Version // distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
@@ -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_TEST(!x); BOOST_CHECK(!x);
BOOST_TEST(x == false); BOOST_CHECK(x == false);
BOOST_TEST(false == x); BOOST_CHECK(false == x);
BOOST_TEST(x != true); BOOST_CHECK(x != true);
BOOST_TEST(true != x); BOOST_CHECK(true != x);
BOOST_TEST(indeterminate(x == indeterminate)); BOOST_CHECK(indeterminate(x == indeterminate));
BOOST_TEST(indeterminate(indeterminate == x)); BOOST_CHECK(indeterminate(indeterminate == x));
BOOST_TEST(indeterminate(x != indeterminate)); BOOST_CHECK(indeterminate(x != indeterminate));
BOOST_TEST(indeterminate(indeterminate != x)); BOOST_CHECK(indeterminate(indeterminate != x));
BOOST_TEST(x == x); BOOST_CHECK(x == x);
BOOST_TEST(!(x != x)); BOOST_CHECK(!(x != x));
BOOST_TEST(!(x && true)); BOOST_CHECK(!(x && true));
BOOST_TEST(!(true && x)); BOOST_CHECK(!(true && x));
BOOST_TEST(x || true); BOOST_CHECK(x || true);
BOOST_TEST(true || x); BOOST_CHECK(true || x);
BOOST_TEST(y); BOOST_CHECK(y);
BOOST_TEST(y == true); BOOST_CHECK(y == true);
BOOST_TEST(true == y); BOOST_CHECK(true == y);
BOOST_TEST(y != false); BOOST_CHECK(y != false);
BOOST_TEST(false != y); BOOST_CHECK(false != y);
BOOST_TEST(indeterminate(y == indeterminate)); BOOST_CHECK(indeterminate(y == indeterminate));
BOOST_TEST(indeterminate(indeterminate == y)); BOOST_CHECK(indeterminate(indeterminate == y));
BOOST_TEST(indeterminate(y != indeterminate)); BOOST_CHECK(indeterminate(y != indeterminate));
BOOST_TEST(indeterminate(indeterminate != y)); BOOST_CHECK(indeterminate(indeterminate != y));
BOOST_TEST(y == y); BOOST_CHECK(y == y);
BOOST_TEST(!(y != y)); BOOST_CHECK(!(y != y));
BOOST_TEST(indeterminate(z || !z)); BOOST_CHECK(indeterminate(z || !z));
BOOST_TEST(indeterminate(z == true)); BOOST_CHECK(indeterminate(z == true));
BOOST_TEST(indeterminate(true == z)); BOOST_CHECK(indeterminate(true == z));
BOOST_TEST(indeterminate(z == false)); BOOST_CHECK(indeterminate(z == false));
BOOST_TEST(indeterminate(false == z)); BOOST_CHECK(indeterminate(false == z));
BOOST_TEST(indeterminate(z == indeterminate)); BOOST_CHECK(indeterminate(z == indeterminate));
BOOST_TEST(indeterminate(indeterminate == z)); BOOST_CHECK(indeterminate(indeterminate == z));
BOOST_TEST(indeterminate(z != indeterminate)); BOOST_CHECK(indeterminate(z != indeterminate));
BOOST_TEST(indeterminate(indeterminate != z)); BOOST_CHECK(indeterminate(indeterminate != z));
BOOST_TEST(indeterminate(z == z)); BOOST_CHECK(indeterminate(z == z));
BOOST_TEST(indeterminate(z != z)); BOOST_CHECK(indeterminate(z != z));
BOOST_TEST(!(x == y)); BOOST_CHECK(!(x == y));
BOOST_TEST(x != y); BOOST_CHECK(x != y);
BOOST_TEST(indeterminate(x == z)); BOOST_CHECK(indeterminate(x == z));
BOOST_TEST(indeterminate(x != z)); BOOST_CHECK(indeterminate(x != z));
BOOST_TEST(indeterminate(y == z)); BOOST_CHECK(indeterminate(y == z));
BOOST_TEST(indeterminate(y != z)); BOOST_CHECK(indeterminate(y != z));
BOOST_TEST(!(x && y)); BOOST_CHECK(!(x && y));
BOOST_TEST(x || y); BOOST_CHECK(x || y);
BOOST_TEST(!(x && z)); BOOST_CHECK(!(x && z));
BOOST_TEST(indeterminate(y && z)); BOOST_CHECK(indeterminate(y && z));
BOOST_TEST(indeterminate(z && z)); BOOST_CHECK(indeterminate(z && z));
BOOST_TEST(indeterminate(z || z)); BOOST_CHECK(indeterminate(z || z));
BOOST_TEST(indeterminate(x || z)); BOOST_CHECK(indeterminate(x || z));
BOOST_TEST(y || z); BOOST_CHECK(y || z);
BOOST_TEST(indeterminate(y && indeterminate)); BOOST_CHECK(indeterminate(y && indeterminate));
BOOST_TEST(indeterminate(indeterminate && y)); BOOST_CHECK(indeterminate(indeterminate && y));
BOOST_TEST(!(x && indeterminate)); BOOST_CHECK(!(x && indeterminate));
BOOST_TEST(!(indeterminate && x)); BOOST_CHECK(!(indeterminate && x));
BOOST_TEST(indeterminate || y); BOOST_CHECK(indeterminate || y);
BOOST_TEST(y || indeterminate); BOOST_CHECK(y || indeterminate);
BOOST_TEST(indeterminate(x || indeterminate)); BOOST_CHECK(indeterminate(x || indeterminate));
BOOST_TEST(indeterminate(indeterminate || x)); BOOST_CHECK(indeterminate(indeterminate || x));
// Test the if (z) ... else (!z) ... else ... idiom // Test the if (z) ... else (!z) ... else ... idiom
if (z) { if (z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else if (!z) { else if (!z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else { else {
BOOST_TEST(true); BOOST_CHECK(true);
} }
z = true; z = true;
if (z) { if (z) {
BOOST_TEST(true); BOOST_CHECK(true);
} }
else if (!z) { else if (!z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else { else {
BOOST_TEST(false); BOOST_CHECK(false);
} }
z = false; z = false;
if (z) { if (z) {
BOOST_TEST(false); BOOST_CHECK(false);
} }
else if (!z) { else if (!z) {
BOOST_TEST(true); BOOST_CHECK(true);
} }
else { else {
BOOST_TEST(false); BOOST_CHECK(false);
} }
std::cout << "no errors detected\n"; std::cout << "no errors detected\n";