Skip to content

Commit 5a30fc8

Browse files
author
Hana Dusíková
committed
enable testing with GCC9
1 parent e8fc205 commit 5a30fc8

File tree

3 files changed

+132
-126
lines changed

3 files changed

+132
-126
lines changed

tests/matching3.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#include <ctre.hpp>
22
#include <string_view>
33

4-
#ifndef EXPERIMENTAL_GCC_9
5-
64
using namespace ctre::literals;
75
using namespace ctre::test_literals;
86
using namespace std::string_view_literals;
@@ -197,8 +195,6 @@ TEST_MATCH(112, "\\[\\]", "[]");
197195

198196

199197

200-
#endif
201-
202198

203199

204200

tests/parsing.cpp

Lines changed: 131 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -2,143 +2,152 @@
22

33
using namespace ctre::test_literals;
44

5-
#ifndef EXPERIMENTAL_GCC_9
5+
#ifndef EXPERIMENTAL_GCC_9 // fixed
6+
#define CTRE_TEST(pattern) (pattern ## _ctre_test)
7+
#else
8+
9+
template <ctll::basic_fixed_string input> constexpr bool test() {
10+
constexpr auto _input = input;
11+
return ctll::parser<ctre::pcre, _input>::correct;
12+
}
13+
14+
#define CTRE_TEST(pattern) test<pattern>()
15+
#endif
16+
617

718
// basics
8-
static_assert(""_ctre_test);
9-
static_assert("."_ctre_test);
10-
static_assert("a"_ctre_test);
11-
static_assert("ab"_ctre_test);
12-
static_assert("a|b"_ctre_test);
13-
static_assert("n"_ctre_test);
19+
static_assert(CTRE_TEST(""));
20+
static_assert(CTRE_TEST("."));
21+
static_assert(CTRE_TEST("a"));
22+
static_assert(CTRE_TEST("ab"));
23+
static_assert(CTRE_TEST("a|b"));
24+
static_assert(CTRE_TEST("n"));
1425

1526
// repetation
16-
static_assert("x?"_ctre_test); // optional
17-
static_assert("x??"_ctre_test); // optional lazy
18-
static_assert("x*"_ctre_test);
19-
static_assert("x*+"_ctre_test);
20-
static_assert("x*?"_ctre_test);
21-
static_assert("x+"_ctre_test);
22-
static_assert("x++"_ctre_test);
23-
static_assert("x+?"_ctre_test);
24-
static_assert("x{1}"_ctre_test);
25-
static_assert("x{1,4}"_ctre_test);
26-
static_assert("x{1,4}+"_ctre_test);
27-
static_assert("x{1,4}?"_ctre_test);
28-
static_assert("x{1,}"_ctre_test);
29-
static_assert("x{1,}+"_ctre_test);
30-
static_assert("x{1,}?"_ctre_test);
27+
static_assert(CTRE_TEST("x?")); // optional
28+
static_assert(CTRE_TEST("x??")); // optional lazy
29+
static_assert(CTRE_TEST("x*"));
30+
static_assert(CTRE_TEST("x*+"));
31+
static_assert(CTRE_TEST("x*?"));
32+
static_assert(CTRE_TEST("x+"));
33+
static_assert(CTRE_TEST("x++"));
34+
static_assert(CTRE_TEST("x+?"));
35+
static_assert(CTRE_TEST("x{1}"));
36+
static_assert(CTRE_TEST("x{1,4}"));
37+
static_assert(CTRE_TEST("x{1,4}+"));
38+
static_assert(CTRE_TEST("x{1,4}?"));
39+
static_assert(CTRE_TEST("x{1,}"));
40+
static_assert(CTRE_TEST("x{1,}+"));
41+
static_assert(CTRE_TEST("x{1,}?"));
3142

3243
// character sets
33-
static_assert("[abc]"_ctre_test); // [abc]
34-
static_assert("[a-c]"_ctre_test); // [abc]
35-
static_assert("[a-ce-g]"_ctre_test); // [abcefg]
36-
static_assert("[xa-c]"_ctre_test); // [xabc]
37-
static_assert("[a-cy]"_ctre_test); // [abcy]
38-
static_assert("\\d"_ctre_test); // digit
39-
static_assert("\\D"_ctre_test); // non-digit
40-
static_assert("\\s"_ctre_test); // whitespace
41-
static_assert("\\S"_ctre_test); // non-whitespace
42-
static_assert("\\w"_ctre_test); // word character
43-
static_assert("\\W"_ctre_test); // non-word character
44+
static_assert(CTRE_TEST("[abc]")); // [abc]
45+
static_assert(CTRE_TEST("[a-c]")); // [abc]
46+
static_assert(CTRE_TEST("[a-ce-g]")); // [abcefg]
47+
static_assert(CTRE_TEST("[xa-c]")); // [xabc]
48+
static_assert(CTRE_TEST("[a-cy]")); // [abcy]
49+
static_assert(CTRE_TEST("\\d")); // digit
50+
static_assert(CTRE_TEST("\\D")); // non-digit
51+
static_assert(CTRE_TEST("\\s")); // whitespace
52+
static_assert(CTRE_TEST("\\S")); // non-whitespace
53+
static_assert(CTRE_TEST("\\w")); // word character
54+
static_assert(CTRE_TEST("\\W")); // non-word character
4455

4556
// assertions
46-
static_assert("^"_ctre_test);
47-
static_assert("$"_ctre_test);
57+
static_assert(CTRE_TEST("^"));
58+
static_assert(CTRE_TEST("$"));
4859

4960
// special characters
50-
static_assert("\\n"_ctre_test); // new line
51-
static_assert("\\r"_ctre_test); // return carriage
52-
static_assert("\\t"_ctre_test); // tab
53-
static_assert("\\0"_ctre_test); // NULL
54-
static_assert("\\xAB"_ctre_test);
55-
static_assert("\\x{A}"_ctre_test);
56-
static_assert("\\x{ABCDEF}"_ctre_test);
57-
static_assert(not "\\x{ABCDEFG}"_ctre_test);
61+
static_assert(CTRE_TEST("\\n")); // new line
62+
static_assert(CTRE_TEST("\\r")); // return carriage
63+
static_assert(CTRE_TEST("\\t")); // tab
64+
static_assert(CTRE_TEST("\\0")); // NULL
65+
static_assert(CTRE_TEST("\\xAB"));
66+
static_assert(CTRE_TEST("\\x{A}"));
67+
static_assert(CTRE_TEST("\\x{ABCDEF}"));
68+
static_assert(not CTRE_TEST("\\x{ABCDEFG}"));
5869

5970
// named sets
60-
static_assert("[[:alpha:][:digit:]]"_ctre_test);
61-
static_assert("[^[:alpha:][:digit:]]"_ctre_test);
62-
static_assert("[[:^alpha:][:^digit:]]"_ctre_test);
63-
static_assert("[[:alpha:][:digit:]]+"_ctre_test);
71+
static_assert(CTRE_TEST("[[:alpha:][:digit:]]"));
72+
static_assert(CTRE_TEST("[^[:alpha:][:digit:]]"));
73+
static_assert(CTRE_TEST("[[:^alpha:][:^digit:]]"));
74+
static_assert(CTRE_TEST("[[:alpha:][:digit:]]+"));
6475

6576
// captures
66-
static_assert("<not capture>"_ctre_test);
67-
static_assert("(nonname)"_ctre_test);
68-
static_assert("(non<name>)"_ctre_test);
69-
static_assert("(?:noncapture)"_ctre_test);
70-
static_assert("(?:non<cap>ture)"_ctre_test);
71-
static_assert("(?<hello>:named)"_ctre_test);
77+
static_assert(CTRE_TEST("<not capture>"));
78+
static_assert(CTRE_TEST("(nonname)"));
79+
static_assert(CTRE_TEST("(non<name>)"));
80+
static_assert(CTRE_TEST("(?:noncapture)"));
81+
static_assert(CTRE_TEST("(?:non<cap>ture)"));
82+
static_assert(CTRE_TEST("(?<hello>:named)"));
7283

7384
// LIBC++ tests
74-
static_assert(""_ctre_test);
75-
static_assert("(.*).*"_ctre_test);
76-
//static_assert("(?=^)b"_ctre_test); // positive lookahead
77-
static_assert("(a*)*"_ctre_test);
78-
static_assert("(ab)*c"_ctre_test);
79-
static_assert("(tour|to|t)+"_ctre_test);
80-
static_assert("(tour|to|tournament)+"_ctre_test);
81-
static_assert("(tour|to|tournament)+\ntourna"_ctre_test);
82-
static_assert("-.*,.*-"_ctre_test);
83-
84-
static_assert("-\\(.*\\),\\1-"_ctre_test);
85-
static_assert("A[[:lower:]]B"_ctre_test);
86-
static_assert("A[^[:lower:]0-9]B"_ctre_test);
87-
static_assert("A[^[:lower:]]B"_ctre_test);
88-
//static_assert("Jeff(?!s\\b)"_ctre_test); // negative lookahead
89-
//static_assert("Jeff(?=s\\b)"_ctre_test); // positive lookahead
90-
static_assert("[\\n]+"_ctre_test);
91-
static_assert("[^\\0]*"_ctre_test);
92-
static_assert("[^\\W]"_ctre_test);
93-
//static_assert("[a[.ch.]z]"_ctre_test);
94-
//static_assert("[a[.hyphen.]z]"_ctre_test);
95-
//static_assert("[a[=M=]z]"_ctre_test);
96-
static_assert("[abfor]*"_ctre_test);
97-
static_assert("[ace1-9]*"_ctre_test);
98-
static_assert("[ace1-9]+"_ctre_test);
99-
static_assert("[ace1-9]\\{1,\\}"_ctre_test);
100-
static_assert("[ace1-9]{1,}"_ctre_test);
101-
static_assert("\\(.*\\).*"_ctre_test);
102-
static_assert("\\(a*\\)*"_ctre_test);
103-
static_assert("\\(ab\\)*c"_ctre_test);
104-
static_assert("\\d[\\W]k"_ctre_test);
105-
static_assert("^[a-f]$"_ctre_test);
106-
static_assert("^[a]$"_ctre_test);
107-
static_assert("^[ab]$"_ctre_test);
108-
static_assert("^abc"_ctre_test);
109-
static_assert("a"_ctre_test);
110-
//static_assert("a(?=^)b"_ctre_test); // positive lookahead
111-
static_assert("a*"_ctre_test);
112-
static_assert("a*?"_ctre_test);
113-
static_assert("a.\\{3,5\\}c"_ctre_test);
114-
static_assert("a.c"_ctre_test);
115-
static_assert("a.{3,5}c"_ctre_test);
116-
static_assert("a\\{100000000000000000\\}"_ctre_test);
117-
static_assert("ab"_ctre_test);
118-
static_assert("ab*c"_ctre_test);
119-
static_assert("ab\\{3,5\\}c"_ctre_test);
120-
static_assert("abc$"_ctre_test);
121-
static_assert("ab{3,5}c"_ctre_test);
122-
static_assert("a{100000000000000000}"_ctre_test);
123-
static_assert("b*"_ctre_test);
124-
static_assert("ba"_ctre_test);
125-
static_assert("bc"_ctre_test);
126-
static_assert("cd((e)fg)hi"_ctre_test);
127-
static_assert("cd((e)fg)hi|(z)"_ctre_test);
128-
static_assert("cd\\(\\(e\\)fg\\)hi"_ctre_test);
129-
static_assert("cdefghi"_ctre_test);
130-
static_assert("q[^u]"_ctre_test);
131-
static_assert("tour\n\ntournament"_ctre_test);
132-
static_assert("tour\nto\ntournament"_ctre_test);
133-
static_assert("tour|to|tournament"_ctre_test);
134-
static_assert("z"_ctre_test);
135-
static_assert("=!"_ctre_test);
136-
static_assert("[=!]"_ctre_test);
137-
static_assert("(=!)"_ctre_test);
138-
static_assert("(?!test)"_ctre_test);
139-
static_assert("(?=test)"_ctre_test);
140-
static_assert("^(?=.*(.)\\g{1}+.*)[a-z]+"_ctre_test);
141-
static_assert("^(?=.*(a)\\g{1}.*)$"_ctre_test);
85+
static_assert(CTRE_TEST(""));
86+
static_assert(CTRE_TEST("(.*).*"));
87+
static_assert(CTRE_TEST("(?=^)b")); // positive lookahead
88+
static_assert(CTRE_TEST("(a*)*"));
89+
static_assert(CTRE_TEST("(ab)*c"));
90+
static_assert(CTRE_TEST("(tour|to|t)+"));
91+
static_assert(CTRE_TEST("(tour|to|tournament)+"));
92+
static_assert(CTRE_TEST("(tour|to|tournament)+\ntourna"));
93+
static_assert(CTRE_TEST("-.*,.*-"));
14294

95+
static_assert(CTRE_TEST("-\\(.*\\),\\1-"));
96+
static_assert(CTRE_TEST("A[[:lower:]]B"));
97+
static_assert(CTRE_TEST("A[^[:lower:]0-9]B"));
98+
static_assert(CTRE_TEST("A[^[:lower:]]B"));
99+
//static_assert(CTRE_TEST("Jeff(?!s\\b)")); // negative lookahead
100+
//static_assert(CTRE_TEST("Jeff(?=s\\b)")); // positive lookahead
101+
static_assert(CTRE_TEST("[\\n]+"));
102+
static_assert(CTRE_TEST("[^\\0]*"));
103+
static_assert(CTRE_TEST("[^\\W]"));
104+
//static_assert(CTRE_TEST("[a[.ch.]z]"));
105+
//static_assert(CTRE_TEST("[a[.hyphen.]z]"));
106+
//static_assert(CTRE_TEST("[a[=M=]z]"));
107+
static_assert(CTRE_TEST("[abfor]*"));
108+
static_assert(CTRE_TEST("[ace1-9]*"));
109+
static_assert(CTRE_TEST("[ace1-9]+"));
110+
static_assert(CTRE_TEST("[ace1-9]\\{1,\\}"));
111+
static_assert(CTRE_TEST("[ace1-9]{1,}"));
112+
static_assert(CTRE_TEST("\\(.*\\).*"));
113+
static_assert(CTRE_TEST("\\(a*\\)*"));
114+
static_assert(CTRE_TEST("\\(ab\\)*c"));
115+
static_assert(CTRE_TEST("\\d[\\W]k"));
116+
static_assert(CTRE_TEST("^[a-f]$"));
117+
static_assert(CTRE_TEST("^[a]$"));
118+
static_assert(CTRE_TEST("^[ab]$"));
119+
static_assert(CTRE_TEST("^abc"));
120+
static_assert(CTRE_TEST("a"));
121+
static_assert(CTRE_TEST("a(?=^)b")); // positive lookahead
122+
static_assert(CTRE_TEST("a*"));
123+
static_assert(CTRE_TEST("a*?"));
124+
static_assert(CTRE_TEST("a.\\{3,5\\}c"));
125+
static_assert(CTRE_TEST("a.c"));
126+
static_assert(CTRE_TEST("a.{3,5}c"));
127+
static_assert(CTRE_TEST("a\\{100000000000000000\\}"));
128+
static_assert(CTRE_TEST("ab"));
129+
static_assert(CTRE_TEST("ab*c"));
130+
static_assert(CTRE_TEST("ab\\{3,5\\}c"));
131+
static_assert(CTRE_TEST("abc$"));
132+
static_assert(CTRE_TEST("ab{3,5}c"));
133+
static_assert(CTRE_TEST("a{100000000000000000}"));
134+
static_assert(CTRE_TEST("b*"));
135+
static_assert(CTRE_TEST("ba"));
136+
static_assert(CTRE_TEST("bc"));
137+
static_assert(CTRE_TEST("cd((e)fg)hi"));
138+
static_assert(CTRE_TEST("cd((e)fg)hi|(z)"));
139+
static_assert(CTRE_TEST("cd\\(\\(e\\)fg\\)hi"));
140+
static_assert(CTRE_TEST("cdefghi"));
141+
static_assert(CTRE_TEST("q[^u]"));
142+
static_assert(CTRE_TEST("tour\n\ntournament"));
143+
static_assert(CTRE_TEST("tour\nto\ntournament"));
144+
static_assert(CTRE_TEST("tour|to|tournament"));
145+
static_assert(CTRE_TEST("z"));
146+
static_assert(CTRE_TEST("=!"));
147+
static_assert(CTRE_TEST("[=!]"));
148+
static_assert(CTRE_TEST("(=!)"));
149+
static_assert(CTRE_TEST("(?!test)"));
150+
static_assert(CTRE_TEST("(?=test)"));
151+
static_assert(CTRE_TEST("^(?=.*(.)\\g{1}+.*)[a-z]+"));
152+
static_assert(CTRE_TEST("^(?=.*(a)\\g{1}.*)$"));
143153

144-
#endif

tests/trampoline.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "ctre.hpp"
22

3+
// GCC9 is crashing with ICE on trampolining mechanism
34
#ifndef EXPERIMENTAL_GCC_9
45

56
static constexpr inline auto pattern = ctll::basic_fixed_string{"(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"};

0 commit comments

Comments
 (0)