const_string_test.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // (C) Copyright Gennadiy Rozental 2001-2014.
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. //
  6. // See http://www.boost.org/libs/test for the library home page.
  7. //
  8. // Description : simple string class test
  9. // ***************************************************************************
  10. #define BOOST_TEST_MODULE const_string test
  11. #include <boost/test/unit_test.hpp>
  12. #include <const_string.hpp>
  13. using common_layer::const_string;
  14. BOOST_AUTO_TEST_CASE( constructors_test )
  15. {
  16. const_string cs0( "" );
  17. BOOST_CHECK_EQUAL( cs0.length(), (size_t)0 );
  18. BOOST_CHECK_EQUAL( cs0.begin(), "" );
  19. BOOST_CHECK_EQUAL( cs0.end(), "" );
  20. BOOST_CHECK( cs0.is_empty() );
  21. const_string cs01( NULL );
  22. BOOST_CHECK_EQUAL( cs01.length(), (size_t)0 );
  23. BOOST_CHECK_EQUAL( cs01.begin(), "" );
  24. BOOST_CHECK_EQUAL( cs01.end(), "" );
  25. BOOST_CHECK( cs01.is_empty() );
  26. const_string cs1( "test_string" );
  27. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test_string" ), 0 );
  28. BOOST_CHECK_EQUAL( cs1.length(), std::strlen("test_string") );
  29. std::string s( "test_string" );
  30. const_string cs2( s );
  31. BOOST_CHECK_EQUAL( std::strcmp( cs2.data(), "test_string" ), 0 );
  32. const_string cs3( cs1 );
  33. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test_string" ), 0 );
  34. const_string cs4( "test_string", 4 );
  35. BOOST_CHECK_EQUAL( std::strncmp( cs4.data(), "test", cs4.length() ), 0 );
  36. const_string cs5( s.data(), s.data() + s.length() );
  37. BOOST_CHECK_EQUAL( std::strncmp( cs5.data(), "test_string", cs5.length() ), 0 );
  38. const_string cs_array[] = { "str1", "str2" };
  39. BOOST_CHECK_EQUAL( cs_array[0], "str1" );
  40. BOOST_CHECK_EQUAL( cs_array[1], "str2" );
  41. }
  42. BOOST_AUTO_TEST_CASE( data_access_test )
  43. {
  44. const_string cs1( "test_string" );
  45. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test_string" ), 0 );
  46. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), cs1 ), 0 );
  47. BOOST_CHECK_EQUAL( cs1[(size_t)0], 't' );
  48. BOOST_CHECK_EQUAL( cs1[(size_t)4], '_' );
  49. BOOST_CHECK_EQUAL( cs1[cs1.length()-1], 'g' );
  50. BOOST_CHECK_EQUAL( cs1[(size_t)0], cs1.at( 0 ) );
  51. BOOST_CHECK_EQUAL( cs1[(size_t)2], cs1.at( 5 ) );
  52. BOOST_CHECK_EQUAL( cs1.at( cs1.length() - 1 ), 'g' );
  53. BOOST_CHECK_THROW( cs1.at( cs1.length() ), std::out_of_range );
  54. BOOST_CHECK_EQUAL( common_layer::first_char()( cs1 ), 't' );
  55. BOOST_CHECK_EQUAL( common_layer::last_char()( cs1 ) , 'g' );
  56. }
  57. BOOST_AUTO_TEST_CASE( length_test )
  58. {
  59. const_string cs1;
  60. BOOST_CHECK_EQUAL( cs1.length(), (size_t)0 );
  61. BOOST_CHECK( cs1.is_empty() );
  62. cs1 = "";
  63. BOOST_CHECK_EQUAL( cs1.length(), (size_t)0 );
  64. BOOST_CHECK( cs1.is_empty() );
  65. cs1 = "test_string";
  66. BOOST_CHECK_EQUAL( cs1.length(), (size_t)11 );
  67. cs1.erase();
  68. BOOST_CHECK_EQUAL( cs1.length(), (size_t)0 );
  69. BOOST_CHECK_EQUAL( cs1.data(), "" );
  70. cs1 = const_string( "test_string", 4 );
  71. BOOST_CHECK_EQUAL( cs1.length(), (size_t)4 );
  72. cs1.resize( 5 );
  73. BOOST_CHECK_EQUAL( cs1.length(), (size_t)4 );
  74. cs1.resize( 3 );
  75. BOOST_CHECK_EQUAL( cs1.length(), (size_t)3 );
  76. cs1.rshorten();
  77. BOOST_CHECK_EQUAL( cs1.length(), (size_t)2 );
  78. BOOST_CHECK_EQUAL( cs1[(size_t)0], 't' );
  79. cs1.lshorten();
  80. BOOST_CHECK_EQUAL( cs1.length(), (size_t)1 );
  81. BOOST_CHECK_EQUAL( cs1[(size_t)0], 'e' );
  82. cs1.lshorten();
  83. BOOST_CHECK( cs1.is_empty() );
  84. BOOST_CHECK_EQUAL( cs1.data(), "" );
  85. cs1 = "test_string";
  86. cs1.lshorten( 11 );
  87. BOOST_CHECK( cs1.is_empty() );
  88. BOOST_CHECK_EQUAL( cs1.data(), "" );
  89. }
  90. BOOST_AUTO_TEST_CASE( asignment_test )
  91. {
  92. const_string cs1;
  93. std::string s( "test_string" );
  94. cs1 = "test";
  95. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test" ), 0 );
  96. cs1 = s;
  97. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test_string" ), 0 );
  98. cs1.assign( "test" );
  99. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test" ), 0 );
  100. const_string cs2( "test_string" );
  101. cs1.swap( cs2 );
  102. BOOST_CHECK_EQUAL( std::strcmp( cs1.data(), "test_string" ), 0 );
  103. BOOST_CHECK_EQUAL( std::strcmp( cs2.data(), "test" ), 0 );
  104. }
  105. BOOST_AUTO_TEST_CASE( comparison_test )
  106. {
  107. const_string cs1( "test_string" );
  108. const_string cs2( "test_string" );
  109. std::string s( "test_string" );
  110. BOOST_CHECK_EQUAL( cs1, "test_string" );
  111. BOOST_CHECK_EQUAL( "test_string", cs1 );
  112. BOOST_CHECK_EQUAL( cs1, cs2 );
  113. BOOST_CHECK_EQUAL( cs1, s );
  114. BOOST_CHECK_EQUAL( s , cs1 );
  115. cs1.resize( 4 );
  116. BOOST_CHECK( cs1 != "test_string" );
  117. BOOST_CHECK( "test_string" != cs1 );
  118. BOOST_CHECK( cs1 != cs2 );
  119. BOOST_CHECK( cs1 != s );
  120. BOOST_CHECK( s != cs1 );
  121. BOOST_CHECK_EQUAL( cs1, "test" );
  122. }
  123. BOOST_AUTO_TEST_CASE( iterators_test )
  124. {
  125. const_string cs1( "test_string" );
  126. std::string s;
  127. std::copy( cs1.begin(), cs1.end(), std::back_inserter( s ) );
  128. BOOST_CHECK_EQUAL( cs1, s );
  129. s.erase();
  130. std::copy( cs1.rbegin(), cs1.rend(), std::back_inserter( s ) );
  131. BOOST_CHECK_EQUAL( const_string( s ), "gnirts_tset" );
  132. }
  133. BOOST_AUTO_TEST_CASE( search_test )
  134. {
  135. const_string cs( "test_string" );
  136. BOOST_CHECK_EQUAL( cs.find_first_of( 't' ), cs.begin() );
  137. BOOST_CHECK_EQUAL( cs.find_last_of( 't' ), cs.begin() + 6 );
  138. BOOST_CHECK_EQUAL( cs.find_first_of( "st" ), cs.begin() + 2 );
  139. BOOST_CHECK_EQUAL( cs.find_last_of( "st" ), cs.begin() + 5 );
  140. }