summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/unordered/test/helpers/strong.hpp
blob: 3c9361337b6cb6f1bade4c02b2340db22affb77c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 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 "./equivalent.hpp"
#include "./exception_test.hpp"
#include "./list.hpp"
#include <boost/config.hpp>
#include <iterator>

namespace test {
  template <class X> class strong
  {
    typedef test::list<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