
// Copyright 2005-2009 Daniel James.
// 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)

#if !defined(BOOST_UNORDERED_TEST_HELPERS_STRONG_HEADER)
#define BOOST_UNORDERED_TEST_HELPERS_STRONG_HEADER

#include <boost/config.hpp>
#include <iterator>
#include "./metafunctions.hpp"
#include "./equivalent.hpp"
#include "./list.hpp"
#include "./exception_test.hpp"

namespace test
{
    template <class X>
    class strong
    {
        typedef test::list<BOOST_DEDUCED_TYPENAME X::value_type> values_type;
        values_type values_;
        unsigned int allocations_;
    public:
        void store(X const& x, unsigned int allocations = 0) {
            DISABLE_EXCEPTIONS;
            values_.clear();
            values_.insert(x.cbegin(), x.cend());
            allocations_ = allocations;
        }

        void test(X const& x, unsigned int allocations = 0) const {
            if(!(x.size() == values_.size() &&
                    test::equal(x.cbegin(), x.cend(), values_.begin(),
                        test::equivalent)))
                BOOST_ERROR("Strong exception safety failure.");
            if(allocations != allocations_)
                BOOST_ERROR("Strong exception failure: extra allocations.");
        }
    };
}

#endif
