RISC-V: New emulations to make path searches follow glibc ABI.
[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
3 Copyright (C) 2018 Free Software Foundation, Inc.
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
24#include "defs.h"
25#include "selftest.h"
26#include "common/gdb_string_view.h"
27
28/* Used by the included .cc files below. Included here because the
29 included test files are wrapped in a namespace. */
30#include <string>
31#include <sstream>
32#include <fstream>
33#include <iostream>
34
35/* libstdc++'s testsuite uses VERIFY. */
36#define VERIFY SELF_CHECK
37
38/* Used to disable testing features not supported by
39 gdb::string_view. */
40#define GDB_STRING_VIEW
41
42namespace selftests {
43namespace string_view {
44
45/* The actual tests live in separate files, which were originally
46 copied over from libstdc++'s testsuite. To preserve the structure
47 and help with comparison with the original tests, the file names
48 have been preserved, and only minimal modification was done to have
49 them compile against gdb::string_view instead of std::string_view:
50
51 - std::string_view->gdb::string_view, etc.
52 - ATTRIBUTE_UNUSED in a few places
53 - wrap each file in a namespace so they can all be compiled as a
54 single unit.
55 - libstdc++'s license and formatting style was preserved.
56*/
57
58#include "basic_string_view/capacity/1.cc"
59#include "basic_string_view/cons/char/1.cc"
60#include "basic_string_view/cons/char/2.cc"
61#include "basic_string_view/cons/char/3.cc"
62#include "basic_string_view/element_access/char/1.cc"
63#include "basic_string_view/element_access/char/empty.cc"
64#include "basic_string_view/element_access/char/front_back.cc"
65#include "basic_string_view/inserters/char/2.cc"
66#include "basic_string_view/modifiers/remove_prefix/char/1.cc"
67#include "basic_string_view/modifiers/remove_suffix/char/1.cc"
68#include "basic_string_view/modifiers/swap/char/1.cc"
69#include "basic_string_view/operations/compare/char/1.cc"
70#include "basic_string_view/operations/compare/char/13650.cc"
71#include "basic_string_view/operations/copy/char/1.cc"
72#include "basic_string_view/operations/data/char/1.cc"
73#include "basic_string_view/operations/find/char/1.cc"
74#include "basic_string_view/operations/find/char/2.cc"
75#include "basic_string_view/operations/find/char/3.cc"
76#include "basic_string_view/operations/find/char/4.cc"
77#include "basic_string_view/operations/rfind/char/1.cc"
78#include "basic_string_view/operations/rfind/char/2.cc"
79#include "basic_string_view/operations/rfind/char/3.cc"
80#include "basic_string_view/operations/substr/char/1.cc"
81#include "basic_string_view/operators/char/2.cc"
82
83static void
84run_tests ()
85{
86 capacity_1::main ();
87 cons_1::main ();
88 cons_2::main ();
89 cons_3::main ();
90 element_access_1::main ();
91 element_access_empty::main ();
92 element_access_front_back::main ();
93 inserters_2::main ();
94 modifiers_remove_prefix::main ();
95 modifiers_remove_suffix::main ();
96 modifiers_swap::test01 ();
97 operations_compare_1::main ();
98 operations_compare_13650::main ();
99 operations_copy_1::main ();
100 operations_data_1::main ();
101 operations_find_1::main ();
102 operations_find_2::main ();
103 operations_find_3::main ();
104 operations_find_4::main ();
105 operations_rfind_1::main ();
106 operations_rfind_2::main ();
107 operations_rfind_3::main ();
108 operations_substr_1::main ();
109 operators_2::main ();
110
111 constexpr gdb::string_view sv_empty;
112 SELF_CHECK (sv_empty.empty ());
113
114 std::string std_string = "fika";
115 gdb::string_view sv1 (std_string);
116 SELF_CHECK (sv1 == "fika");
117
118 constexpr const char *fika = "fika";
119 gdb::string_view sv2 (fika);
120 SELF_CHECK (sv2 == "fika");
121
122 constexpr gdb::string_view sv3 (fika, 3);
123 SELF_CHECK (sv3 == "fik");
124
125 constexpr gdb::string_view sv4 (sv3);
126 SELF_CHECK (sv4 == "fik");
127
128 constexpr gdb::string_view::iterator it_begin = sv4.begin ();
129 static_assert (*it_begin == 'f', "");
130
131 constexpr gdb::string_view::iterator it_end = sv4.end ();
132 static_assert (*it_end == 'a', "");
133
134 const gdb::string_view::reverse_iterator it_rbegin = sv4.rbegin ();
135 SELF_CHECK (*it_rbegin == 'k');
136
137 const gdb::string_view::reverse_iterator it_rend = sv4.rend ();
138 SELF_CHECK (*(it_rend - 1) == 'f');
139
140 constexpr gdb::string_view::size_type size = sv4.size ();
141 static_assert (size == 3, "");
142
143 constexpr gdb::string_view::size_type length = sv4.length ();
144 static_assert (length == 3, "");
145
146 constexpr gdb::string_view::size_type max_size = sv4.max_size ();
147 static_assert (max_size > 0, "");
148
149 constexpr bool empty = sv4.empty ();
150 static_assert (!empty, "");
151
152 constexpr char c1 = sv4[1];
153 static_assert (c1 == 'i', "");
154
155 constexpr char c2 = sv4.at (2);
156 static_assert (c2 == 'k', "");
157
158 constexpr char front = sv4.front ();
159 static_assert (front == 'f', "");
160
161 constexpr char back = sv4.back ();
162 static_assert (back == 'k', "");
163
164 constexpr const char *data = sv4.data ();
165 static_assert (data == fika, "");
166}
167
168} /* namespace string_view */
169} /* namespace selftests */
170
171void
172_initialize_string_view_selftests ()
173{
174 selftests::register_test ("string_view", selftests::string_view::run_tests);
175}
176
177#endif /* __cplusplus < 201703L */
This page took 0.03889 seconds and 4 git commands to generate.