1 /* Self tests for string_view for GDB, the GNU debugger.
3 Copyright (C) 2018 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 /* No need to test string_view if we're using C++17, since we're going to use
21 the "real" version. */
22 #if __cplusplus < 201703L
24 #define GNULIB_NAMESPACE gnulib
28 #include "common/gdb_string_view.h"
30 /* Used by the included .cc files below. Included here because the
31 included test files are wrapped in a namespace. */
37 /* libstdc++'s testsuite uses VERIFY. */
38 #define VERIFY SELF_CHECK
40 /* Used to disable testing features not supported by
42 #define GDB_STRING_VIEW
45 namespace string_view {
47 /* The actual tests live in separate files, which were originally
48 copied over from libstdc++'s testsuite. To preserve the structure
49 and help with comparison with the original tests, the file names
50 have been preserved, and only minimal modification was done to have
51 them compile against gdb::string_view instead of std::string_view:
53 - std::string_view->gdb::string_view, etc.
54 - ATTRIBUTE_UNUSED in a few places
55 - wrap each file in a namespace so they can all be compiled as a
57 - libstdc++'s license and formatting style was preserved.
60 #include "basic_string_view/capacity/1.cc"
61 #include "basic_string_view/cons/char/1.cc"
62 #include "basic_string_view/cons/char/2.cc"
63 #include "basic_string_view/cons/char/3.cc"
64 #include "basic_string_view/element_access/char/1.cc"
65 #include "basic_string_view/element_access/char/empty.cc"
66 #include "basic_string_view/element_access/char/front_back.cc"
67 #include "basic_string_view/inserters/char/2.cc"
68 #include "basic_string_view/modifiers/remove_prefix/char/1.cc"
69 #include "basic_string_view/modifiers/remove_suffix/char/1.cc"
70 #include "basic_string_view/modifiers/swap/char/1.cc"
71 #include "basic_string_view/operations/compare/char/1.cc"
72 #include "basic_string_view/operations/compare/char/13650.cc"
73 #include "basic_string_view/operations/copy/char/1.cc"
74 #include "basic_string_view/operations/data/char/1.cc"
75 #include "basic_string_view/operations/find/char/1.cc"
76 #include "basic_string_view/operations/find/char/2.cc"
77 #include "basic_string_view/operations/find/char/3.cc"
78 #include "basic_string_view/operations/find/char/4.cc"
79 #include "basic_string_view/operations/rfind/char/1.cc"
80 #include "basic_string_view/operations/rfind/char/2.cc"
81 #include "basic_string_view/operations/rfind/char/3.cc"
82 #include "basic_string_view/operations/substr/char/1.cc"
83 #include "basic_string_view/operators/char/2.cc"
92 element_access_1::main ();
93 element_access_empty::main ();
94 element_access_front_back::main ();
96 modifiers_remove_prefix::main ();
97 modifiers_remove_suffix::main ();
98 modifiers_swap::test01 ();
99 operations_compare_1::main ();
100 operations_compare_13650::main ();
101 operations_copy_1::main ();
102 operations_data_1::main ();
103 operations_find_1::main ();
104 operations_find_2::main ();
105 operations_find_3::main ();
106 operations_find_4::main ();
107 operations_rfind_1::main ();
108 operations_rfind_2::main ();
109 operations_rfind_3::main ();
110 operations_substr_1::main ();
111 operators_2::main ();
113 constexpr gdb::string_view sv_empty;
114 SELF_CHECK (sv_empty.empty ());
116 std::string std_string = "fika";
117 gdb::string_view sv1 (std_string);
118 SELF_CHECK (sv1 == "fika");
120 constexpr const char *fika = "fika";
121 gdb::string_view sv2 (fika);
122 SELF_CHECK (sv2 == "fika");
124 constexpr gdb::string_view sv3 (fika, 3);
125 SELF_CHECK (sv3 == "fik");
127 constexpr gdb::string_view sv4 (sv3);
128 SELF_CHECK (sv4 == "fik");
130 constexpr gdb::string_view::iterator it_begin = sv4.begin ();
131 static_assert (*it_begin == 'f', "");
133 constexpr gdb::string_view::iterator it_end = sv4.end ();
134 static_assert (*it_end == 'a', "");
136 const gdb::string_view::reverse_iterator it_rbegin = sv4.rbegin ();
137 SELF_CHECK (*it_rbegin == 'k');
139 const gdb::string_view::reverse_iterator it_rend = sv4.rend ();
140 SELF_CHECK (*(it_rend - 1) == 'f');
142 constexpr gdb::string_view::size_type size = sv4.size ();
143 static_assert (size == 3, "");
145 constexpr gdb::string_view::size_type length = sv4.length ();
146 static_assert (length == 3, "");
148 constexpr gdb::string_view::size_type max_size = sv4.max_size ();
149 static_assert (max_size > 0, "");
151 constexpr bool empty = sv4.empty ();
152 static_assert (!empty, "");
154 constexpr char c1 = sv4[1];
155 static_assert (c1 == 'i', "");
157 constexpr char c2 = sv4.at (2);
158 static_assert (c2 == 'k', "");
160 constexpr char front = sv4.front ();
161 static_assert (front == 'f', "");
163 constexpr char back = sv4.back ();
164 static_assert (back == 'k', "");
166 constexpr const char *data = sv4.data ();
167 static_assert (data == fika, "");
170 } /* namespace string_view */
171 } /* namespace selftests */
174 _initialize_string_view_selftests ()
176 selftests::register_test ("string_view", selftests::string_view::run_tests);
179 #endif /* __cplusplus < 201703L */