forked from boostorg/unordered
Stricter warnings for unordered and hash.
There are still warnings in hash_complex_test. [SVN r57537]
This commit is contained in:
@ -8,7 +8,18 @@ import testing ;
|
|||||||
#alias framework : /boost/test//boost_unit_test_framework ;
|
#alias framework : /boost/test//boost_unit_test_framework ;
|
||||||
alias framework : ;
|
alias framework : ;
|
||||||
|
|
||||||
project unordered-test/exception-tests ;
|
project unordered-test/exception-tests
|
||||||
|
: requirements
|
||||||
|
<warnings>all
|
||||||
|
<toolset>intel:<warnings>on
|
||||||
|
<toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
|
||||||
|
<toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
|
||||||
|
<toolset>gcc:<define>_GLIBCXX_DEBUG
|
||||||
|
<toolset>darwin:<define>_GLIBCXX_DEBUG
|
||||||
|
<toolset>msvc:<warnings-as-errors>on
|
||||||
|
<toolset>gcc:<warnings-as-errors>on
|
||||||
|
<toolset>darwin:<warnings-as-errors>on
|
||||||
|
;
|
||||||
|
|
||||||
test-suite unordered-exception
|
test-suite unordered-exception
|
||||||
:
|
:
|
||||||
|
@ -7,6 +7,10 @@
|
|||||||
#include "../helpers/random_values.hpp"
|
#include "../helpers/random_values.hpp"
|
||||||
#include "../helpers/invariants.hpp"
|
#include "../helpers/invariants.hpp"
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC)
|
||||||
|
#pragma warning(disable:4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
test::seed_t seed(12847);
|
test::seed_t seed(12847);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -7,6 +7,10 @@
|
|||||||
#include "../helpers/random_values.hpp"
|
#include "../helpers/random_values.hpp"
|
||||||
#include "../helpers/invariants.hpp"
|
#include "../helpers/invariants.hpp"
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC)
|
||||||
|
#pragma warning(disable:4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
test::seed_t seed(9387);
|
test::seed_t seed(9387);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -143,6 +143,9 @@ namespace test {
|
|||||||
class test_runner
|
class test_runner
|
||||||
{
|
{
|
||||||
Test const& test_;
|
Test const& test_;
|
||||||
|
|
||||||
|
test_runner(test_runner const&);
|
||||||
|
test_runner& operator=(test_runner const&);
|
||||||
public:
|
public:
|
||||||
test_runner(Test const& t) : test_(t) {}
|
test_runner(Test const& t) : test_(t) {}
|
||||||
void operator()() const {
|
void operator()() const {
|
||||||
|
@ -21,6 +21,8 @@ namespace test
|
|||||||
operator value_type const&() const { return v_; }
|
operator value_type const&() const { return v_; }
|
||||||
|
|
||||||
value_type v_;
|
value_type v_;
|
||||||
|
private:
|
||||||
|
proxy& operator=(proxy const&);
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Iterator>
|
template <class Iterator>
|
||||||
|
@ -17,6 +17,23 @@
|
|||||||
|
|
||||||
namespace test
|
namespace test
|
||||||
{
|
{
|
||||||
|
template <typename It1, typename It2>
|
||||||
|
bool equal(It1 begin, It1 end, It2 compare)
|
||||||
|
{
|
||||||
|
for(;begin != end; ++begin, ++compare)
|
||||||
|
if(*begin != *compare) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename It1, typename It2, typename Pred>
|
||||||
|
bool equal(It1 begin, It1 end, It2 compare, Pred predicate)
|
||||||
|
{
|
||||||
|
for(;begin != end; ++begin, ++compare)
|
||||||
|
if(!predicate(*begin, *compare)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T> class list;
|
template <typename T> class list;
|
||||||
|
|
||||||
namespace test_detail
|
namespace test_detail
|
||||||
@ -222,7 +239,7 @@ namespace test
|
|||||||
|
|
||||||
bool operator==(list const& y) const {
|
bool operator==(list const& y) const {
|
||||||
return size() == y.size() &&
|
return size() == y.size() &&
|
||||||
std::equal(begin(), end(), y.begin());
|
test::equal(begin(), end(), y.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(list const& y) const {
|
bool operator!=(list const& y) const {
|
||||||
|
@ -31,7 +31,7 @@ namespace test
|
|||||||
|
|
||||||
void test(X const& x, unsigned int allocations = 0) const {
|
void test(X const& x, unsigned int allocations = 0) const {
|
||||||
if(!(x.size() == values_.size() &&
|
if(!(x.size() == values_.size() &&
|
||||||
std::equal(x.cbegin(), x.cend(), values_.begin(),
|
test::equal(x.cbegin(), x.cend(), values_.begin(),
|
||||||
test::equivalent)))
|
test::equivalent)))
|
||||||
BOOST_ERROR("Strong exception safety failure.");
|
BOOST_ERROR("Strong exception safety failure.");
|
||||||
if(allocations != allocations_)
|
if(allocations != allocations_)
|
||||||
|
@ -50,7 +50,7 @@ namespace test
|
|||||||
values1.sort();
|
values1.sort();
|
||||||
values2.sort();
|
values2.sort();
|
||||||
BOOST_TEST(values1.size() == values2.size() &&
|
BOOST_TEST(values1.size() == values2.size() &&
|
||||||
std::equal(values1.begin(), values1.end(), values2.begin(),
|
test::equal(values1.begin(), values1.end(), values2.begin(),
|
||||||
test::equivalent));
|
test::equivalent));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ namespace test
|
|||||||
values1.sort();
|
values1.sort();
|
||||||
values2.sort();
|
values2.sort();
|
||||||
BOOST_TEST(values1.size() == values2.size() &&
|
BOOST_TEST(values1.size() == values2.size() &&
|
||||||
std::equal(values1.begin(), values1.end(), values2.begin(), test::equivalent));
|
test::equal(values1.begin(), values1.end(), values2.begin(), test::equivalent));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class X>
|
template <class X>
|
||||||
|
@ -9,9 +9,13 @@ project unordered-test/unordered
|
|||||||
: requirements
|
: requirements
|
||||||
<warnings>all
|
<warnings>all
|
||||||
<toolset>intel:<warnings>on
|
<toolset>intel:<warnings>on
|
||||||
<toolset>intel:<cxxflags>-strict-ansi
|
<toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
|
||||||
<toolset>msvc:<cxxflags>/W4
|
<toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
|
||||||
<toolset>gcc:<cxxflags>"-Wsign-promo -Wunused-parameter -pedantic"
|
<toolset>gcc:<define>_GLIBCXX_DEBUG
|
||||||
|
<toolset>darwin:<define>_GLIBCXX_DEBUG
|
||||||
|
<toolset>msvc:<warnings-as-errors>on
|
||||||
|
<toolset>gcc:<warnings-as-errors>on
|
||||||
|
<toolset>darwin:<warnings-as-errors>on
|
||||||
;
|
;
|
||||||
|
|
||||||
test-suite unordered
|
test-suite unordered
|
||||||
|
@ -29,36 +29,36 @@ namespace equality_tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define UNORDERED_EQUALITY_SET_TEST(seq1, op, seq2) \
|
#define UNORDERED_EQUALITY_SET_TEST(seq1, op, seq2) \
|
||||||
do { \
|
{ \
|
||||||
boost::unordered_set<int, mod_compare, mod_compare> set1, set2; \
|
boost::unordered_set<int, mod_compare, mod_compare> set1, set2; \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
|
||||||
BOOST_TEST(set1 op set2); \
|
BOOST_TEST(set1 op set2); \
|
||||||
} while(false)
|
}
|
||||||
|
|
||||||
#define UNORDERED_EQUALITY_MULTISET_TEST(seq1, op, seq2) \
|
#define UNORDERED_EQUALITY_MULTISET_TEST(seq1, op, seq2) \
|
||||||
do { \
|
{ \
|
||||||
boost::unordered_multiset<int, mod_compare, mod_compare> set1, set2; \
|
boost::unordered_multiset<int, mod_compare, mod_compare> set1, set2; \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
|
||||||
BOOST_TEST(set1 op set2); \
|
BOOST_TEST(set1 op set2); \
|
||||||
} while(false)
|
}
|
||||||
|
|
||||||
#define UNORDERED_EQUALITY_MAP_TEST(seq1, op, seq2) \
|
#define UNORDERED_EQUALITY_MAP_TEST(seq1, op, seq2) \
|
||||||
do { \
|
{ \
|
||||||
boost::unordered_map<int, int, mod_compare, mod_compare> map1, map2; \
|
boost::unordered_map<int, int, mod_compare, mod_compare> map1, map2; \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
|
||||||
BOOST_TEST(map1 op map2); \
|
BOOST_TEST(map1 op map2); \
|
||||||
} while(false)
|
}
|
||||||
|
|
||||||
#define UNORDERED_EQUALITY_MULTIMAP_TEST(seq1, op, seq2) \
|
#define UNORDERED_EQUALITY_MULTIMAP_TEST(seq1, op, seq2) \
|
||||||
do { \
|
{ \
|
||||||
boost::unordered_multimap<int, int, mod_compare, mod_compare> map1, map2; \
|
boost::unordered_multimap<int, int, mod_compare, mod_compare> map1, map2; \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
|
||||||
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
|
BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
|
||||||
BOOST_TEST(map1 op map2); \
|
BOOST_TEST(map1 op map2); \
|
||||||
} while(false)
|
}
|
||||||
|
|
||||||
#define UNORDERED_SET_INSERT(r, set, item) set.insert(item);
|
#define UNORDERED_SET_INSERT(r, set, item) set.insert(item);
|
||||||
#define UNORDERED_MAP_INSERT(r, map, item) \
|
#define UNORDERED_MAP_INSERT(r, map, item) \
|
||||||
@ -89,57 +89,57 @@ namespace equality_tests
|
|||||||
|
|
||||||
UNORDERED_AUTO_TEST(equality_key_value_tests)
|
UNORDERED_AUTO_TEST(equality_key_value_tests)
|
||||||
{
|
{
|
||||||
UNORDERED_EQUALITY_MULTISET_TEST((1), !=, (2));
|
UNORDERED_EQUALITY_MULTISET_TEST((1), !=, (2))
|
||||||
UNORDERED_EQUALITY_SET_TEST((2), ==, (2));
|
UNORDERED_EQUALITY_SET_TEST((2), ==, (2))
|
||||||
UNORDERED_EQUALITY_MAP_TEST(((1)(1))((2)(1)), !=, ((1)(1))((3)(1)));
|
UNORDERED_EQUALITY_MAP_TEST(((1)(1))((2)(1)), !=, ((1)(1))((3)(1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST(equality_collision_test)
|
UNORDERED_AUTO_TEST(equality_collision_test)
|
||||||
{
|
{
|
||||||
UNORDERED_EQUALITY_MULTISET_TEST(
|
UNORDERED_EQUALITY_MULTISET_TEST(
|
||||||
(1), !=, (501));
|
(1), !=, (501))
|
||||||
UNORDERED_EQUALITY_MULTISET_TEST(
|
UNORDERED_EQUALITY_MULTISET_TEST(
|
||||||
(1)(251), !=, (1)(501));
|
(1)(251), !=, (1)(501))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((251)(1))((1)(1)), !=, ((501)(1))((1)(1)));
|
((251)(1))((1)(1)), !=, ((501)(1))((1)(1)))
|
||||||
UNORDERED_EQUALITY_MULTISET_TEST(
|
UNORDERED_EQUALITY_MULTISET_TEST(
|
||||||
(1)(501), ==, (1)(501));
|
(1)(501), ==, (1)(501))
|
||||||
UNORDERED_EQUALITY_SET_TEST(
|
UNORDERED_EQUALITY_SET_TEST(
|
||||||
(1)(501), ==, (501)(1));
|
(1)(501), ==, (501)(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST(equality_group_size_test)
|
UNORDERED_AUTO_TEST(equality_group_size_test)
|
||||||
{
|
{
|
||||||
UNORDERED_EQUALITY_MULTISET_TEST(
|
UNORDERED_EQUALITY_MULTISET_TEST(
|
||||||
(10)(20)(20), !=, (10)(10)(20));
|
(10)(20)(20), !=, (10)(10)(20))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((10)(1))((20)(1))((20)(1)), !=,
|
((10)(1))((20)(1))((20)(1)), !=,
|
||||||
((10)(1))((20)(1))((10)(1)));
|
((10)(1))((20)(1))((10)(1)))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((20)(1))((10)(1))((10)(1)), ==,
|
((20)(1))((10)(1))((10)(1)), ==,
|
||||||
((10)(1))((20)(1))((10)(1)));
|
((10)(1))((20)(1))((10)(1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST(equality_map_value_test)
|
UNORDERED_AUTO_TEST(equality_map_value_test)
|
||||||
{
|
{
|
||||||
UNORDERED_EQUALITY_MAP_TEST(
|
UNORDERED_EQUALITY_MAP_TEST(
|
||||||
((1)(1)), !=, ((1)(2)));
|
((1)(1)), !=, ((1)(2)))
|
||||||
UNORDERED_EQUALITY_MAP_TEST(
|
UNORDERED_EQUALITY_MAP_TEST(
|
||||||
((1)(1)), ==, ((1)(1)));
|
((1)(1)), ==, ((1)(1)))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((1)(1)), !=, ((1)(2)));
|
((1)(1)), !=, ((1)(2)))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((1)(1))((1)(1)), !=, ((1)(1))((1)(2)));
|
((1)(1))((1)(1)), !=, ((1)(1))((1)(2)))
|
||||||
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
UNORDERED_EQUALITY_MULTIMAP_TEST(
|
||||||
((1)(2))((1)(1)), !=, ((1)(1))((1)(2)));
|
((1)(2))((1)(1)), !=, ((1)(1))((1)(2)))
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST(equality_predicate_test)
|
UNORDERED_AUTO_TEST(equality_predicate_test)
|
||||||
{
|
{
|
||||||
UNORDERED_EQUALITY_SET_TEST(
|
UNORDERED_EQUALITY_SET_TEST(
|
||||||
(1), ==, (1001));
|
(1), ==, (1001))
|
||||||
UNORDERED_EQUALITY_MAP_TEST(
|
UNORDERED_EQUALITY_MAP_TEST(
|
||||||
((1)(2))((1001)(1)), ==, ((1001)(2))((1)(1)));
|
((1)(2))((1001)(1)), ==, ((1001)(2))((1)(1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that equality still works when the two containers have
|
// Test that equality still works when the two containers have
|
||||||
|
@ -65,7 +65,7 @@ void erase_tests1(Container*, test::random_generator generator = test::default_g
|
|||||||
while(size > 0 && !x.empty())
|
while(size > 0 && !x.empty())
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
int index = rand() % x.size();
|
int index = rand() % (int) x.size();
|
||||||
BOOST_DEDUCED_TYPENAME Container::const_iterator prev, pos, next;
|
BOOST_DEDUCED_TYPENAME Container::const_iterator prev, pos, next;
|
||||||
if(index == 0) {
|
if(index == 0) {
|
||||||
prev = pos = x.begin();
|
prev = pos = x.begin();
|
||||||
|
Reference in New Issue
Block a user