]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/utility/test/string_view_test1.cpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / libs / utility / test / string_view_test1.cpp
CommitLineData
7c673cae
FG
1/*
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
11fdf7f2 16#include <boost/core/lightweight_test.hpp>
7c673cae
FG
17
18typedef boost::string_view string_view;
19
20// Should be equal
21void interop ( const std::string &str, string_view ref ) {
11fdf7f2
TL
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 ()));
7c673cae
FG
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
11fdf7f2
TL
36 BOOST_TEST ( sr1 == sr2 );
37 BOOST_TEST ( sr1 == sr3 );
38 BOOST_TEST ( sr2 == sr3 );
39 BOOST_TEST ( sr1 == sr4 );
7c673cae
FG
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
11fdf7f2 96int main()
7c673cae
FG
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 }
11fdf7f2
TL
108
109 return boost::report_errors();
7c673cae 110}