mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 19:53:28 +01:00
151dccbd31
This was an old "include all" header, that we no longer want to be usable, to make the include differences in new versions explicit. We will introduce new "include all" headers later, in the form of `catch_all.hpp`, `catch_matchers_all.hpp` and so on...
87 lines
3.1 KiB
C++
87 lines
3.1 KiB
C++
#include <catch2/catch_test_macros.hpp>
|
|
#include <vector>
|
|
#include <array>
|
|
|
|
// vector
|
|
TEST_CASE( "vector<int> -> toString", "[toString][vector]" )
|
|
{
|
|
std::vector<int> vv;
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" );
|
|
vv.push_back( 42 );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" );
|
|
vv.push_back( 250 );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" );
|
|
}
|
|
|
|
TEST_CASE( "vector<string> -> toString", "[toString][vector]" )
|
|
{
|
|
std::vector<std::string> vv;
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" );
|
|
vv.emplace_back( "hello" );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\" }" );
|
|
vv.emplace_back( "world" );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" );
|
|
}
|
|
|
|
namespace {
|
|
/* Minimal Allocator */
|
|
template<typename T>
|
|
struct minimal_allocator {
|
|
using value_type = T;
|
|
using size_type = std::size_t;
|
|
|
|
minimal_allocator() = default;
|
|
template <typename U>
|
|
minimal_allocator(const minimal_allocator<U>&) {}
|
|
|
|
|
|
T *allocate( size_type n ) {
|
|
return static_cast<T *>( ::operator new( n * sizeof(T) ) );
|
|
}
|
|
void deallocate( T *p, size_type /*n*/ ) {
|
|
::operator delete( static_cast<void *>(p) );
|
|
}
|
|
template<typename U>
|
|
bool operator==( const minimal_allocator<U>& ) const { return true; }
|
|
template<typename U>
|
|
bool operator!=( const minimal_allocator<U>& ) const { return false; }
|
|
};
|
|
}
|
|
|
|
TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator]" ) {
|
|
std::vector<int,minimal_allocator<int> > vv;
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" );
|
|
vv.push_back( 42 );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" );
|
|
vv.push_back( 250 );
|
|
REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" );
|
|
}
|
|
|
|
TEST_CASE( "vec<vec<string,alloc>> -> toString", "[toString][vector,allocator]" ) {
|
|
using inner = std::vector<std::string, minimal_allocator<std::string>>;
|
|
using vector = std::vector<inner>;
|
|
vector v;
|
|
REQUIRE( ::Catch::Detail::stringify(v) == "{ }" );
|
|
v.push_back( inner { "hello" } );
|
|
v.push_back( inner { "world" } );
|
|
REQUIRE( ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" );
|
|
}
|
|
|
|
// Based on PR by mat-so: https://github.com/catchorg/Catch2/pull/606/files#diff-43562f40f8c6dcfe2c54557316e0f852
|
|
TEST_CASE( "vector<bool> -> toString", "[toString][containers][vector]" ) {
|
|
std::vector<bool> bools;
|
|
REQUIRE( ::Catch::Detail::stringify(bools) == "{ }");
|
|
bools.push_back(true);
|
|
REQUIRE( ::Catch::Detail::stringify(bools) == "{ true }");
|
|
bools.push_back(false);
|
|
REQUIRE( ::Catch::Detail::stringify(bools) == "{ true, false }");
|
|
}
|
|
TEST_CASE( "array<int, N> -> toString", "[toString][containers][array]" ) {
|
|
std::array<int, 0> empty;
|
|
REQUIRE( Catch::Detail::stringify( empty ) == "{ }" );
|
|
std::array<int, 1> oneValue = {{ 42 }};
|
|
REQUIRE( Catch::Detail::stringify( oneValue ) == "{ 42 }" );
|
|
std::array<int, 2> twoValues = {{ 42, 250 }};
|
|
REQUIRE( Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" );
|
|
}
|