Index: libs/utility/operators_test.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/utility/operators_test.cpp,v retrieving revision 1.5 diff -u -r1.5 operators_test.cpp --- libs/utility/operators_test.cpp 12 Aug 2002 15:05:23 -0000 1.5 +++ libs/utility/operators_test.cpp 12 Mar 2003 19:02:51 -0000 @@ -50,6 +50,7 @@ class Wrapped1 : boost::operators > , boost::shiftable > + , boost::bool_testable > { public: explicit Wrapped1( T v = T() ) : _value(v) {} @@ -80,6 +81,7 @@ { _value >>= x._value; return *this; } Wrapped1& operator++() { ++_value; return *this; } Wrapped1& operator--() { --_value; return *this; } + operator bool() const { return _value != 0; } private: T _value; @@ -555,6 +557,12 @@ #define PRIVATE_EXPR_TEST(e, t) BOOST_TEST( ((e), (t)) ) +#define PRIVATE_BOOLEAN_EXPR_TEST(t, res) BOOST_TEST(static_cast((t)) == (res)) +#if defined(BOOST_MSVC) + #define PRIVATE_MSVC_BOOL_TEST_WORKAROUND(x) (!!x) +#else + #define PRIVATE_MSVC_BOOL_TEST_WORKAROUND(x) (x) +#endif int test_main( int , char * [] ) @@ -631,7 +639,19 @@ PRIVATE_EXPR_TEST( (i = i1 << i2), (i.value() == 4) ); PRIVATE_EXPR_TEST( (i = i2 >> i1), (i.value() == 1) ); - + + PRIVATE_BOOLEAN_EXPR_TEST( i, false); + PRIVATE_BOOLEAN_EXPR_TEST( i1, true); + PRIVATE_BOOLEAN_EXPR_TEST( i2, true); + PRIVATE_BOOLEAN_EXPR_TEST(!i, true); + PRIVATE_BOOLEAN_EXPR_TEST(!i1, false); + PRIVATE_BOOLEAN_EXPR_TEST(!i2, false); + PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i) && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false); + PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i) || PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), true); + PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i1) && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false); + PRIVATE_BOOLEAN_EXPR_TEST(!i && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false); + PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i1) && !i, false); + cout << "Performed tests on MyInt objects.\n"; MyLong j1(1);