forked from boostorg/unordered
		
	Unit tests for unordered containers.
[SVN r2731]
This commit is contained in:
		
							
								
								
									
										78
									
								
								test/helpers/strong.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								test/helpers/strong.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
 | 
			
		||||
//  Copyright Daniel James 2005. Use, modification, and distribution are
 | 
			
		||||
//  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)
 | 
			
		||||
 | 
			
		||||
#if !defined(BOOST_UNORDERED_TEST_HELPERS_STRONG_HEADER)
 | 
			
		||||
#define BOOST_UNORDERED_TEST_HELPERS_STRONG_HEADER
 | 
			
		||||
 | 
			
		||||
#include <boost/shared_ptr.hpp>
 | 
			
		||||
#include "./exception_trigger.hpp"
 | 
			
		||||
 | 
			
		||||
namespace test
 | 
			
		||||
{
 | 
			
		||||
    class strong_tester
 | 
			
		||||
    {
 | 
			
		||||
        mutable bool dismissed_;
 | 
			
		||||
    protected:
 | 
			
		||||
        strong_tester();
 | 
			
		||||
    public:
 | 
			
		||||
        virtual ~strong_tester();
 | 
			
		||||
        void dismiss() const;
 | 
			
		||||
        bool is_dismissed() const;
 | 
			
		||||
        void call_test();
 | 
			
		||||
        virtual void test() = 0;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    template <class T>
 | 
			
		||||
    class default_strong_tester
 | 
			
		||||
        : public strong_tester
 | 
			
		||||
    {
 | 
			
		||||
        T const& reference;
 | 
			
		||||
        T copy;
 | 
			
		||||
    public:
 | 
			
		||||
        default_strong_tester(T const& x) : reference(x), copy(x) {}
 | 
			
		||||
 | 
			
		||||
        void test()
 | 
			
		||||
        {
 | 
			
		||||
            BOOST_CHECK(reference == copy);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    typedef boost::shared_ptr<strong_tester> strong_tester_ptr;
 | 
			
		||||
 | 
			
		||||
    //template <class T>
 | 
			
		||||
    //strong_tester_ptr create_tester_impl(T const& x, float)
 | 
			
		||||
    //{
 | 
			
		||||
    //    return strong_tester_ptr(new default_strong_tester<T>(x));
 | 
			
		||||
    //}
 | 
			
		||||
 | 
			
		||||
    template <class T>
 | 
			
		||||
    strong_tester_ptr create_tester(T const& x)
 | 
			
		||||
    {
 | 
			
		||||
        DEACTIVATE_EXCEPTIONS;
 | 
			
		||||
        return create_tester_impl(x, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class strong_test_holder
 | 
			
		||||
    {
 | 
			
		||||
        strong_tester_ptr ptr_;
 | 
			
		||||
    public:
 | 
			
		||||
        strong_test_holder(strong_tester_ptr const&);
 | 
			
		||||
        ~strong_test_holder();
 | 
			
		||||
        bool is_dismissed() const;
 | 
			
		||||
        void dismiss();
 | 
			
		||||
    private:
 | 
			
		||||
        strong_test_holder(strong_test_holder const&);
 | 
			
		||||
        strong_test_holder& operator=(strong_test_holder const&);
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define STRONG_TEST_ANON(x) \
 | 
			
		||||
    STRONG_TEST(BOOST_PP_CAT(STRONG_TEST_tester, __LINE__), x)
 | 
			
		||||
 | 
			
		||||
#define STRONG_TEST(tester, x) \
 | 
			
		||||
    for(::test::strong_test_holder tester(::test::create_tester(x)); \
 | 
			
		||||
            !tester.is_dismissed(); tester.dismiss())
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user