gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / unittests / string_view-selftests.c
CommitLineData
c9638d26
SM
1/* Self tests for string_view for GDB, the GNU debugger.
2
b811d2c2 3 Copyright (C) 2018-2020 Free Software Foundation, Inc.
c9638d26
SM
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
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
23
7402fbca
SM
24#define GNULIB_NAMESPACE gnulib
25
c9638d26 26#include "defs.h"
268a13a5
TT
27#include "gdbsupport/selftest.h"
28#include "gdbsupport/gdb_string_view.h"
c9638d26
SM
29
30/* Used by the included .cc files below. Included here because the
31 included test files are wrapped in a namespace. */
32#include <string>
33#include <sstream>
34#include <fstream>
35#include <iostream>
36
37/* libstdc++'s testsuite uses VERIFY. */
38#define VERIFY SELF_CHECK
39
40/* Used to disable testing features not supported by
41 gdb::string_view. */
42#define GDB_STRING_VIEW
43
44namespace selftests {
45namespace string_view {
46
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:
52
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
56 single unit.
57 - libstdc++'s license and formatting style was preserved.
58*/
59
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"
84
85static void
86run_tests ()
87{
88 capacity_1::main ();
89 cons_1::main ();
90 cons_2::main ();
91 cons_3::main ();
92 element_access_1::main ();
93 element_access_empty::main ();
94 element_access_front_back::main ();
95 inserters_2::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 ();
112
113 constexpr gdb::string_view sv_empty;
114 SELF_CHECK (sv_empty.empty ());
115
116 std::string std_string = "fika";
117 gdb::string_view sv1 (std_string);
118 SELF_CHECK (sv1 == "fika");
119
120 constexpr const char *fika = "fika";
121 gdb::string_view sv2 (fika);
122 SELF_CHECK (sv2 == "fika");
123
124 constexpr gdb::string_view sv3 (fika, 3);
125 SELF_CHECK (sv3 == "fik");
126
127 constexpr gdb::string_view sv4 (sv3);
128 SELF_CHECK (sv4 == "fik");
129
130 constexpr gdb::string_view::iterator it_begin = sv4.begin ();
131 static_assert (*it_begin == 'f', "");
132
133 constexpr gdb::string_view::iterator it_end = sv4.end ();
134 static_assert (*it_end == 'a', "");
135
136 const gdb::string_view::reverse_iterator it_rbegin = sv4.rbegin ();
137 SELF_CHECK (*it_rbegin == 'k');
138
139 const gdb::string_view::reverse_iterator it_rend = sv4.rend ();
140 SELF_CHECK (*(it_rend - 1) == 'f');
141
142 constexpr gdb::string_view::size_type size = sv4.size ();
143 static_assert (size == 3, "");
144
145 constexpr gdb::string_view::size_type length = sv4.length ();
146 static_assert (length == 3, "");
147
148 constexpr gdb::string_view::size_type max_size = sv4.max_size ();
149 static_assert (max_size > 0, "");
150
151 constexpr bool empty = sv4.empty ();
152 static_assert (!empty, "");
153
154 constexpr char c1 = sv4[1];
155 static_assert (c1 == 'i', "");
156
157 constexpr char c2 = sv4.at (2);
158 static_assert (c2 == 'k', "");
159
160 constexpr char front = sv4.front ();
161 static_assert (front == 'f', "");
162
163 constexpr char back = sv4.back ();
164 static_assert (back == 'k', "");
165
166 constexpr const char *data = sv4.data ();
167 static_assert (data == fika, "");
168}
169
170} /* namespace string_view */
171} /* namespace selftests */
172
58785d98
ST
173#endif /* __cplusplus < 201703L */
174
6c265988 175void _initialize_string_view_selftests ();
c9638d26
SM
176void
177_initialize_string_view_selftests ()
178{
58785d98 179#if defined(GDB_STRING_VIEW)
c9638d26 180 selftests::register_test ("string_view", selftests::string_view::run_tests);
58785d98 181#endif
c9638d26 182}
This page took 0.330299 seconds and 4 git commands to generate.