[boost][range] - Make the type_erased adaptor test compatible with more compilers and reduce the time of test compilation/execution to avoid timeouts on the Intel compilers.

[SVN r67601]
This commit is contained in:
Neil Groves
2011-01-03 00:38:52 +00:00
parent 716cf7795e
commit a5d94bbe21

View File

@ -22,22 +22,27 @@
namespace boost_range_adaptor_type_erased_test
{
namespace
{
class MockType
{
public:
explicit MockType(int x)
: m_x(x) {}
MockType()
: m_x(0)
{
}
MockType(int x)
: m_x(x)
{
}
int get() const { return m_x; }
bool operator==(const MockType& other) const
inline bool operator==(const MockType& other) const
{
return m_x == other.m_x;
}
bool operator!=(const MockType& other) const
inline bool operator!=(const MockType& other) const
{
return m_x != other.m_x;
}
@ -46,7 +51,7 @@ namespace boost_range_adaptor_type_erased_test
int m_x;
};
std::ostream& operator<<(std::ostream& out, const MockType& obj)
inline std::ostream& operator<<(std::ostream& out, const MockType& obj)
{
out << obj.get();
return out;
@ -183,10 +188,8 @@ namespace boost_range_adaptor_type_erased_test
, Buffer
> type_erased_t;
type_erased_t type_erased_ex;
Container source;
for (int i = 0; i < 100; ++i)
for (int i = 0; i < 10; ++i)
source.push_back(value_type(i));
mutable_any_range r(source);
@ -196,12 +199,12 @@ namespace boost_range_adaptor_type_erased_test
r = mutable_any_range();
BOOST_CHECK_EQUAL( r.empty(), true );
r = source | type_erased_ex;
r = source | type_erased_t();
BOOST_CHECK_EQUAL_COLLECTIONS( source.begin(), source.end(),
r.begin(), r.end() );
r = mutable_any_range();
r = boost::adaptors::type_erase(source, type_erased_ex);
r = boost::adaptors::type_erase(source, type_erased_t());
BOOST_CHECK_EQUAL_COLLECTIONS( source.begin(), source.end(),
r.begin(), r.end() );
r = mutable_any_range();
@ -223,21 +226,21 @@ namespace boost_range_adaptor_type_erased_test
// range to a constant any_range
const Container& const_source = source;
cr = const_any_range();
cr = const_source | type_erased_ex;
cr = const_source | type_erased_t();
BOOST_CHECK_EQUAL_COLLECTIONS( const_source.begin(), const_source.end(),
cr.begin(), cr.end() );
// Test the pipe type erased adaptor from a mutable source
// range to a constant any_range
cr = const_any_range();
cr = source | type_erased_ex;
cr = source | type_erased_t();
BOOST_CHECK_EQUAL_COLLECTIONS( source.begin(), source.end(),
cr.begin(), cr.end() );
// Use the function form of the type_erase adaptor from a constant
// source range
cr = const_any_range();
cr = boost::adaptors::type_erase(const_source, type_erased_ex);
cr = boost::adaptors::type_erase(const_source, type_erased_t());
BOOST_CHECK_EQUAL_COLLECTIONS( const_source.begin(), const_source.end(),
cr.begin(), cr.end() );
@ -284,17 +287,10 @@ namespace boost_range_adaptor_type_erased_test
test_type_erased_impl_fn< Container, Traversal, any_iterator_heap_only_buffer >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<1> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<2> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<4> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<8> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<16> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<32> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<64> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<128> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<4096> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_buffer<16384> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_stack_only_buffer<128> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_stack_only_buffer<4096> >()();
test_type_erased_impl_fn< Container, Traversal, any_iterator_stack_only_buffer<16384> >()();
}
void test_type_erased_single_pass()
@ -419,23 +415,12 @@ namespace boost_range_adaptor_type_erased_test
t2.begin(), t2.end() );
}
class MockInt
{
public:
MockInt() : m_value() {}
MockInt(int x) : m_value(x) {}
operator int() const { return m_value; }
private:
int m_value;
};
template<class Traversal>
void test_type_erased_mix_values_driver()
{
test_type_erased_mix_values_impl< Traversal, int, char, const int&, short, const int& >();
test_type_erased_mix_values_impl< Traversal, int, int*, const int&, char, const int& >();
test_type_erased_mix_values_impl< Traversal, MockInt, char, const MockInt&, short, const MockInt& >();
test_type_erased_mix_values_impl< Traversal, MockType, char, const MockType&, short, const MockType& >();
// In fact value type should have no effect in the eligibility
// for conversion, hence we should be able to convert it
@ -460,10 +445,19 @@ namespace boost_range_adaptor_type_erased_test
for (int i = 0; i < 10; ++i)
c.push_back(i);
typedef boost::any_range<
int
, boost::random_access_traversal_tag
, int
, boost::range_difference< std::vector<int> >::type
, boost::use_default
> any_range_type;
any_range_type rng = c | type_erased_t();
for (int i = 0; i < 10; ++i)
{
BOOST_CHECK_EQUAL( (c | type_erased_t())[i], i );
}
BOOST_CHECK_EQUAL( rng[i], i );
}
}
}