diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-06 12:15:52 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-06 12:15:52 +0200 |
| commit | 53980774c327675e886179c0a2c140744dcf9b95 (patch) | |
| tree | ca1fdcc9938fce2c10c51e0a51659c6ba38ac5ba /tests | |
| parent | 75e0c29cf91ddc6299c14a94a038c3e3df3d2805 (diff) | |
| download | pish-53980774c327675e886179c0a2c140744dcf9b95.tar.gz | |
special cased regex for performance
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/common.rs | 34 | ||||
| -rwxr-xr-x | tests/regex-gen.sh | 6 |
2 files changed, 9 insertions, 31 deletions
diff --git a/tests/common.rs b/tests/common.rs index ba4b292..0523906 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -1,9 +1,8 @@ #![allow(unused)] -use pish::parse::{ - Parse, - regex::{CompiledPattern, Pattern, bc::BytecodeCompiledRegex}, -}; +use pish::parse::Parse; +use pish::regex::{AllEngines, Pattern}; +pub use pish::regex::RegexEngine; pub fn test_case(_name: &str, script: &[u8], expected_output: &[u8]) { use pish::parse::Parse; @@ -30,28 +29,7 @@ pub fn test_case(_name: &str, script: &[u8], expected_output: &[u8]) { ); } -pub struct MultiTestCompiledPattern { - dfa: CompiledPattern, - vm: BytecodeCompiledRegex, -} - -impl MultiTestCompiledPattern { - pub fn matches(&self, string: impl Clone + AsRef<[u8]>) -> bool { - let dfa_result = self.dfa.matches(string.clone()); - let vm_result = self.vm.matches(string.as_ref()); - assert_eq!(dfa_result, vm_result); - dfa_result - } -} - -pub fn regex(pat: &str) -> MultiTestCompiledPattern { - let parsed = - Pattern::parse_from_bytes(pat.as_bytes()).expect(&format!("pattern {pat} does not parse")); - let dfa = parsed - .clone() - .try_compile() - .expect(&format!("pattern {pat} does not compile to DFA")); - let vm = BytecodeCompiledRegex::try_from(parsed.clone()) - .expect(&format!("pattern {pat} does not compile to VM")); - MultiTestCompiledPattern { dfa, vm } +pub fn regex(pat: &str) -> impl RegexEngine { + let parsed = Pattern::parse_from_bytes(pat.as_bytes()).expect(&format!("pattern {pat} does not parse")); + AllEngines::compile(parsed).unwrap() } diff --git a/tests/regex-gen.sh b/tests/regex-gen.sh index 8e2f0c8..ef5245a 100755 --- a/tests/regex-gen.sh +++ b/tests/regex-gen.sh @@ -8,7 +8,7 @@ cat <<"EOF" //! Generated by `tests/regex-gen.sh` -- do not modify directly. mod common; -use common::regex; +use common::{regex, RegexEngine}; EOF @@ -25,12 +25,12 @@ while IFS= read -r line; do jq -r --arg pat "$pattern" ' .accepts[] - | " assert!(re.matches(r#\"\(.)\"#), \"pattern: \($pat) | expected accept: \(. )\");" + | " assert!(re.matches(br#\"\(.)\"#), \"pattern: \($pat) | expected accept: \(. )\");" ' <<<"$line" jq -r --arg pat "$pattern" ' .rejects[] - | " assert!(!re.matches(r#\"\(.)\"#), \"pattern: \($pat) | expected reject: \(. )\");" + | " assert!(!re.matches(br#\"\(.)\"#), \"pattern: \($pat) | expected reject: \(. )\");" ' <<<"$line" echo "}" |
