| #!/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. |
| |
| set -e |
| |
| # cd to the directory containing this crate's Cargo.toml so that we don't need |
| # to pass --manifest-path to every `cargo` command. |
| cd "$(dirname "$0")" |
| |
| echo "===== ALL FEATURES TEST ===" |
| cargo test --all-features |
| |
| # 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 f in "${features[@]}"; do |
| echo "===== LIB FEATURES: $f ===" |
| # 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. |
| cargo build --no-default-features --lib --features "$f" |
| cargo test --no-default-features --lib --features "$f" |
| 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 f in "${features[@]}"; do |
| echo "===== INTEGRATION FEATURES: $f ===" |
| cargo build --no-default-features --lib --features "$f" |
| cargo test --no-default-features --test integration --features "$f" |
| done |