Files
opm-common/tests/parser/StringTests.cpp

184 lines
4.9 KiB
C++

#define BOOST_TEST_MODULE StringTests
#include <boost/test/unit_test.hpp>
#include <opm/parser/eclipse/Utility/String.hpp>
#include <opm/parser/eclipse/Utility/Stringview.hpp>
using namespace Opm;
BOOST_AUTO_TEST_CASE( uppercase_copy ) {
const std::string src = "string";
const std::string dst = uppercase( src );
BOOST_CHECK_EQUAL( src, "string" );
BOOST_CHECK_EQUAL( dst, "STRING" );
}
BOOST_AUTO_TEST_CASE( uppercase_inplace ) {
std::string src = "string";
auto& ref = uppercase( src, src );
BOOST_CHECK_EQUAL( src, "STRING" );
BOOST_CHECK_EQUAL( src, ref );
BOOST_CHECK_EQUAL( std::addressof( src ), std::addressof( ref ) );
}
BOOST_AUTO_TEST_CASE( nonconst_ref ) {
std::string src = "string";
auto dst = uppercase( src );
BOOST_CHECK_EQUAL( src, "string" );
BOOST_CHECK_EQUAL( dst, "STRING" );
}
BOOST_AUTO_TEST_CASE( uppercase_move ) {
std::string src = "string";
auto dst = uppercase( std::move( src ) );
BOOST_CHECK_EQUAL( dst, "STRING" );
}
BOOST_AUTO_TEST_CASE( uppercase_mixed_type ) {
std::string src = "string";
string_view view( src );
std::string dst = "string";
uppercase( view, dst );
BOOST_CHECK_EQUAL( dst, "STRING" );
BOOST_CHECK_EQUAL( view, "string" );
}
BOOST_AUTO_TEST_CASE( write_parts_of_dst ) {
std::string src = "string";
string_view view( src );
std::string dst = "stringmixed";
uppercase( view, dst );
BOOST_CHECK_EQUAL( dst, "STRINGmixed" );
BOOST_CHECK_EQUAL( view, "string" );
}
BOOST_AUTO_TEST_CASE(fullStringView) {
std::string srcstr = "lorem ipsum";
string_view view( srcstr );
BOOST_CHECK_EQUAL_COLLECTIONS(
srcstr.begin(), srcstr.end(),
view.begin(), view.end() );
}
BOOST_AUTO_TEST_CASE(viewCorrectSize) {
std::string srcstr = "lorem ipsum";
string_view full( srcstr );
BOOST_CHECK_EQUAL( srcstr.size(), full.size() );
string_view view( srcstr, 5 );
BOOST_CHECK_EQUAL( 5, view.size() );
BOOST_CHECK_EQUAL( 5, view.length() );
}
BOOST_AUTO_TEST_CASE(viewOperatorAt) {
std::string srcstr = "lorem ipsum";
string_view view( srcstr );
for( size_t i = 0; i < view.size(); ++i )
BOOST_CHECK_EQUAL( view[ i ], srcstr[ i ] );
}
BOOST_AUTO_TEST_CASE(viewFrontBack) {
std::string srcstr = "lorem ipsum";
string_view view( srcstr );
BOOST_CHECK_EQUAL( view.front(), 'l' );
BOOST_CHECK_EQUAL( view.back(), 'm' );
}
BOOST_AUTO_TEST_CASE(viewSubstr) {
std::string srcstr = "lorem ipsum";
string_view view( srcstr );
BOOST_CHECK_NO_THROW( view.string() );
BOOST_CHECK_EQUAL( srcstr, view.string() );
BOOST_CHECK_EQUAL( srcstr, view.substr() );
BOOST_CHECK_EQUAL( "", view.substr( 0, 0 ) );
BOOST_CHECK_EQUAL( srcstr.substr( 1 ), view.substr( 1 ) );
BOOST_CHECK_EQUAL( srcstr, view.substr( 0, srcstr.size() + 1 ));
BOOST_CHECK_EQUAL( "", view.substr( 1, 0 ));
BOOST_CHECK_EQUAL( "", view.substr( 0, 0 ) );
BOOST_CHECK_THROW( view.substr( srcstr.size() + 1 ), std::out_of_range );
}
BOOST_AUTO_TEST_CASE(viewStream) {
std::string srcstr = "lorem ipsum";
string_view view( srcstr );
std::stringstream str;
str << view;
BOOST_CHECK_EQUAL( srcstr, str.str() );
}
BOOST_AUTO_TEST_CASE(equalityOperators) {
std::string srcstr = "lorem ipsum";
std::string diffstr = "lorem";
string_view view( srcstr );
BOOST_CHECK_EQUAL( srcstr, view );
BOOST_CHECK_NE( diffstr, view );
BOOST_CHECK_EQUAL( view, srcstr );
BOOST_CHECK_NE( view, diffstr );
BOOST_CHECK_EQUAL( "lorem ipsum", view );
BOOST_CHECK_NE( "lorem", view );
BOOST_CHECK_EQUAL( view, "lorem ipsum" );
BOOST_CHECK_NE( view, "lorem" );
}
BOOST_AUTO_TEST_CASE(plusOperator) {
std::string total = "lorem ipsum";
std::string lhs = "lorem";
std::string ws = " ";
std::string rhs = "ipsum";
string_view lhs_view( lhs );
string_view rhs_view( rhs );
BOOST_CHECK_EQUAL( total, lhs_view + ws + rhs_view );
BOOST_CHECK_EQUAL( lhs + ws, lhs_view + ws );
BOOST_CHECK_EQUAL( ws + rhs, ws + rhs_view );
}
BOOST_AUTO_TEST_CASE(strncmp_function) {
std::string s = "A BB CCC DDDD";
string_view view(s);
BOOST_CHECK(!view.starts_with("this is a very long string -longer than the view"));
BOOST_CHECK(view.starts_with("A"));
BOOST_CHECK(view.starts_with("A BB"));
BOOST_CHECK(!view.starts_with("A BB D"));
BOOST_CHECK(view.starts_with(s));
BOOST_CHECK_EQUAL( view.find("A"), 0);
BOOST_CHECK_EQUAL( view.find("BB"), 2);
BOOST_CHECK_EQUAL( view.find("C"), 5);
BOOST_CHECK_EQUAL( view.find("CCCC"), std::string::npos);
BOOST_CHECK_EQUAL( view.find("DDDD"), 9);
BOOST_CHECK_EQUAL( view.find('A'), 0);
BOOST_CHECK_EQUAL( view.find('B'), 2);
BOOST_CHECK_EQUAL( view.find('C'), 5);
BOOST_CHECK_EQUAL( view.find('X'), std::string::npos);
BOOST_CHECK_EQUAL( view.find('D'), 9);
}