Split BOOST_TEST_TRAIT_* into lightweight_test_trait.hpp.

This commit is contained in:
Peter Dimov 2014-06-06 15:17:16 +03:00
parent 9a87f2250d
commit dd1121d589
10 changed files with 107 additions and 58 deletions

View File

@ -10,7 +10,7 @@
// //
// boost/core/lightweight_test.hpp - lightweight test library // boost/core/lightweight_test.hpp - lightweight test library
// //
// Copyright (c) 2002, 2009 Peter Dimov // Copyright (c) 2002, 2009, 2014 Peter Dimov
// Copyright (2) Beman Dawes 2010, 2011 // Copyright (2) Beman Dawes 2010, 2011
// Copyright (3) Ion Gaztanaga 2013 // Copyright (3) Ion Gaztanaga 2013
// //
@ -22,7 +22,6 @@
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <boost/current_function.hpp> #include <boost/current_function.hpp>
#include <boost/core/no_exceptions_support.hpp> #include <boost/core/no_exceptions_support.hpp>
#include <boost/core/typeinfo.hpp>
#include <iostream> #include <iostream>
// IDE's like Visual Studio perform better if output goes to std::cout or // IDE's like Visual Studio perform better if output goes to std::cout or
@ -118,25 +117,6 @@ template<class T, class U> inline void test_ne_impl( char const * expr1, char co
} }
} }
template< class T > inline void test_trait_impl( char const * trait, void (*)( T ),
bool expected, char const * file, int line, char const * function )
{
if( T::value == expected )
{
}
else
{
BOOST_LIGHTWEIGHT_TEST_OSTREAM
<< file << "(" << line << "): predicate '" << trait << "' ["
<< BOOST_CORE_TYPEID(T).name() << "]"
<< " test failed in function '" << function
<< "' (should have been " << ( expected? "true": "false" ) << ")"
<< std::endl;
++boost::detail::test_errors();
}
}
} // namespace detail } // namespace detail
inline int report_errors() inline int report_errors()
@ -186,7 +166,4 @@ inline int report_errors()
#define BOOST_TEST_THROWS( EXPR, EXCEP ) #define BOOST_TEST_THROWS( EXPR, EXCEP )
#endif #endif
#define BOOST_TEST_TRAIT_TRUE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, true, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
#define BOOST_TEST_TRAIT_FALSE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, false, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP #endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP

View File

@ -0,0 +1,55 @@
#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP
#define BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP
// MS compatible compilers support #pragma once
#if defined(_MSC_VER)
# pragma once
#endif
// boost/core/lightweight_test_trait.hpp
//
// BOOST_TEST_TRAIT_TRUE, BOOST_TEST_TRAIT_FALSE
//
// Copyright 2014 Peter Dimov
//
// Distributed under 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/core/lightweight_test.hpp>
#include <boost/core/typeinfo.hpp>
namespace boost
{
namespace detail
{
template< class T > inline void test_trait_impl( char const * trait, void (*)( T ),
bool expected, char const * file, int line, char const * function )
{
if( T::value == expected )
{
}
else
{
BOOST_LIGHTWEIGHT_TEST_OSTREAM
<< file << "(" << line << "): predicate '" << trait << "' ["
<< BOOST_CORE_TYPEID(T).name() << "]"
<< " test failed in function '" << function
<< "' (should have been " << ( expected? "true": "false" ) << ")"
<< std::endl;
++boost::detail::test_errors();
}
}
} // namespace detail
} // namespace boost
#define BOOST_TEST_TRAIT_TRUE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, true, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
#define BOOST_TEST_TRAIT_FALSE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, false, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP

View File

@ -50,6 +50,8 @@ run get_pointer_test.cpp ;
run lightweight_test_test.cpp ; run lightweight_test_test.cpp ;
run lightweight_test_test.cpp : : : <exception-handling>off : lightweight_test_test_no_except ; run lightweight_test_test.cpp : : : <exception-handling>off : lightweight_test_test_no_except ;
run lightweight_test_test2.cpp ;
run-fail lightweight_test_fail.cpp ; run-fail lightweight_test_fail.cpp ;
run-fail lightweight_test_fail2.cpp ; run-fail lightweight_test_fail2.cpp ;
run-fail lightweight_test_fail3.cpp ; run-fail lightweight_test_fail3.cpp ;

View File

@ -10,7 +10,7 @@
#include <boost/detail/iterator.hpp> #include <boost/detail/iterator.hpp>
#include <boost/core/is_same.hpp> #include <boost/core/is_same.hpp>
#include <boost/core/lightweight_test.hpp> #include <boost/core/lightweight_test_trait.hpp>
#include <cstddef> #include <cstddef>
#include <list> #include <list>

View File

@ -8,9 +8,8 @@
// http://www.boost.org/LICENSE_1_0.txt // http://www.boost.org/LICENSE_1_0.txt
// //
#include <boost/iterator.hpp>
#include <boost/core/is_same.hpp> #include <boost/core/is_same.hpp>
#include <boost/core/lightweight_test.hpp> #include <boost/core/lightweight_test_trait.hpp>
struct X struct X
{ {

View File

@ -10,7 +10,7 @@
#include <boost/iterator.hpp> #include <boost/iterator.hpp>
#include <boost/core/is_same.hpp> #include <boost/core/is_same.hpp>
#include <boost/core/lightweight_test.hpp> #include <boost/core/lightweight_test_trait.hpp>
/* /*

View File

@ -8,7 +8,7 @@
// http://www.boost.org/LICENSE_1_0.txt // http://www.boost.org/LICENSE_1_0.txt
// //
#include <boost/detail/lightweight_test.hpp> #include <boost/core/lightweight_test_trait.hpp>
template<class T1, class T2> struct Y1 template<class T1, class T2> struct Y1
{ {

View File

@ -8,7 +8,7 @@
// http://www.boost.org/LICENSE_1_0.txt // http://www.boost.org/LICENSE_1_0.txt
// //
#include <boost/detail/lightweight_test.hpp> #include <boost/core/lightweight_test_trait.hpp>
template<class T1, class T2> struct Y1 template<class T1, class T2> struct Y1
{ {

View File

@ -32,26 +32,6 @@ void f( bool x )
} }
} }
template<class T1, class T2> struct Y1
{
enum { value = 1 };
};
template<class T1, class T2> struct Y2
{
enum { value = 0 };
};
struct X1
{
typedef int type;
};
struct X2
{
typedef int type;
};
int main() int main()
{ {
int x = 0; int x = 0;
@ -88,13 +68,5 @@ int main()
BOOST_TEST_THROWS( f(true), X ); BOOST_TEST_THROWS( f(true), X );
BOOST_TEST_THROWS( f(false), int ); BOOST_TEST_THROWS( f(false), int );
// BOOST_TEST_TRAIT_TRUE
BOOST_TEST_TRAIT_TRUE(( Y1<X1::type, X2::type> ));
// BOOST_TEST_TRAIT_FALSE
BOOST_TEST_TRAIT_FALSE(( Y2<X1::type, X2::type> ));
return boost::report_errors(); return boost::report_errors();
} }

View File

@ -0,0 +1,44 @@
//
// Test for lightweight_test_trait.hpp
//
// Copyright (c) 2014 Peter Dimov
//
// Distributed under 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/core/lightweight_test_trait.hpp>
template<class T1, class T2> struct Y1
{
enum { value = 1 };
};
template<class T1, class T2> struct Y2
{
enum { value = 0 };
};
struct X1
{
typedef int type;
};
struct X2
{
typedef int type;
};
int main()
{
// BOOST_TEST_TRAIT_TRUE
BOOST_TEST_TRAIT_TRUE(( Y1<X1::type, X2::type> ));
// BOOST_TEST_TRAIT_FALSE
BOOST_TEST_TRAIT_FALSE(( Y2<X1::type, X2::type> ));
return boost::report_errors();
}