diff options
Diffstat (limited to 'test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp')
| -rw-r--r-- | test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp | 46 | 
1 files changed, 36 insertions, 10 deletions
diff --git a/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp b/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp index 917248fa69163..9b66cb0049902 100644 --- a/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp +++ b/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp @@ -10,15 +10,17 @@  // <string>  // const charT* data() const; +//       charT* data();   // C++17  #include <string>  #include <cassert> +#include "test_macros.h"  #include "min_allocator.h"  template <class S>  void -test(const S& s) +test_const(const S& s)  {      typedef typename S::traits_type T;      const typename S::value_type* str = s.data(); @@ -31,22 +33,46 @@ test(const S& s)          assert(T::eq(str[0], typename S::value_type()));  } +template <class S> +void +test_nonconst(S& s) +{ +    typedef typename S::traits_type T; +    typename S::value_type* str = s.data(); +    if (s.size() > 0) +    { +        assert(T::compare(str, &s[0], s.size()) == 0); +        assert(T::eq(str[s.size()], typename S::value_type())); +    } +    else +        assert(T::eq(str[0], typename S::value_type())); +} +  int main()  {      {      typedef std::string S; -    test(S("")); -    test(S("abcde")); -    test(S("abcdefghij")); -    test(S("abcdefghijklmnopqrst")); +    test_const(S("")); +    test_const(S("abcde")); +    test_const(S("abcdefghij")); +    test_const(S("abcdefghijklmnopqrst"));      } -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11      {      typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; -    test(S("")); -    test(S("abcde")); -    test(S("abcdefghij")); -    test(S("abcdefghijklmnopqrst")); +    test_const(S("")); +    test_const(S("abcde")); +    test_const(S("abcdefghij")); +    test_const(S("abcdefghijklmnopqrst")); +    } +#endif +#if TEST_STD_VER > 14 +    { +    typedef std::string S; +    S s1("");                     test_nonconst(s1); +    S s2("abcde");                test_nonconst(s2); +    S s3("abcdefghij");           test_nonconst(s3); +    S s4("abcdefghijklmnopqrst"); test_nonconst(s4);      }  #endif  }  | 
