refactor tests

This commit is contained in:
Kangzhi Shi
2022-08-09 16:44:47 +02:00
committed by Steve Shi
parent c31462d51b
commit c15387e972
3 changed files with 26 additions and 27 deletions

View File

@@ -33,7 +33,7 @@ pattern_pattern = re.compile(r"^((\s*)\/\/\s*pattern\s+(\w+)\s+=\s+(.+?))$(?:.+?
def replace_compiled(m):
line, indent, varname, pattern = m.groups()
pattern = eval(pattern, {"re": CompiledPattern})
pattern = f"Pattern {{ code: &{json.dumps(pattern.code)}, flags: SreFlag::from_bits_truncate({int(pattern.flags)}) }}"
pattern = f"Pattern {{ code: &{json.dumps(pattern.code)} }}"
return f'''{line}
{indent}// START GENERATED by generate_tests.py
{indent}#[rustfmt::skip] let {varname} = {pattern};

View File

@@ -81,7 +81,7 @@ pub struct State<'a, S: StrDrive> {
pub string_position: usize,
next_context: Option<MatchContext<'a, S>>,
popped_has_matched: bool,
has_matched: bool,
pub has_matched: bool,
}
impl<'a, S: StrDrive> State<'a, S> {
@@ -696,7 +696,7 @@ fn op_repeat<'a, S: StrDrive>(
state.string_position = ctx.string_position;
let repeat_ctx_id = state.repeat_stack.len();
let repeat_ctx_id = state.repeat_stack.len() - 1;
// let next_ctx = next_ctx!(from 1, state, ctx, |state, ctx| {
let next_ctx = ctx.next_from(1, req, state, |req, state, ctx| {

View File

@@ -1,18 +1,17 @@
use sre_engine::constants::SreFlag;
use sre_engine::engine;
struct Pattern {
code: &'static [u32],
flags: SreFlag,
}
impl Pattern {
fn state<'a, S: engine::StrDrive>(
&self,
string: S,
range: std::ops::Range<usize>,
) -> engine::State<'a, S> {
engine::State::new(string, range.start, range.end, self.flags, self.code)
) -> (engine::Request<'a, S>, engine::State<'a, S>) {
let req = engine::Request::new(string, 0, usize::MAX, self.code, false);
let state = engine::State::new(0);
(req, state)
}
}
@@ -20,10 +19,10 @@ impl Pattern {
fn test_2427() {
// pattern lookbehind = re.compile(r'(?<!\.)x\b')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let lookbehind = Pattern { code: &[15, 4, 0, 1, 1, 5, 5, 1, 17, 46, 1, 17, 120, 6, 10, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let lookbehind = Pattern { code: &[15, 4, 0, 1, 1, 5, 5, 1, 17, 46, 1, 17, 120, 6, 10, 1] };
// END GENERATED
let mut state = lookbehind.state("x", 0..usize::MAX);
state.pymatch();
let (mut req, mut state) = lookbehind.state("x");
state.pymatch(&mut req);
assert!(state.has_matched);
}
@@ -31,10 +30,10 @@ fn test_2427() {
fn test_assert() {
// pattern positive_lookbehind = re.compile(r'(?<=abc)def')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let positive_lookbehind = Pattern { code: &[15, 4, 0, 3, 3, 4, 9, 3, 17, 97, 17, 98, 17, 99, 1, 17, 100, 17, 101, 17, 102, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let positive_lookbehind = Pattern { code: &[15, 4, 0, 3, 3, 4, 9, 3, 17, 97, 17, 98, 17, 99, 1, 17, 100, 17, 101, 17, 102, 1] };
// END GENERATED
let mut state = positive_lookbehind.state("abcdef", 0..usize::MAX);
state.search();
let (mut req, mut state) = positive_lookbehind.state("abcdef");
state.search(&mut req);
assert!(state.has_matched);
}
@@ -42,10 +41,10 @@ fn test_assert() {
fn test_string_boundaries() {
// pattern big_b = re.compile(r'\B')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let big_b = Pattern { code: &[15, 4, 0, 0, 0, 6, 11, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let big_b = Pattern { code: &[15, 4, 0, 0, 0, 6, 11, 1] };
// END GENERATED
let mut state = big_b.state("", 0..usize::MAX);
state.search();
let (mut req, mut state) = big_b.state("");
state.search(&mut req);
assert!(!state.has_matched);
}
@@ -53,11 +52,11 @@ fn test_string_boundaries() {
fn test_zerowidth() {
// pattern p = re.compile(r'\b|:+')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 7, 5, 6, 10, 16, 12, 10, 25, 6, 1, 4294967295, 17, 58, 1, 16, 2, 0, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 7, 5, 6, 10, 16, 12, 10, 25, 6, 1, 4294967295, 17, 58, 1, 16, 2, 0, 1] };
// END GENERATED
let mut state = p.state("a:", 0..usize::MAX);
state.must_advance = true;
state.search();
let (mut req, mut state) = p.state("a:");
req.must_advance = true;
state.search(&mut req);
assert!(state.string_position == 1);
}
@@ -65,10 +64,10 @@ fn test_zerowidth() {
fn test_repeat_context_panic() {
// pattern p = re.compile(r'(?:a*?(xx)??z)*')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 24, 25, 0, 4294967295, 27, 6, 0, 4294967295, 17, 97, 1, 24, 11, 0, 1, 18, 0, 17, 120, 17, 120, 18, 1, 20, 17, 122, 19, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 24, 25, 0, 4294967295, 27, 6, 0, 4294967295, 17, 97, 1, 24, 11, 0, 1, 18, 0, 17, 120, 17, 120, 18, 1, 20, 17, 122, 19, 1] };
// END GENERATED
let mut state = p.state("axxzaz", 0..usize::MAX);
state.pymatch();
let (mut req, mut state) = p.state("axxzaz");
state.pymatch(&mut req);
assert!(state.marks == vec![Some(1), Some(3)]);
}
@@ -76,9 +75,9 @@ fn test_repeat_context_panic() {
fn test_double_max_until() {
// pattern p = re.compile(r'((1)?)*')
// START GENERATED by generate_tests.py
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 24, 18, 0, 4294967295, 18, 0, 24, 9, 0, 1, 18, 2, 17, 49, 18, 3, 19, 18, 1, 19, 1], flags: SreFlag::from_bits_truncate(32) };
#[rustfmt::skip] let p = Pattern { code: &[15, 4, 0, 0, 4294967295, 24, 18, 0, 4294967295, 18, 0, 24, 9, 0, 1, 18, 2, 17, 49, 18, 3, 19, 18, 1, 19, 1] };
// END GENERATED
let mut state = p.state("1111", 0..usize::MAX);
state.pymatch();
let (mut req, mut state) = p.state("1111");
state.pymatch(&mut req);
assert!(state.string_position == 4);
}