Initial checkin of tribool library

[SVN r23453]
This commit is contained in:
Douglas Gregor committed 2004-07-12 03:04:09 +00:00
1 parent e3146f2584
commit 73c545cd2c
6 files changed
+680

No files matched your search

+35
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 : : : : ]
;
}
+178
View File
@@ -0,0 +1,178 @@
// Copyright Doug Gregor 2002-2003. 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 <locale>
int 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_TEST(out.str() == "0");
// Output true (noboolalpha)
out.str(std::string());
x = true;
out << x;
std::cout << "Output true (noboolalpha): " << out.str() << std::endl;
BOOST_TEST(out.str() == "1");
// Output indeterminate (noboolalpha)
out.str(std::string());
x = indeterminate;
out << x;
std::cout << "Output indeterminate (noboolalpha): " << out.str()
<< std::endl;
BOOST_TEST(out.str() == "2");
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_TEST(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_TEST(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_TEST(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_TEST(out.str() == "maybe");
#endif
// Checking tribool input
// Input false (noboolalpha)
{
std::istringstream in("0");
std::cout << "Input \"0\" (checks for false)" << std::endl;
in >> x;
BOOST_TEST(x == false);
}
// Input true (noboolalpha)
{
std::istringstream in("1");
std::cout << "Input \"1\" (checks for true)" << std::endl;
in >> x;
BOOST_TEST(x == true);
}
// Input false (noboolalpha)
{
std::istringstream in("2");
std::cout << "Input \"2\" (checks for indeterminate)" << std::endl;
in >> x;
BOOST_TEST(indeterminate(x));
}
// Input bad number (noboolalpha)
{
std::istringstream in("3");
std::cout << "Input \"3\" (checks for failure)" << std::endl;
BOOST_TEST(!(in >> x));
}
// Input false (boolalpha)
{
std::istringstream in("false");
std::cout << "Input \"false\" (checks for false)" << std::endl;
in >> std::boolalpha >> x;
BOOST_TEST(x == false);
}
// Input true (boolalpha)
{
std::istringstream in("true");
std::cout << "Input \"true\" (checks for true)" << std::endl;
in >> std::boolalpha >> x;
BOOST_TEST(x == true);
}
// Input indeterminate (boolalpha)
{
std::istringstream in("indeterminate");
std::cout << "Input \"indeterminate\" (checks for indeterminate)"
<< std::endl;
in >> std::boolalpha >> x;
BOOST_TEST(indeterminate(x));
}
// Input bad string (boolalpha)
{
std::istringstream in("bad");
std::cout << "Input \"bad\" (checks for failure)"
<< std::endl;
BOOST_TEST(!(in >> std::boolalpha >> x));
}
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
// No template constructors, so we can't build the test locale
#else
// 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_TEST(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_TEST(indeterminate(x));
}
#endif
return 0;
}
+123
View File
@@ -0,0 +1,123 @@
// Copyright Doug Gregor 2002-2003. 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
#include <boost/logic/tribool.hpp>
#include <boost/test/minimal.hpp>
#include <iostream>
BOOST_TRIBOOL_THIRD_STATE(maybe)
int test_main(int,char*[])
{
using namespace boost::logic;
tribool x; // false
tribool y(true); // true
tribool z(maybe); // maybe
BOOST_TEST(!x);
BOOST_TEST(x == false);
BOOST_TEST(false == x);
BOOST_TEST(x != true);
BOOST_TEST(true != x);
BOOST_TEST(maybe(x == maybe));
BOOST_TEST(maybe(maybe == x));
BOOST_TEST(maybe(x != maybe));
BOOST_TEST(maybe(maybe != x));
BOOST_TEST(x == x);
BOOST_TEST(!(x != x));
BOOST_TEST(!(x && true));
BOOST_TEST(!(true && x));
BOOST_TEST(x || true);
BOOST_TEST(true || x);
BOOST_TEST(y);
BOOST_TEST(y == true);
BOOST_TEST(true == y);
BOOST_TEST(y != false);
BOOST_TEST(false != y);
BOOST_TEST(maybe(y == maybe));
BOOST_TEST(maybe(maybe == y));
BOOST_TEST(maybe(y != maybe));
BOOST_TEST(maybe(maybe != y));
BOOST_TEST(y == y);
BOOST_TEST(!(y != y));
BOOST_TEST(maybe(z || !z));
BOOST_TEST(maybe(z == true));
BOOST_TEST(maybe(true == z));
BOOST_TEST(maybe(z == false));
BOOST_TEST(maybe(false == z));
BOOST_TEST(maybe(z == maybe));
BOOST_TEST(maybe(maybe == z));
BOOST_TEST(maybe(z != maybe));
BOOST_TEST(maybe(maybe != z));
BOOST_TEST(maybe(z == z));
BOOST_TEST(maybe(z != z));
BOOST_TEST(!(x == y));
BOOST_TEST(x != y);
BOOST_TEST(maybe(x == z));
BOOST_TEST(maybe(x != z));
BOOST_TEST(maybe(y == z));
BOOST_TEST(maybe(y != z));
BOOST_TEST(!(x && y));
BOOST_TEST(x || y);
BOOST_TEST(!(x && z));
BOOST_TEST(maybe(y && z));
BOOST_TEST(maybe(z && z));
BOOST_TEST(maybe(z || z));
BOOST_TEST(maybe(x || z));
BOOST_TEST(y || z);
BOOST_TEST(maybe(y && maybe));
BOOST_TEST(maybe(maybe && y));
BOOST_TEST(!(x && maybe));
BOOST_TEST(!(maybe && x));
BOOST_TEST(maybe || y);
BOOST_TEST(y || maybe);
BOOST_TEST(maybe(x || maybe));
BOOST_TEST(maybe(maybe || x));
// Test the if (z) ... else (!z) ... else ... idiom
if (z) {
BOOST_TEST(false);
}
else if (!z) {
BOOST_TEST(false);
}
else {
BOOST_TEST(true);
}
z = true;
if (z) {
BOOST_TEST(true);
}
else if (!z) {
BOOST_TEST(false);
}
else {
BOOST_TEST(false);
}
z = false;
if (z) {
BOOST_TEST(false);
}
else if (!z) {
BOOST_TEST(true);
}
else {
BOOST_TEST(false);
}
std::cout << "no errors detected\n";
return 0;
}
+119
View File
@@ -0,0 +1,119 @@
// Copyright Doug Gregor 2002-2003. 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/test/minimal.hpp>
#include <iostream>
int test_main(int, char*[])
{
using namespace boost::logic;
tribool x; // false
tribool y(true); // true
tribool z(indeterminate); // indeterminate
BOOST_TEST(!x);
BOOST_TEST(x == false);
BOOST_TEST(false == x);
BOOST_TEST(x != true);
BOOST_TEST(true != x);
BOOST_TEST(indeterminate(x == indeterminate));
BOOST_TEST(indeterminate(indeterminate == x));
BOOST_TEST(indeterminate(x != indeterminate));
BOOST_TEST(indeterminate(indeterminate != x));
BOOST_TEST(x == x);
BOOST_TEST(!(x != x));
BOOST_TEST(!(x && true));
BOOST_TEST(!(true && x));
BOOST_TEST(x || true);
BOOST_TEST(true || x);
BOOST_TEST(y);
BOOST_TEST(y == true);
BOOST_TEST(true == y);
BOOST_TEST(y != false);
BOOST_TEST(false != y);
BOOST_TEST(indeterminate(y == indeterminate));
BOOST_TEST(indeterminate(indeterminate == y));
BOOST_TEST(indeterminate(y != indeterminate));
BOOST_TEST(indeterminate(indeterminate != y));
BOOST_TEST(y == y);
BOOST_TEST(!(y != y));
BOOST_TEST(indeterminate(z || !z));
BOOST_TEST(indeterminate(z == true));
BOOST_TEST(indeterminate(true == z));
BOOST_TEST(indeterminate(z == false));
BOOST_TEST(indeterminate(false == z));
BOOST_TEST(indeterminate(z == indeterminate));
BOOST_TEST(indeterminate(indeterminate == z));
BOOST_TEST(indeterminate(z != indeterminate));
BOOST_TEST(indeterminate(indeterminate != z));
BOOST_TEST(indeterminate(z == z));
BOOST_TEST(indeterminate(z != z));
BOOST_TEST(!(x == y));
BOOST_TEST(x != y);
BOOST_TEST(indeterminate(x == z));
BOOST_TEST(indeterminate(x != z));
BOOST_TEST(indeterminate(y == z));
BOOST_TEST(indeterminate(y != z));
BOOST_TEST(!(x && y));
BOOST_TEST(x || y);
BOOST_TEST(!(x && z));
BOOST_TEST(indeterminate(y && z));
BOOST_TEST(indeterminate(z && z));
BOOST_TEST(indeterminate(z || z));
BOOST_TEST(indeterminate(x || z));
BOOST_TEST(y || z);
BOOST_TEST(indeterminate(y && indeterminate));
BOOST_TEST(indeterminate(indeterminate && y));
BOOST_TEST(!(x && indeterminate));
BOOST_TEST(!(indeterminate && x));
BOOST_TEST(indeterminate || y);
BOOST_TEST(y || indeterminate);
BOOST_TEST(indeterminate(x || indeterminate));
BOOST_TEST(indeterminate(indeterminate || x));
// Test the if (z) ... else (!z) ... else ... idiom
if (z) {
BOOST_TEST(false);
}
else if (!z) {
BOOST_TEST(false);
}
else {
BOOST_TEST(true);
}
z = true;
if (z) {
BOOST_TEST(true);
}
else if (!z) {
BOOST_TEST(false);
}
else {
BOOST_TEST(false);
}
z = false;
if (z) {
BOOST_TEST(false);
}
else if (!z) {
BOOST_TEST(true);
}
else {
BOOST_TEST(false);
}
std::cout << "no errors detected\n";
return 0;
}