blob: 9b70a7e05471ba27e64d0ce53e125733e8c84b89 [file] [log] [blame]
Brian Silverman60e3e2a2018-08-04 23:57:12 -07001/*
2 Copyright (c) Marshall Clow 2012-2012.
3
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7 For more information, see http://www.boost.org
8*/
9
10#include <iostream>
11#include <algorithm>
12#include <string>
13
14#include <boost/utility/string_view.hpp>
15
16#include <boost/core/lightweight_test.hpp>
17
18typedef boost::string_view string_view;
19
20// Should be equal
21void interop ( const std::string &str, string_view ref ) {
22// BOOST_TEST ( str == ref );
23 BOOST_TEST ( str.size () == ref.size ());
24 BOOST_TEST ( std::equal ( str.begin (), str.end (), ref.begin ()));
25 BOOST_TEST ( std::equal ( str.rbegin (), str.rend (), ref.rbegin ()));
26 }
27
28void null_tests ( const char *p ) {
29// All zero-length string-refs should be equal
30 string_view sr1; // NULL, 0
31 string_view sr2 ( NULL, 0 );
32 string_view sr3 ( p, 0 );
33 string_view sr4 ( p );
34 sr4.clear ();
35
36 BOOST_TEST ( sr1 == sr2 );
37 BOOST_TEST ( sr1 == sr3 );
38 BOOST_TEST ( sr2 == sr3 );
39 BOOST_TEST ( sr1 == sr4 );
40 }
41
42// make sure that substrings work just like strings
43void test_substr ( const std::string &str ) {
44 const size_t sz = str.size ();
45 string_view ref ( str );
46
47// Substrings at the end
48 for ( size_t i = 0; i <= sz; ++ i )
49 interop ( str.substr ( i ), ref.substr ( i ));
50
51// Substrings at the beginning
52 for ( size_t i = 0; i <= sz; ++ i )
53 interop ( str.substr ( 0, i ), ref.substr ( 0, i ));
54
55// All possible substrings
56 for ( size_t i = 0; i < sz; ++i )
57 for ( size_t j = i; j < sz; ++j )
58 interop ( str.substr ( i, j ), ref.substr ( i, j ));
59 }
60
61// make sure that removing prefixes and suffixes work just like strings
62void test_remove ( const std::string &str ) {
63 const size_t sz = str.size ();
64 std::string work;
65 string_view ref;
66
67 for ( size_t i = 1; i <= sz; ++i ) {
68 work = str;
69 ref = str;
70 while ( ref.size () >= i ) {
71 interop ( work, ref );
72 work.erase ( 0, i );
73 ref.remove_prefix (i);
74 }
75 }
76
77 for ( size_t i = 1; i < sz; ++ i ) {
78 work = str;
79 ref = str;
80 while ( ref.size () >= i ) {
81 interop ( work, ref );
82 work.erase ( work.size () - i, i );
83 ref.remove_suffix (i);
84 }
85 }
86 }
87
88const char *test_strings [] = {
89 "",
90 "1",
91 "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
92 "0123456789",
93 NULL
94 };
95
96int main()
97{
98 const char **p = &test_strings[0];
99
100 while ( *p != NULL ) {
101 interop ( *p, *p );
102 test_substr ( *p );
103 test_remove ( *p );
104 null_tests ( *p );
105
106 p++;
107 }
108
109 return boost::report_errors();
110}