1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/bash
# This is a script that attempts to *approximately* exhaustively run the test
# suite for regex-automata. The main reason for why 'cargo test' isn't enough
# is because of crate features. regex-automata has a ton of them. This script
# tests many of those feature combinations (although not all) to try to get
# decent coverage in a finite amount of time.
# cd to the directory containing this crate's Cargo.toml so that we don't need
# to pass --manifest-path to every `cargo` command.
# Man I don't *want* to have this many crate features, but... I really want
# folks to be able to slim the crate down to just the things they want. But
# the main downside is that I just can't feasibly test every combination of
# features because there are too many of them. Sad, but I'm not sure if there
# is a better alternative.
features=(
""
"unicode-word-boundary"
"unicode-word-boundary,syntax,unicode-perl"
"unicode-word-boundary,syntax,dfa-build"
"nfa"
"dfa"
"hybrid"
"nfa,dfa"
"nfa,hybrid"
"dfa,hybrid"
"dfa-onepass"
"nfa-pikevm"
"nfa-backtrack"
"std"
"alloc"
"syntax"
"syntax,nfa-pikevm"
"syntax,hybrid"
"perf-literal-substring"
"perf-literal-multisubstring"
"meta"
"meta,nfa-backtrack"
"meta,hybrid"
"meta,dfa-build"
"meta,dfa-onepass"
"meta,nfa,dfa,hybrid,nfa-backtrack"
"meta,nfa,dfa,hybrid,nfa-backtrack,perf-literal-substring"
"meta,nfa,dfa,hybrid,nfa-backtrack,perf-literal-multisubstring"
)
for; do
# It's actually important to do a standard 'cargo build' in addition to a
# 'cargo test'. In particular, in the latter case, the dev-dependencies may
# wind up enabling features in dependencies (like memchr) that make it look
# like everything is well, but actually isn't. For example, the 'regex-test'
# dev-dependency uses 'bstr' and enables its 'std' feature, which in turn
# unconditionally enables 'memchr's 'std' feature. Since we're specifically
# looking to test that certain feature combinations work as expected, this
# can lead to things testing okay, but would actually fail to build. Yikes.
done
# We can also run the integration test suite on stripped down features too.
# But the test suite doesn't do well with things like 'std' and 'unicode'
# disabled, so we always enable them.
features=(
"std,unicode,syntax,nfa-pikevm"
"std,unicode,syntax,nfa-backtrack"
"std,unicode,syntax,hybrid"
"std,unicode,syntax,dfa-onepass"
"std,unicode,syntax,dfa-search"
"std,unicode,syntax,dfa-build"
"std,unicode,meta"
# This one is a little tricky because it causes the backtracker to get used
# in more instances and results in failing tests for the 'earliest' tests.
# The actual results are semantically consistent with the API guarantee
# (the backtracker tends to report greater offsets because it isn't an FSM),
# but our tests are less flexible than the API guarantee and demand offsets
# reported by FSM regex engines. (Which is... all of them except for the
# backtracker.)
# "std,unicode,meta,nfa-backtrack"
"std,unicode,meta,hybrid"
"std,unicode,meta,dfa-onepass"
"std,unicode,meta,dfa-build"
"std,unicode,meta,nfa,dfa-onepass,hybrid"
)
for; do
done