// compat_back.rs - Integration tests ported from oniguruma test/test_back.c
//
// Uses backward search: onig_search with start=str+len, range=str
// (i.e., start=input.len(), range=0)
//
// Auto-generated by gen_back.py -- DO NOT EDIT
//
// Test counts: 893 x2, 88 x3, 219 n, 25 e = 1225 total
use ferroni::oniguruma::*;
use ferroni::regcomp::onig_new;
use ferroni::regexec::onig_search;
use ferroni::regsyntax::OnigSyntaxOniguruma;
fn x2(pattern: &[u8], input: &[u8], from: i32, to: i32) {
let reg = onig_new(
pattern,
ONIG_OPTION_NONE,
&ferroni::encodings::utf8::ONIG_ENCODING_UTF8,
&OnigSyntaxOniguruma,
)
.unwrap_or_else(|e| {
panic!(
"compile failed for {:?}: error {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
e
)
});
let (result, region) = onig_search(
®,
input,
input.len(),
input.len(),
0,
Some(OnigRegion::new()),
ONIG_OPTION_NONE,
);
assert!(
result >= 0,
"x2: no match for {:?} against {:?}, got {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
result
);
let region = region.unwrap();
assert_eq!(
region.beg[0],
from,
"x2: wrong start for {:?} against {:?}: expected {}, got {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
from,
region.beg[0]
);
assert_eq!(
region.end[0],
to,
"x2: wrong end for {:?} against {:?}: expected {}, got {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
to,
region.end[0]
);
}
fn x3(pattern: &[u8], input: &[u8], from: i32, to: i32, mem: usize) {
let reg = onig_new(
pattern,
ONIG_OPTION_NONE,
&ferroni::encodings::utf8::ONIG_ENCODING_UTF8,
&OnigSyntaxOniguruma,
)
.unwrap_or_else(|e| {
panic!(
"compile failed for {:?}: error {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
e
)
});
let (result, region) = onig_search(
®,
input,
input.len(),
input.len(),
0,
Some(OnigRegion::new()),
ONIG_OPTION_NONE,
);
assert!(
result >= 0,
"x3: no match for {:?} against {:?}, got {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
result
);
let region = region.unwrap();
assert!(
mem < region.num_regs as usize,
"x3: group {} not captured for {:?} (num_regs={})",
mem,
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
region.num_regs
);
assert_eq!(
region.beg[mem],
from,
"x3: wrong start for group {} of {:?}: expected {}, got {}",
mem,
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
from,
region.beg[mem]
);
assert_eq!(
region.end[mem],
to,
"x3: wrong end for group {} of {:?}: expected {}, got {}",
mem,
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
to,
region.end[mem]
);
}
fn n(pattern: &[u8], input: &[u8]) {
let reg = onig_new(
pattern,
ONIG_OPTION_NONE,
&ferroni::encodings::utf8::ONIG_ENCODING_UTF8,
&OnigSyntaxOniguruma,
)
.unwrap_or_else(|e| {
panic!(
"compile failed for {:?}: error {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
e
)
});
let (result, _) = onig_search(
®,
input,
input.len(),
input.len(),
0,
Some(OnigRegion::new()),
ONIG_OPTION_NONE,
);
assert_eq!(
result,
ONIG_MISMATCH,
"n: expected no match for {:?} against {:?}, got {}",
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
result
);
}
#[allow(dead_code)]
fn e(pattern: &[u8], input: &[u8], expected_error: i32) {
let result = onig_new(
pattern,
ONIG_OPTION_NONE,
&ferroni::encodings::utf8::ONIG_ENCODING_UTF8,
&OnigSyntaxOniguruma,
);
match result {
Err(code) => {
assert_eq!(
code.code(),
expected_error,
"e: expected error {} for {:?} against {:?}, got error {}",
expected_error,
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
code.code()
);
}
Ok(reg) => {
// Compilation succeeded, try search - some errors happen at match time
let (result, _) = onig_search(
®,
input,
input.len(),
input.len(),
0,
Some(OnigRegion::new()),
ONIG_OPTION_NONE,
);
assert_eq!(
result,
expected_error,
"e: expected error {} for {:?} against {:?}, but got result {}",
expected_error,
std::str::from_utf8(pattern).unwrap_or("<invalid>"),
std::str::from_utf8(input).unwrap_or("<invalid>"),
result
);
}
}
}
// ============================================================================
// Section 1: tests 1-50
// ============================================================================
#[test]
fn back_section_01() {
x2(b"", b"", 0, 0);
x2(b"^", b"", 0, 0);
x2(b"^a", b"\na", 1, 2);
x2(b"$", b"", 0, 0);
x2(b"$\\O", b"bb\n", 2, 3);
x2(b"\\G", b"", 0, 0);
x2(b"\\A", b"", 0, 0);
x2(b"\\Z", b"", 0, 0);
x2(b"\\z", b"", 0, 0);
x2(b"^$", b"", 0, 0);
x2(b"\\ca", b"\x01", 0, 1);
x2(b"\\C-b", b"\x02", 0, 1);
x2(b"\\c\\\\", b"\x1c", 0, 1);
x2(b"q[\\c\\\\]", b"q\x1c", 0, 2);
x2(b"", b"a", 1, 1);
x2(b"a", b"a", 0, 1);
x2(b"\\x61", b"a", 0, 1);
x2(b"aa", b"aa", 0, 2);
x2(b"aaa", b"aaa", 0, 3);
x2(
b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
0,
35,
);
x2(b"ab", b"ab", 0, 2);
x2(b"b", b"ab", 1, 2);
x2(b"bc", b"abc", 1, 3);
x2(b"(?i:#RET#)", b"#INS##RET#", 5, 10);
x2(b"\\17", b"\x0f", 0, 1);
x2(b"\\x1f", b"\x1f", 0, 1);
x2(b"a(?#....\\\\JJJJ)b", b"ab", 0, 2);
x2(b"(?x) G (o O(?-x)oO) g L", b"GoOoOgLe", 0, 7);
x2(b".", b"a", 0, 1);
n(b".", b"");
x2(b"..", b"ab", 0, 2);
x2(b"\\w", b"e", 0, 1);
n(b"\\W", b"e");
x2(b"\\s", b" ", 0, 1);
x2(b"\\S", b"b", 0, 1);
x2(b"\\d", b"4", 0, 1);
n(b"\\D", b"4");
x2(b"\\b", b"z ", 1, 1);
x2(b"\\b", b" z", 2, 2);
x2(b"\\b", b" z ", 3, 3);
x2(b"\\B", b"zz ", 3, 3);
x2(b"\\B", b"z ", 2, 2);
x2(b"\\B", b" z", 0, 0);
x2(b"[ab]", b"b", 0, 1);
n(b"[ab]", b"c");
x2(b"[a-z]", b"t", 0, 1);
n(b"[^a]", b"a");
x2(b"[^a]", b"\n", 0, 1);
x2(b"[]]", b"]", 0, 1);
n(b"[^]]", b"]");
}
// ============================================================================
// Section 2: tests 51-100
// ============================================================================
#[test]
fn back_section_02() {
x2(b"[\\^]+", b"0^^1", 2, 3);
x2(b"[b-]", b"b", 0, 1);
x2(b"[b-]", b"-", 0, 1);
x2(b"[\\w]", b"z", 0, 1);
n(b"[\\w]", b" ");
x2(b"[\\W]", b"b$", 1, 2);
x2(b"[\\d]", b"5", 0, 1);
n(b"[\\d]", b"e");
x2(b"[\\D]", b"t", 0, 1);
n(b"[\\D]", b"3");
x2(b"[\\s]", b" ", 0, 1);
n(b"[\\s]", b"a");
x2(b"[\\S]", b"b", 0, 1);
n(b"[\\S]", b" ");
x2(b"[\\w\\d]", b"2", 0, 1);
n(b"[\\w\\d]", b" ");
x2(b"[[:upper:]]", b"B", 0, 1);
x2(b"[*[:xdigit:]+]", b"+", 0, 1);
x2(b"[*[:xdigit:]+]", b"GHIKK-9+*", 8, 9);
x2(b"[*[:xdigit:]+]", b"-@^+", 3, 4);
n(b"[[:upper]]", b"A");
x2(b"[[:upper]]", b":", 0, 1);
x2(b"[\\044-\\047]", b"\x26", 0, 1);
x2(b"[\\x5a-\\x5c]", b"\x5b", 0, 1);
x2(b"[\\x6A-\\x6D]", b"\x6c", 0, 1);
n(b"[\\x6A-\\x6D]", b"\x6e");
n(
b"^[0-9A-F]+ 0+ UNDEF ",
b"75F 00000000 SECT14A notype () External | _rb_apply",
);
x2(b"[\\[]", b"[", 0, 1);
x2(b"[\\]]", b"]", 0, 1);
x2(b"[&]", b"&", 0, 1);
x2(b"[[ab]]", b"b", 0, 1);
x2(b"[[ab]c]", b"c", 0, 1);
n(b"[[^a]]", b"a");
n(b"[^[a]]", b"a");
x2(b"[[ab]&&bc]", b"b", 0, 1);
n(b"[[ab]&&bc]", b"a");
n(b"[[ab]&&bc]", b"c");
x2(b"[a-z&&b-y&&c-x]", b"w", 0, 1);
n(b"[^a-z&&b-y&&c-x]", b"w");
x2(b"[[^a&&a]&&a-z]", b"b", 0, 1);
n(b"[[^a&&a]&&a-z]", b"a");
x2(b"[[^a-z&&bcdef]&&[^c-g]]", b"h", 0, 1);
n(b"[[^a-z&&bcdef]&&[^c-g]]", b"c");
x2(b"[^[^abc]&&[^cde]]", b"c", 0, 1);
x2(b"[^[^abc]&&[^cde]]", b"e", 0, 1);
n(b"[^[^abc]&&[^cde]]", b"f");
x2(b"[a-&&-a]", b"-", 0, 1);
n(b"[a\\-&&\\-a]", b"&");
n(b"\\wabc", b" abc");
x2(b"a\\Wbc", b"a bc", 0, 4);
}
// ============================================================================
// Section 3: tests 101-150
// ============================================================================
#[test]
fn back_section_03() {
x2(b"a.b.c", b"aabbc", 0, 5);
x2(b".\\wb\\W..c", b"abb bcc", 0, 7);
x2(b"\\s\\wzzz", b" zzzz", 0, 5);
x2(b"aa.b", b"aabb", 0, 4);
n(b".a", b"ab");
x2(b".a", b"aa", 0, 2);
x2(b"^a", b"a", 0, 1);
x2(b"^a$", b"a", 0, 1);
x2(b"^\\w$", b"a", 0, 1);
n(b"^\\w$", b" ");
x2(b"^\\wab$", b"zab", 0, 3);
x2(b"^\\wabcdef$", b"zabcdef", 0, 7);
x2(b"^\\w...def$", b"zabcdef", 0, 7);
x2(b"\\w\\w\\s\\Waaa\\d", b"aa aaa4", 0, 8);
x2(b"\\A\\Z", b"", 0, 0);
x2(b"\\Axyz", b"xyz", 0, 3);
x2(b"xyz\\Z", b"xyz", 0, 3);
x2(b"xyz\\z", b"xyz", 0, 3);
x2(b"a\\Z", b"a", 0, 1);
n(b"\\Gaz", b"az");
n(b"\\Gz", b"bza");
x2(b"az\\G", b"az", 0, 2);
n(b"az\\A", b"az");
n(b"a\\Az", b"az");
x2(b"\\^\\$", b"^$", 0, 2);
x2(b"^x?y", b"xy", 0, 2);
x2(b"^(x?y)", b"xy", 0, 2);
x2(b"\\w", b"_", 0, 1);
n(b"\\W", b"_");
x2(b"(?=z)z", b"z", 0, 1);
n(b"(?=z).", b"a");
x2(b"(?!z)a", b"a", 0, 1);
n(b"(?!z)a", b"z");
x2(b"(?i:a)", b"a", 0, 1);
x2(b"(?i:a)", b"A", 0, 1);
x2(b"(?i:A)", b"a", 0, 1);
x2(b"(?i:i)", b"I", 0, 1);
x2(b"(?i:I)", b"i", 0, 1);
x2(b"(?i:[A-Z])", b"i", 0, 1);
x2(b"(?i:[a-z])", b"I", 0, 1);
n(b"(?i:A)", b"b");
x2(b"(?i:ss)", b"ss", 0, 2);
x2(b"(?i:ss)", b"Ss", 0, 2);
x2(b"(?i:ss)", b"SS", 0, 2);
x2(b"(?i:ss)", b"\xc5\xbfS", 0, 3);
x2(b"(?i:ss)", b"s\xc5\xbf", 0, 3);
x2(b"(?i:ss)", b"\xc3\x9f", 0, 2);
x2(b"(?i:ss)", b"\xe1\xba\x9e", 0, 3);
x2(b"(?i:xssy)", b"xssy", 0, 4);
x2(b"(?i:xssy)", b"xSsy", 0, 4);
}
// ============================================================================
// Section 4: tests 151-200
// ============================================================================
#[test]
fn back_section_04() {
x2(b"(?i:xssy)", b"xSSy", 0, 4);
x2(b"(?i:xssy)", b"x\xc5\xbfSy", 0, 5);
x2(b"(?i:xssy)", b"xs\xc5\xbfy", 0, 5);
x2(b"(?i:xssy)", b"x\xc3\x9fy", 0, 4);
x2(b"(?i:xssy)", b"x\xe1\xba\x9ey", 0, 5);
x2(b"(?i:x\xc3\x9fy)", b"xssy", 0, 4);
x2(b"(?i:x\xc3\x9fy)", b"xSSy", 0, 4);
x2(b"(?i:\xc3\x9f)", b"ss", 0, 2);
x2(b"(?i:\xc3\x9f)", b"SS", 0, 2);
x2(b"(?i:[\xc3\x9f])", b"ss", 0, 2);
x2(b"(?i:[\xc3\x9f])", b"SS", 0, 2);
x2(b"(?i)(?<!ss)z", b"qqz", 2, 3);
x2(b"(?i:[A-Z])", b"a", 0, 1);
x2(b"(?i:[f-m])", b"H", 0, 1);
x2(b"(?i:[f-m])", b"h", 0, 1);
n(b"(?i:[f-m])", b"e");
x2(b"(?i:[A-c])", b"D", 0, 1);
n(b"(?i:[^a-z])", b"A");
n(b"(?i:[^a-z])", b"a");
x2(b"(?i:[!-k])", b"Z", 0, 1);
x2(b"(?i:[!-k])", b"7", 0, 1);
x2(b"(?i:[T-}])", b"b", 0, 1);
x2(b"(?i:[T-}])", b"{", 0, 1);
x2(b"(?i:\\?a)", b"?A", 0, 2);
x2(b"(?i:\\*A)", b"*a", 0, 2);
n(b".", b"\n");
x2(b"(?m:.)", b"\n", 0, 1);
x2(b"(?m:a.)", b"a\n", 0, 2);
x2(b"(?m:.b)", b"a\nb", 1, 3);
x2(b".*abc", b"dddabdd\nddabc", 10, 13);
x2(b".+abc", b"dddabdd\nddabcaa\naaaabc", 18, 22);
x2(b"(?m:.*abc)", b"dddabddabc", 7, 10);
n(b"(?i)(?-i)a", b"A");
n(b"(?i)(?-i:a)", b"A");
x2(b"a?", b"", 0, 0);
x2(b"a?", b"b", 1, 1);
x2(b"a?", b"a", 1, 1);
x2(b"a*", b"", 0, 0);
x2(b"a*", b"a", 1, 1);
x2(b"a*", b"aaa", 3, 3);
x2(b"a*", b"baaaa", 5, 5);
n(b"a+", b"");
x2(b"a+", b"a", 0, 1);
x2(b"a+", b"aaaa", 3, 4);
x2(b"a+", b"aabbb", 1, 2);
x2(b"a+", b"baaaa", 4, 5);
x2(b".?", b"", 0, 0);
x2(b".?", b"f", 1, 1);
x2(b".?", b"\n", 1, 1);
x2(b".*", b"", 0, 0);
}
// ============================================================================
// Section 5: tests 201-250
// ============================================================================
#[test]
fn back_section_05() {
x2(b".*", b"abcde", 5, 5);
x2(b".+", b"z", 0, 1);
x2(b".+", b"zdswer\n", 5, 6);
x2(b"(.*)a\\1f", b"babfbac", 0, 4);
x2(b"(.*)a\\1f", b"bacbabf", 3, 7);
x2(b"((.*)a\\2f)", b"bacbabf", 3, 7);
x2(b"(.*)a\\1f", b"baczzzzzz\nbazz\nzzzzbabf", 19, 23);
x2(b"a|b", b"a", 0, 1);
x2(b"a|b", b"b", 0, 1);
x2(b"|a", b"a", 1, 1);
x2(b"(|a)", b"a", 1, 1);
x2(b"ab|bc", b"ab", 0, 2);
x2(b"ab|bc", b"bc", 0, 2);
x2(b"z(?:ab|bc)", b"zbc", 0, 3);
x2(b"a(?:ab|bc)c", b"aabc", 0, 4);
x2(b"ab|(?:ac|az)", b"az", 0, 2);
x2(b"a|b|c", b"dc", 1, 2);
x2(b"a|b|cd|efg|h|ijk|lmn|o|pq|rstuvwx|yz", b"pqr", 0, 2);
n(b"a|b|cd|efg|h|ijk|lmn|o|pq|rstuvwx|yz", b"mn");
x2(b"a|^z", b"ba", 1, 2);
x2(b"a|^z", b"za", 1, 2);
x2(b"a|\\Gz", b"bza", 2, 3);
x2(b"a|\\Gz", b"za", 1, 2);
x2(b"a|\\Az", b"bza", 2, 3);
x2(b"a|\\Az", b"za", 1, 2);
x2(b"a|b\\Z", b"ba", 1, 2);
x2(b"a|b\\Z", b"b", 0, 1);
x2(b"a|b\\z", b"ba", 1, 2);
x2(b"a|b\\z", b"b", 0, 1);
x2(b"\\w|\\s", b" ", 0, 1);
n(b"\\w|\\w", b" ");
x2(b"\\w|%", b"%", 0, 1);
x2(b"\\w|[&$]", b"&", 0, 1);
x2(b"[b-d]|[^e-z]", b"a", 0, 1);
x2(b"(?:a|[c-f])|bz", b"dz", 0, 1);
x2(b"(?:a|[c-f])|bz", b"bz", 0, 2);
x2(b"abc|(?=zz)..f", b"zzf", 0, 3);
x2(b"abc|(?!zz)..f", b"abf", 0, 3);
x2(b"(?=za)..a|(?=zz)..a", b"zza", 0, 3);
n(b"(?>a|abd)c", b"abdc");
x2(b"(?>abd|a)c", b"abdc", 0, 4);
x2(b"a?|b", b"a", 1, 1);
x2(b"a?|b", b"b", 1, 1);
x2(b"a?|b", b"", 0, 0);
x2(b"a*|b", b"aa", 2, 2);
x2(b"a*|b*", b"ba", 2, 2);
x2(b"a*|b*", b"ab", 2, 2);
x2(b"a+|b*", b"", 0, 0);
x2(b"a+|b*", b"bbb", 3, 3);
x2(b"a+|b*", b"abbb", 4, 4);
}
// ============================================================================
// Section 6: tests 251-300
// ============================================================================
#[test]
fn back_section_06() {
n(b"a+|b+", b"");
x2(b"(a|b)?", b"b", 1, 1);
x2(b"(a|b)*", b"ba", 2, 2);
x2(b"(a|b)+", b"bab", 2, 3);
x2(b"(ab|ca)+", b"caabbc", 2, 4);
x2(b"(ab|ca)+", b"aabca", 3, 5);
x2(b"(ab|ca)+", b"abzca", 3, 5);
x2(b"(a|bab)+", b"ababa", 4, 5);
x2(b"(a|bab)+", b"ba", 1, 2);
x2(b"(a|bab)+", b"baaaba", 5, 6);
x2(b"(?:a|b)(?:a|b)", b"ab", 0, 2);
x2(b"(?:a*|b*)(?:a*|b*)", b"aaabbb", 6, 6);
x2(b"(?:a*|b*)(?:a+|b+)", b"aaabbb", 5, 6);
x2(b"(?:a+|b+){2}", b"aaabbb", 4, 6);
x2(b"h{0,}", b"hhhh", 4, 4);
x2(b"(?:a+|b+){1,2}", b"aaabbb", 5, 6);
n(b"ax{2}*a", b"0axxxa1");
n(b"a.{0,2}a", b"0aXXXa0");
n(b"a.{0,2}?a", b"0aXXXa0");
n(b"a.{0,2}?a", b"0aXXXXa0");
x2(b"^a{2,}?a$", b"aaa", 0, 3);
x2(b"^[a-z]{2,}?$", b"aaa", 0, 3);
x2(b"(?:a+|\\Ab*)cc", b"cc", 0, 2);
n(b"(?:a+|\\Ab*)cc", b"abcc");
x2(b"(?:^a+|b+)*c", b"aabbbabc", 7, 8);
x2(b"(?:^a+|b+)*c", b"aabbbbc", 6, 7);
x2(b"a|(?i)c", b"C", 0, 1);
x2(b"(?i)c|a", b"C", 0, 1);
x2(b"(?i)c|a", b"A", 0, 1);
x2(b"a(?i)b|c", b"aB", 0, 2);
x2(b"a(?i)b|c", b"aC", 0, 2);
n(b"a(?i)b|c", b"AC");
n(b"a(?:(?i)b)|c", b"aC");
x2(b"(?i:c)|a", b"C", 0, 1);
n(b"(?i:c)|a", b"A");
x2(b"[abc]?", b"abc", 3, 3);
x2(b"[abc]*", b"abc", 3, 3);
x2(b"[^abc]*", b"abc", 3, 3);
n(b"[^abc]+", b"abc");
x2(b"a??", b"aaa", 3, 3);
x2(b"ba??b", b"bab", 0, 3);
x2(b"a*?", b"aaa", 3, 3);
x2(b"ba*?", b"baa", 0, 1);
x2(b"ba*?b", b"baab", 0, 4);
x2(b"a+?", b"aaa", 2, 3);
x2(b"ba+?", b"baa", 0, 2);
x2(b"ba+?b", b"baab", 0, 4);
x2(b"(?:a?)??", b"a", 1, 1);
x2(b"(?:a??)?", b"a", 1, 1);
x2(b"(?:a?)+?", b"aaa", 3, 3);
}
// ============================================================================
// Section 7: tests 301-350
// ============================================================================
#[test]
fn back_section_07() {
x2(b"(?:a+)??", b"aaa", 3, 3);
x2(b"(?:a+)??b", b"aaab", 3, 4);
x2(b"(?:ab)?{2}", b"", 0, 0);
x2(b"(?:ab)?{2}", b"ababa", 5, 5);
x2(b"(?:ab)*{0}", b"ababa", 5, 5);
x2(b"(?:ab){3,}", b"abababab", 2, 8);
n(b"(?:ab){3,}", b"abab");
x2(b"(?:ab){2,4}", b"ababab", 2, 6);
x2(b"(?:ab){2,4}", b"ababababab", 6, 10);
x2(b"(?:ab){2,4}?", b"ababababab", 6, 10);
x2(b"(?:ab){,}", b"ab{,}", 0, 5);
x2(b"(?:abc)+?{2}", b"abcabcabc", 3, 9);
x2(b"(?:X*)(?i:xa)", b"XXXa", 2, 4);
x2(b"(d+)([^abc]z)", b"dddz", 1, 4);
x2(b"([^abc]*)([^abc]z)", b"dddz", 2, 4);
x2(b"(\\w+)(\\wz)", b"dddz", 1, 4);
x3(b"(a)", b"a", 0, 1, 1);
x3(b"(ab)", b"ab", 0, 2, 1);
x2(b"((ab))", b"ab", 0, 2);
x3(b"((ab))", b"ab", 0, 2, 1);
x3(b"((ab))", b"ab", 0, 2, 2);
x3(
b"((((((((((((((((((((ab))))))))))))))))))))",
b"ab",
0,
2,
20,
);
x3(b"(ab)(cd)", b"abcd", 0, 2, 1);
x3(b"(ab)(cd)", b"abcd", 2, 4, 2);
x3(b"()(a)bc(def)ghijk", b"abcdefghijk", 3, 6, 3);
x3(b"(()(a)bc(def)ghijk)", b"abcdefghijk", 3, 6, 4);
x2(b"(^a)", b"a", 0, 1);
x3(b"(a)|(a)", b"ba", 1, 2, 1);
x3(b"(^a)|(a)", b"ba", 1, 2, 2);
x3(b"(a?)", b"aaa", 3, 3, 1);
x3(b"(a*)", b"aaa", 3, 3, 1);
x3(b"(a*)", b"", 0, 0, 1);
x3(b"(a+)", b"aaaaaaa", 6, 7, 1);
x3(b"(a+|b*)", b"bbbaa", 5, 5, 1);
x3(b"(a+|b?)", b"bbbaa", 5, 5, 1);
x3(b"(abc)?", b"abc", -1, -1, 1);
x3(b"(abc)*", b"abc", -1, -1, 1);
x3(b"(abc)+", b"abc", 0, 3, 1);
x3(b"(xyz|abc)+", b"abc", 0, 3, 1);
x3(b"([xyz][abc]|abc)+", b"abc", 0, 3, 1);
x3(b"((?i:abc))", b"AbC", 0, 3, 1);
x2(b"(abc)(?i:\\1)", b"abcABC", 0, 6);
x3(b"((?m:a.c))", b"a\nc", 0, 3, 1);
x3(b"((?=az)a)", b"azb", 0, 1, 1);
x3(b"abc|(.abd)", b"zabd", 0, 4, 1);
x2(b"(?:abc)|(ABC)", b"abc", 0, 3);
x3(b"(?i:(abc))|(zzz)", b"ABC", 0, 3, 1);
x3(b"a*(.)", b"aaaaz", 4, 5, 1);
x3(b"a*?(.)", b"aaaaz", 4, 5, 1);
x3(b"a*?(c)", b"aaaac", 4, 5, 1);
}
// ============================================================================
// Section 8: tests 351-400
// ============================================================================
#[test]
fn back_section_08() {
x3(b"[bcd]a*(.)", b"caaaaz", 5, 6, 1);
x3(b"(\\Abb)cc", b"bbcc", 0, 2, 1);
n(b"(\\Abb)cc", b"zbbcc");
x3(b"(^bb)cc", b"bbcc", 0, 2, 1);
n(b"(^bb)cc", b"zbbcc");
x3(b"cc(bb$)", b"ccbb", 2, 4, 1);
n(b"cc(bb$)", b"ccbbb");
n(b"(\\1)", b"");
n(b"\\1(a)", b"aa");
n(b"(a(b)\\1)\\2+", b"ababb");
n(b"(?:(?:\\1|z)(a))+$", b"zaa");
x2(b"(?:(?:\\1|z)(a))+$", b"zaaa", 0, 4);
x2(b"(a)(?=\\1)", b"aa", 0, 1);
n(b"(a)$|\\1", b"az");
x2(b"(a)\\1", b"aa", 0, 2);
n(b"(a)\\1", b"ab");
x2(b"(a?)\\1", b"aa", 2, 2);
x2(b"(a??)\\1", b"aa", 2, 2);
x2(b"(a*)\\1", b"aaaaa", 5, 5);
x3(b"(a*)\\1", b"aaaaa", 5, 5, 1);
x2(b"a(b*)\\1", b"abbbb", 0, 5);
x2(b"a(b*)\\1", b"ab", 0, 1);
x2(b"(a*)(b*)\\1\\2", b"aaabbaaabb", 10, 10);
x2(b"(a*)(b*)\\2", b"aaabbbb", 7, 7);
x2(b"(((((((a*)b))))))c\\7", b"aaabcaaa", 3, 5);
x3(b"(((((((a*)b))))))c\\7", b"aaabcaaa", 3, 3, 7);
x2(b"(a)(b)(c)\\2\\1\\3", b"abcbac", 0, 6);
x2(b"([a-d])\\1", b"cc", 0, 2);
x2(b"(\\w\\d\\s)\\1", b"f5 f5 ", 0, 6);
n(b"(\\w\\d\\s)\\1", b"f5 f5");
x2(b"(who|[a-c]{3})\\1", b"whowho", 0, 6);
x2(b"...(who|[a-c]{3})\\1", b"abcwhowho", 0, 9);
x2(b"(who|[a-c]{3})\\1", b"cbccbc", 0, 6);
x2(b"(^a)\\1", b"aa", 0, 2);
n(b"(^a)\\1", b"baa");
n(b"(a$)\\1", b"aa");
n(b"(ab\\Z)\\1", b"ab");
x2(b"(a*\\Z)\\1", b"a", 1, 1);
x2(b".(a*\\Z)\\1", b"ba", 1, 2);
x3(b"(.(abc)\\2)", b"zabcabc", 0, 7, 1);
x3(b"(.(..\\d.)\\2)", b"z12341234", 0, 9, 1);
x2(b"((?i:az))\\1", b"AzAz", 0, 4);
n(b"((?i:az))\\1", b"Azaz");
x2(b"(?<=a)b", b"ab", 1, 2);
n(b"(?<=a)b", b"bb");
x2(b"(?<=a|b)b", b"bb", 1, 2);
x2(b"(?<=a|bc)b", b"bcb", 2, 3);
x2(b"(?<=a|bc)b", b"ab", 1, 2);
x2(b"(?<=a|bc||defghij|klmnopq|r)z", b"rz", 1, 2);
x3(b"(?<=(abc))d", b"abcd", 0, 3, 1);
}
// ============================================================================
// Section 9a: tests 401-425
// ============================================================================
#[test]
fn back_section_09a() {
x2(b"(?<=(?i:abc))d", b"ABCd", 3, 4);
x2(b"(a)\\g<1>", b"aa", 0, 2);
x2(b"(?<!a)b", b"cb", 1, 2);
n(b"(?<!a)b", b"ab");
x2(b"(?<!a|bc)b", b"bbb", 2, 3);
n(b"(?<!a|bc)z", b"bcz");
x2(b"(?<name1>a)", b"a", 0, 1);
x2(b"(?<name_2>ab)\\g<name_2>", b"abab", 0, 4);
x2(b"(?<name_3>.zv.)\\k<name_3>", b"azvbazvb", 0, 8);
x2(b"(?<=\\g<ab>)|-\\zEND (?<ab>XyZ)", b"XyZ", 3, 3);
x2(b"(?<n>|a\\g<n>)+", b"", 0, 0);
x2(b"(?<n>|\\(\\g<n>\\))+$", b"()(())", 6, 6);
x3(b"\\g<n>(?<n>.){0}", b"X", 0, 1, 1);
x2(b"\\g<n>(abc|df(?<n>.YZ){2,8}){0}", b"XYZ", 0, 3);
x2(b"\\A(?<n>(a\\g<n>)|)\\z", b"aaaa", 0, 4);
x2(
b"(?<n>|\\g<m>\\g<n>)\\z|\\zEND (?<m>a|(b)\\g<m>)",
b"bbbbabba",
8,
8,
);
x2(
b"(?<name1240>\\w+\\sx)a+\\k<name1240>",
b" fg xaaaaaaaafg x",
2,
18,
);
x3(b"(z)()()(?<_9>a)\\g<_9>", b"zaa", 2, 3, 1);
x2(b"(.)(((?<_>a)))\\k<_>", b"zaa", 0, 3);
x2(
b"((?<name1>\\d)|(?<name2>\\w))(\\k<name1>|\\k<name2>)",
b"ff",
0,
2,
);
x2(b"(?:(?<x>)|(?<x>efg))\\k<x>", b"", 0, 0);
x2(b"(?:(?<x>abc)|(?<x>efg))\\k<x>", b"abcefgefg", 3, 9);
n(b"(?:(?<x>abc)|(?<x>efg))\\k<x>", b"abcefg");
x2(b"(?:(?<n1>.)|(?<n1>..)|(?<n1>...)|(?<n1>....)|(?<n1>.....)|(?<n1>......)|(?<n1>.......)|(?<n1>........)|(?<n1>.........)|(?<n1>..........)|(?<n1>...........)|(?<n1>............)|(?<n1>.............)|(?<n1>..............))\\k<n1>$", b"a-pyumpyum", 2, 10);
x3(b"(?:(?<n1>.)|(?<n1>..)|(?<n1>...)|(?<n1>....)|(?<n1>.....)|(?<n1>......)|(?<n1>.......)|(?<n1>........)|(?<n1>.........)|(?<n1>..........)|(?<n1>...........)|(?<n1>............)|(?<n1>.............)|(?<n1>..............))\\k<n1>$", b"xxxxabcdefghijklmnabcdefghijklmn", 4, 18, 14);
}
// ============================================================================
// Section 9b: tests 426-450
// ============================================================================
#[test]
fn back_section_09b() {
x3(b"(?<name1>)(?<name2>)(?<name3>)(?<name4>)(?<name5>)(?<name6>)(?<name7>)(?<name8>)(?<name9>)(?<name10>)(?<name11>)(?<name12>)(?<name13>)(?<name14>)(?<name15>)(?<name16>aaa)(?<name17>)$", b"aaa", 0, 3, 16);
x2(b"(?<foo>a|\\(\\g<foo>\\))", b"a", 0, 1);
x2(b"(?<foo>a|\\(\\g<foo>\\))", b"((((((a))))))", 6, 7);
x3(b"(?<foo>a|\\(\\g<foo>\\))", b"((((((((a))))))))", 8, 9, 1);
x2(b"\\g<bar>|\\zEND(?<bar>.*abc$)", b"abcxxxabc", 6, 9);
x2(b"\\g<1>|\\zEND(.a.)", b"bac", 0, 3);
x3(b"\\g<_A>\\g<_A>|\\zEND(.a.)(?<_A>.b.)", b"xbxyby", 3, 6, 1);
x2(
b"\\A(?:\\g<pon>|\\g<pan>|\\zEND (?<pan>a|c\\g<pon>c)(?<pon>b|d\\g<pan>d))$",
b"cdcbcdc",
0,
7,
);
x2(b"\\A(?<n>|a\\g<m>)\\z|\\zEND (?<m>\\g<n>)", b"aaaa", 0, 4);
x2(b"(?<n>(a|b\\g<n>c){3,5})", b"baaaaca", 2, 5);
x2(b"(?<n>(a|b\\g<n>c){3,5})", b"baaaacaaaaa", 8, 11);
x2(b"(?<pare>\\(([^\\(\\)]++|\\g<pare>)*+\\))", b"((a))", 1, 4);
x2(b"()*\\1", b"", 0, 0);
x2(b"(?:()|())*\\1\\2", b"", 0, 0);
x2(b"(?:a*|b*)*c", b"abadc", 4, 5);
x3(b"(?:\\1a|())*", b"a", 1, 1, 1);
x2(b"x((.)*)*x", b"0x1x2x3", 3, 6);
x2(b"x((.)*)*x(?i:\\1)\\Z", b"0x1x2x1X2", 1, 9);
x2(b"(?:()|()|()|()|()|())*\\2\\5", b"", 0, 0);
x2(b"(?:()|()|()|(x)|()|())*\\2b\\5", b"b", 0, 1);
x2(b"[0-9-a]", b"-", 0, 1);
n(b"[0-9-a]", b":");
x3(b"(\\(((?:[^(]|\\g<1>)*)\\))", b"(abc)(abc)", 6, 9, 2);
x2(b"\\o{101}", b"A", 0, 1);
x2(b"\\A(a|b\\g<1>c)\\k<1+3>\\z", b"bbacca", 0, 6);
}
// ============================================================================
// Section 10: tests 451-500
// ============================================================================
#[test]
fn back_section_10() {
n(b"\\A(a|b\\g<1>c)\\k<1+3>\\z", b"bbaccb");
x2(b"(?i)\\A(a|b\\g<1>c)\\k<1+2>\\z", b"bBACcbac", 0, 8);
x2(b"(?i)(?<X>aa)|(?<X>bb)\\k<X>", b"BBbb", 0, 4);
x2(b"(?:\\k'+1'B|(A)C)*", b"ACAB", 4, 4);
x2(b"\\g<+2>(abc)(ABC){0}", b"ABCabc", 0, 6);
x2(b"A\\g'0'|B()", b"AAAAB", 4, 5);
x3(b"(A\\g'0')|B", b"AAAAB", -1, -1, 1);
x2(b"(a*)(?(1))aa", b"aaaaa", 3, 5);
x2(b"(a*)(?(-1))aa", b"aaaaa", 3, 5);
x2(b"(?<name>aaa)(?('name'))aa", b"aaaaa", 0, 5);
x2(b"(a)(?(1)aa|bb)a", b"aaaaa", 1, 5);
x2(b"(?:aa|())(?(<1>)aa|bb)a", b"aabba", 0, 5);
x2(b"(?:aa|())(?('1')aa|bb|cc)a", b"aacca", 0, 5);
x3(b"(a*)(?(1)aa|a)b", b"aaab", 1, 1, 1);
n(b"(a)(?(1)a|b)c", b"abc");
x2(b"(a)(?(1)|)c", b"ac", 0, 2);
n(b"(?()aaa|bbb)", b"bbb");
x2(b"(a)(?(1+0)b|c)d", b"abd", 0, 3);
x2(b"(?:(?'name'a)|(?'name'b))(?('name')c|d)e", b"ace", 0, 3);
x2(b"(?:(?'name'a)|(?'name'b))(?('name')c|d)e", b"bce", 0, 3);
x2(b"\\R", b"\r\n", 1, 2);
x2(b"\\R", b"\r", 0, 1);
x2(b"\\R", b"\n", 0, 1);
x2(b"\\R", b"\x0b", 0, 1);
n(b"\\R\\n", b"\r\n");
x2(b"\\R", b"\xc2\x85", 0, 2);
x2(b"\\N", b"a", 0, 1);
n(b"\\N", b"\n");
n(b"(?m:\\N)", b"\n");
n(b"(?-m:\\N)", b"\n");
x2(b"\\O", b"a", 0, 1);
x2(b"\\O", b"\n", 0, 1);
x2(b"(?m:\\O)", b"\n", 0, 1);
x2(b"(?-m:\\O)", b"\n", 0, 1);
x2(b"\\K", b"a", 1, 1);
x2(b"a\\K", b"a", 1, 1);
x2(b"a\\Kb", b"ab", 1, 2);
x2(b"(a\\Kb|ac\\Kd)", b"acd", 2, 3);
x2(b"(a\\Kb|\\Kac\\K)*", b"acababacab", 10, 10);
x2(b"(?:()|())*\\1", b"abc", 3, 3);
x2(b"(?:()|())*\\2", b"abc", 3, 3);
x2(b"(?:()|()|())*\\3\\1", b"abc", 3, 3);
x2(b"(|(?:a(?:\\g'1')*))b|", b"abc", 3, 3);
x2(b"^(\"|)(.*)\\1$", b"XX", 0, 2);
x2(b"(abc|def|ghi|jkl|mno|pqr|stu){0,10}?\\z", b"admno", 5, 5);
x2(
b"(abc|(def|ghi|jkl|mno|pqr){0,7}?){5}\\z",
b"adpqrpqrpqr",
11,
11,
);
x2(b"(?!abc).*\\z", b"abcde", 5, 5);
x2(b"(.{2,})?", b"abcde", 5, 5);
x2(b"((a|b|c|d|e|f|g|h|i|j|k|l|m|n)+)?", b"abcde", 5, 5);
x2(b"((a|b|c|d|e|f|g|h|i|j|k|l|m|n){3,})?", b"abcde", 5, 5);
}
// ============================================================================
// Section 11: tests 501-550
// ============================================================================
#[test]
fn back_section_11() {
x2(b"((?:a(?:b|c|d|e|f|g|h|i|j|k|l|m|n))+)?", b"abacadae", 8, 8);
x2(
b"((?:a(?:b|c|d|e|f|g|h|i|j|k|l|m|n))+?)?z",
b"abacadaez",
8,
9,
);
x2(b"\\A((a|b)??)?z", b"bz", 0, 2);
x2(b"((?<x>abc){0}a\\g<x>d)+", b"aabcd", 0, 5);
x2(b"((?(abc)true|false))+", b"false", 0, 5);
x2(b"((?i:abc)d)+", b"abcdABCd", 4, 8);
x2(b"((?<!abc)def)+", b"bcdef", 2, 5);
x2(b"(\\ba)+", b"aaa", 0, 1);
x2(b"()(?<x>ab)(?(<x>)a|b)", b"aba", 0, 3);
x2(b"(?<=a.b)c", b"azbc", 3, 4);
n(b"(?<=(?:abcde){30})z", b"abc");
x2(b"(?<=(?(a)a|bb))z", b"aaz", 2, 3);
x2(b"[a]*\\W", b"aa@", 2, 3);
x2(b"[a]*[b]", b"aab", 2, 3);
n(b"a*\\W", b"aaa");
n(b"(?W)a*\\W", b"aaa");
x2(b"(?<=ab(?<=ab))", b"ab", 2, 2);
x2(b"(?<x>a)(?<x>b)(\\k<x>)+", b"abbaab", 0, 6);
x2(b"()(\\1)(\\2)", b"abc", 3, 3);
x2(b"((?(a)b|c))(\\1)", b"abab", 0, 4);
x2(b"(?<x>$|b\\g<x>)", b"bbb", 3, 3);
x2(b"(?<x>(?(a)a|b)|c\\g<x>)", b"cccb", 3, 4);
x2(b"(a)(?(1)a*|b*)+", b"aaaa", 3, 4);
x2(b"[[^abc]&&cde]*", b"de", 2, 2);
n(b"(a){10}{10}", b"aa");
x2(b"(?:a?)+", b"aa", 2, 2);
x2(b"(?:a?)*?", b"a", 1, 1);
x2(b"(?:a*)*?", b"a", 1, 1);
x2(b"(?:a+?)*", b"a", 1, 1);
x2(b"\\h", b"5", 0, 1);
x2(b"\\H", b"z", 0, 1);
x2(b"[\\h]", b"5", 0, 1);
x2(b"[\\H]", b"z", 0, 1);
x2(b"[\\o{101}]", b"A", 0, 1);
x2(b"[\\u0041]", b"A", 0, 1);
x2(b"(?~)", b"", 0, 0);
x2(b"(?~)", b"A", 1, 1);
x2(b"aaaaa(?~)", b"aaaaaaaaaa", 5, 10);
x2(b"(?~(?:|aaa))", b"aaa", 3, 3);
x2(b"(?~aaa|)", b"aaa", 3, 3);
x2(b"a(?~(?~)).", b"abcdefghijklmnopqrstuvwxyz", 0, 26);
x2(b"/\\*(?~\\*/)\\*/", b"/* */ */", 0, 5);
x2(b"(?~\\w+)zzzzz", b"zzzzz", 0, 5);
x2(b"(?~\\w*)zzzzz", b"zzzzz", 0, 5);
x2(b"(?~A.C|B)", b"ABC", 3, 3);
x2(b"(?~XYZ|ABC)a", b"ABCa", 3, 4);
x2(b"(?~XYZ|ABC)a", b"aABCa", 4, 5);
x2(
b"<[^>]*>(?~[<>])</[^>]*>",
b"<a>vvv</a> <b> </b>",
13,
22,
);
x2(b"(?~ab)", b"ccc\ndab", 7, 7);
x2(b"(?m:(?~ab))", b"ccc\ndab", 7, 7);
}
// ============================================================================
// Section 12: tests 551-600
// ============================================================================
#[test]
fn back_section_12() {
x2(b"(?-m:(?~ab))", b"ccc\ndab", 7, 7);
x2(b"(?~abc)xyz", b"xyz012345678901234567890123456789abc", 0, 3);
x2(b"(?~|78|\\d*)", b"123456789", 9, 9);
x2(
b"(?~|def|(?:abc|de|f){0,100})",
b"abcdedeabcfdefabc",
17,
17,
);
x2(b"(?~|ab|.*)", b"ccc\nddd", 7, 7);
x2(b"(?~|ab|\\O*)", b"ccc\ndab", 7, 7);
x2(b"(?~|ab|\\O{2,10})", b"ccc\ndab", 3, 5);
x2(b"(?~|ab|\\O{1,10})", b"ab", 1, 2);
n(b"(?~|ab|\\O{2,10})", b"ab");
x2(b"(?~|abc|\\O{1,10})", b"abc", 2, 3);
x2(b"(?~|ab|\\O{5,10})|abc", b"abc", 0, 3);
x2(b"(?~|ab|\\O{1,10})", b"cccccccccccab", 12, 13);
x2(b"(?~|aaa|)", b"aaa", 3, 3);
x2(b"(?~||a*)", b"aaaaaa", 6, 6);
x2(b"(?~||a*?)", b"aaaaaa", 6, 6);
x2(b"(a)(?~|b|\\1)", b"aaaaaa", 4, 6);
x2(b"(a)(?~|bb|(?:a\\1)*)", b"aaaaaa", 5, 6);
x2(b"(b|c)(?~|abac|(?:a\\1)*)", b"abababacabab", 11, 12);
n(b"(?~|c|a*+)a", b"aaaaa");
x2(b"(?~|aaaaa|a*+)", b"aaaaa", 5, 5);
x2(b"(?~|aaaaaa|a*+)b", b"aaaaaab", 6, 7);
x2(b"(?~|abcd|(?>))", b"zzzabcd", 7, 7);
x2(b"(?~|abc|a*?)", b"aaaabc", 6, 6);
x2(b"(?~|abc)a*", b"aaaaaabc", 8, 8);
x2(b"(?~|abc)a*z|aaaaaabc", b"aaaaaabc", 0, 8);
x2(b"(?~|aaaaaa)a*", b"aaaaaa", 6, 6);
x2(b"(?~|abc)aaaa|aaaabc", b"aaaabc", 0, 6);
x2(b"(?>(?~|abc))aaaa|aaaabc", b"aaaabc", 0, 6);
x2(b"(?~|)a", b"a", 0, 1);
n(b"(?~|a)a", b"a");
x2(b"(?~|a)(?~|)a", b"a", 0, 1);
x2(b"(?~|a).*(?~|)a", b"bbbbbbbbbbbbbbbbbbbba", 20, 21);
x2(b"(?~|abc).*(xyz|pqr)(?~|)abc", b"aaaaxyzaaapqrabc", 10, 16);
x2(
b"(?~|abc).*(xyz|pqr)(?~|)abc",
b"aaaaxyzaaaabcpqrabc",
13,
19,
);
n(
b"\\A(?~|abc).*(xyz|pqrabc)(?~|)abc",
b"aaaaxyzaaaabcpqrabcabc",
);
x2(b"", b"\xe3\x81\x82", 3, 3);
x2(b"\xe3\x81\x82", b"\xe3\x81\x82", 0, 3);
n(b"\xe3\x81\x84", b"\xe3\x81\x82");
x2(
b"\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x81\x86\xe3\x81\x86",
0,
6,
);
x2(
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
0,
9,
);
x2(b"\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93", b"\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93", 0, 105);
x2(b"\xe3\x81\x82", b"\xe3\x81\x84\xe3\x81\x82", 3, 6);
x2(
b"\xe3\x81\x84\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
3,
9,
);
x2(b"\\xca\\xb8", b"\xca\xb8", 0, 2);
x2(b".", b"\xe3\x81\x82", 0, 3);
x2(b"..", b"\xe3\x81\x8b\xe3\x81\x8d", 0, 6);
x2(b"\\w", b"\xe3\x81\x8a", 0, 3);
n(b"\\W", b"\xe3\x81\x82");
x2(b"[\\W]", b"\xe3\x81\x86$", 3, 4);
x2(b"\\S", b"\xe3\x81\x9d", 0, 3);
}
// ============================================================================
// Section 13: tests 601-650
// ============================================================================
#[test]
fn back_section_13() {
x2(b"\\S", b"\xe6\xbc\xa2", 0, 3);
x2(b"\\b", b"\xe6\xb0\x97 ", 3, 3);
x2(b"\\b", b" \xe3\x81\xbb", 4, 4);
x2(b"\\B", b"\xe3\x81\x9b\xe3\x81\x9d ", 7, 7);
x2(b"\\B", b"\xe3\x81\x86 ", 4, 4);
x2(b"\\B", b" \xe3\x81\x84", 0, 0);
x2(b"[\xe3\x81\x9f\xe3\x81\xa1]", b"\xe3\x81\xa1", 0, 3);
n(b"[\xe3\x81\xaa\xe3\x81\xab]", b"\xe3\x81\xac");
x2(b"[\xe3\x81\x86-\xe3\x81\x8a]", b"\xe3\x81\x88", 0, 3);
n(b"[^\xe3\x81\x91]", b"\xe3\x81\x91");
x2(b"[\\w]", b"\xe3\x81\xad", 0, 3);
n(b"[\\d]", b"\xe3\x81\xb5");
x2(b"[\\D]", b"\xe3\x81\xaf", 0, 3);
n(b"[\\s]", b"\xe3\x81\x8f");
x2(b"[\\S]", b"\xe3\x81\xb8", 0, 3);
x2(b"[\\w\\d]", b"\xe3\x82\x88", 0, 3);
x2(b"[\\w\\d]", b" \xe3\x82\x88", 3, 6);
n(b"\\w\xe9\xac\xbc\xe8\xbb\x8a", b" \xe9\xac\xbc\xe8\xbb\x8a");
x2(
b"\xe9\xac\xbc\\W\xe8\xbb\x8a",
b"\xe9\xac\xbc \xe8\xbb\x8a",
0,
7,
);
x2(
b"\xe3\x81\x82.\xe3\x81\x84.\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86",
0,
15,
);
x2(
b".\\w\xe3\x81\x86\\W..\xe3\x81\x9e",
b"\xe3\x81\x88\xe3\x81\x86\xe3\x81\x86 \xe3\x81\x86\xe3\x81\x9e\xe3\x81\x9e",
0,
19,
);
x2(
b"\\s\\w\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93",
b" \xe3\x81\x93\xe3\x81\x93\xe3\x81\x93\xe3\x81\x93",
0,
13,
);
x2(
b"\xe3\x81\x82\xe3\x81\x82.\xe3\x81\x91",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x91\xe3\x81\x91",
0,
12,
);
n(b".\xe3\x81\x84", b"\xe3\x81\x84\xe3\x81\x88");
x2(b".\xe3\x81\x8a", b"\xe3\x81\x8a\xe3\x81\x8a", 0, 6);
x2(b"^\xe3\x81\x82", b"\xe3\x81\x82", 0, 3);
x2(b"^\xe3\x82\x80$", b"\xe3\x82\x80", 0, 3);
x2(b"^\\w$", b"\xe3\x81\xab", 0, 3);
x2(
b"^\\w\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93$",
b"z\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93",
0,
16,
);
x2(
b"^\\w...\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a$",
b"z\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a",
0,
19,
);
x2(
b"\\w\\w\\s\\W\xe3\x81\x8a\xe3\x81\x8a\xe3\x81\x8a\\d",
b"a\xe3\x81\x8a \xe3\x81\x8a\xe3\x81\x8a\xe3\x81\x8a4",
0,
16,
);
x2(
b"\\A\xe3\x81\x9f\xe3\x81\xa1\xe3\x81\xa4",
b"\xe3\x81\x9f\xe3\x81\xa1\xe3\x81\xa4",
0,
9,
);
x2(
b"\xe3\x82\x80\xe3\x82\x81\xe3\x82\x82\\Z",
b"\xe3\x82\x80\xe3\x82\x81\xe3\x82\x82",
0,
9,
);
x2(
b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\\z",
b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f",
0,
9,
);
x2(
b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\\Z",
b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\n",
0,
9,
);
n(b"\\G\xe3\x81\xbd\xe3\x81\xb4", b"\xe3\x81\xbd\xe3\x81\xb4");
n(b"\\G\xe3\x81\x88", b"\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a");
x2(
b"\xe3\x81\xa8\xe3\x81\xa6\\G",
b"\xe3\x81\xa8\xe3\x81\xa6",
0,
6,
);
n(b"\xe3\x81\xbe\xe3\x81\xbf\\A", b"\xe3\x81\xbe\xe3\x81\xbf");
n(b"\xe3\x81\xbe\\A\xe3\x81\xbf", b"\xe3\x81\xbe\xe3\x81\xbf");
x2(b"(?=\xe3\x81\x9b)\xe3\x81\x9b", b"\xe3\x81\x9b", 0, 3);
n(b"(?=\xe3\x81\x86).", b"\xe3\x81\x84");
x2(b"(?!\xe3\x81\x86)\xe3\x81\x8b", b"\xe3\x81\x8b", 0, 3);
n(b"(?!\xe3\x81\xa8)\xe3\x81\x82", b"\xe3\x81\xa8");
x2(b"(?i:\xe3\x81\x82)", b"\xe3\x81\x82", 0, 3);
x2(
b"(?i:\xe3\x81\xb6\xe3\x81\xb9)",
b"\xe3\x81\xb6\xe3\x81\xb9",
0,
6,
);
n(b"(?i:\xe3\x81\x84)", b"\xe3\x81\x86");
x2(b"(?m:\xe3\x82\x88.)", b"\xe3\x82\x88\n", 0, 4);
x2(b"(?m:.\xe3\x82\x81)", b"\xe3\x81\xbe\n\xe3\x82\x81", 3, 7);
x2(b"\xe3\x81\x82?", b"", 0, 0);
}
// ============================================================================
// Section 14: tests 651-700
// ============================================================================
#[test]
fn back_section_14() {
x2(b"\xe5\xa4\x89?", b"\xe5\x8c\x96", 3, 3);
x2(b"\xe5\xa4\x89?", b"\xe5\xa4\x89", 3, 3);
x2(b"\xe9\x87\x8f*", b"", 0, 0);
x2(b"\xe9\x87\x8f*", b"\xe9\x87\x8f", 3, 3);
x2(
b"\xe5\xad\x90*",
b"\xe5\xad\x90\xe5\xad\x90\xe5\xad\x90",
9,
9,
);
x2(
b"\xe9\xa6\xac*",
b"\xe9\xb9\xbf\xe9\xa6\xac\xe9\xa6\xac\xe9\xa6\xac\xe9\xa6\xac",
15,
15,
);
n(b"\xe5\xb1\xb1+", b"");
x2(b"\xe6\xb2\xb3+", b"\xe6\xb2\xb3", 0, 3);
x2(
b"\xe6\x99\x82+",
b"\xe6\x99\x82\xe6\x99\x82\xe6\x99\x82\xe6\x99\x82",
9,
12,
);
x2(
b"\xe3\x81\x88+",
b"\xe3\x81\x88\xe3\x81\x88\xe3\x81\x86\xe3\x81\x86\xe3\x81\x86",
3,
6,
);
x2(
b"\xe3\x81\x86+",
b"\xe3\x81\x8a\xe3\x81\x86\xe3\x81\x86\xe3\x81\x86\xe3\x81\x86",
12,
15,
);
x2(b".?", b"\xe3\x81\x9f", 3, 3);
x2(
b".*",
b"\xe3\x81\xb1\xe3\x81\xb4\xe3\x81\xb7\xe3\x81\xba",
12,
12,
);
x2(b".+", b"\xe3\x82\x8d", 0, 3);
x2(
b".+",
b"\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8b\n",
9,
12,
);
x2(b"\xe3\x81\x82|\xe3\x81\x84", b"\xe3\x81\x82", 0, 3);
x2(b"\xe3\x81\x82|\xe3\x81\x84", b"\xe3\x81\x84", 0, 3);
x2(
b"\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x84\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84",
0,
6,
);
x2(
b"\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x84\xe3\x81\x86",
b"\xe3\x81\x84\xe3\x81\x86",
0,
6,
);
x2(
b"\xe3\x82\x92(?:\xe3\x81\x8b\xe3\x81\x8d|\xe3\x81\x8d\xe3\x81\x8f)",
b"\xe3\x82\x92\xe3\x81\x8b\xe3\x81\x8d",
0,
9,
);
x2(
b"\xe3\x82\x92(?:\xe3\x81\x8b\xe3\x81\x8d|\xe3\x81\x8d\xe3\x81\x8f)\xe3\x81\x91",
b"\xe3\x82\x92\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91",
0,
12,
);
x2(
b"\xe3\x81\x82\xe3\x81\x84|(?:\xe3\x81\x82\xe3\x81\x86|\xe3\x81\x82\xe3\x82\x92)",
b"\xe3\x81\x82\xe3\x82\x92",
0,
6,
);
x2(
b"\xe3\x81\x82|\xe3\x81\x84|\xe3\x81\x86",
b"\xe3\x81\x88\xe3\x81\x86",
3,
6,
);
x2(b"\xe3\x81\x82|\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x88|\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d|\xe3\x81\x8f|\xe3\x81\x91\xe3\x81\x93\xe3\x81\x95|\xe3\x81\x97\xe3\x81\x99\xe3\x81\x9b|\xe3\x81\x9d|\xe3\x81\x9f\xe3\x81\xa1|\xe3\x81\xa4\xe3\x81\xa6\xe3\x81\xa8\xe3\x81\xaa\xe3\x81\xab|\xe3\x81\xac\xe3\x81\xad", b"\xe3\x81\x97\xe3\x81\x99\xe3\x81\x9b", 0, 9);
n(b"\xe3\x81\x82|\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x88|\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d|\xe3\x81\x8f|\xe3\x81\x91\xe3\x81\x93\xe3\x81\x95|\xe3\x81\x97\xe3\x81\x99\xe3\x81\x9b|\xe3\x81\x9d|\xe3\x81\x9f\xe3\x81\xa1|\xe3\x81\xa4\xe3\x81\xa6\xe3\x81\xa8\xe3\x81\xaa\xe3\x81\xab|\xe3\x81\xac\xe3\x81\xad", b"\xe3\x81\x99\xe3\x81\x9b");
x2(
b"\xe3\x81\x82|^\xe3\x82\x8f",
b"\xe3\x81\xb6\xe3\x81\x82",
3,
6,
);
x2(
b"\xe3\x81\x82|^\xe3\x82\x92",
b"\xe3\x82\x92\xe3\x81\x82",
3,
6,
);
x2(
b"\xe9\xac\xbc|\\G\xe8\xbb\x8a",
b"\xe3\x81\x91\xe8\xbb\x8a\xe9\xac\xbc",
6,
9,
);
x2(
b"\xe9\xac\xbc|\\G\xe8\xbb\x8a",
b"\xe8\xbb\x8a\xe9\xac\xbc",
3,
6,
);
x2(
b"\xe9\xac\xbc|\\A\xe8\xbb\x8a",
b"b\xe8\xbb\x8a\xe9\xac\xbc",
4,
7,
);
x2(b"\xe9\xac\xbc|\\A\xe8\xbb\x8a", b"\xe8\xbb\x8a", 0, 3);
x2(
b"\xe9\xac\xbc|\xe8\xbb\x8a\\Z",
b"\xe8\xbb\x8a\xe9\xac\xbc",
3,
6,
);
x2(b"\xe9\xac\xbc|\xe8\xbb\x8a\\Z", b"\xe8\xbb\x8a", 0, 3);
x2(b"\xe9\xac\xbc|\xe8\xbb\x8a\\Z", b"\xe8\xbb\x8a\n", 0, 3);
x2(
b"\xe9\xac\xbc|\xe8\xbb\x8a\\z",
b"\xe8\xbb\x8a\xe9\xac\xbc",
3,
6,
);
x2(b"\xe9\xac\xbc|\xe8\xbb\x8a\\z", b"\xe8\xbb\x8a", 0, 3);
x2(b"\\w|\\s", b"\xe3\x81\x8a", 0, 3);
x2(b"\\w|%", b"%\xe3\x81\x8a", 1, 4);
x2(b"\\w|[&$]", b"\xe3\x81\x86&", 3, 4);
x2(b"[\xe3\x81\x84-\xe3\x81\x91]", b"\xe3\x81\x86", 0, 3);
x2(
b"[\xe3\x81\x84-\xe3\x81\x91]|[^\xe3\x81\x8b-\xe3\x81\x93]",
b"\xe3\x81\x82",
0,
3,
);
x2(
b"[\xe3\x81\x84-\xe3\x81\x91]|[^\xe3\x81\x8b-\xe3\x81\x93]",
b"\xe3\x81\x8b",
0,
3,
);
x2(b"[^\xe3\x81\x82]", b"\n", 0, 1);
x2(
b"(?:\xe3\x81\x82|[\xe3\x81\x86-\xe3\x81\x8d])|\xe3\x81\x84\xe3\x82\x92",
b"\xe3\x81\x86\xe3\x82\x92",
0,
3,
);
x2(
b"(?:\xe3\x81\x82|[\xe3\x81\x86-\xe3\x81\x8d])|\xe3\x81\x84\xe3\x82\x92",
b"\xe3\x81\x84\xe3\x82\x92",
0,
6,
);
x2(
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86|(?=\xe3\x81\x91\xe3\x81\x91)..\xe3\x81\xbb",
b"\xe3\x81\x91\xe3\x81\x91\xe3\x81\xbb",
0,
9,
);
x2(
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86|(?!\xe3\x81\x91\xe3\x81\x91)..\xe3\x81\xbb",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\xbb",
0,
9,
);
x2(
b"(?=\xe3\x82\x92\xe3\x81\x82)..\xe3\x81\x82|(?=\xe3\x82\x92\xe3\x82\x92)..\xe3\x81\x82",
b"\xe3\x82\x92\xe3\x82\x92\xe3\x81\x82",
0,
9,
);
x2(
b"(?<=\xe3\x81\x82|\xe3\x81\x84\xe3\x81\x86)\xe3\x81\x84",
b"\xe3\x81\x84\xe3\x81\x86\xe3\x81\x84",
6,
9,
);
n(
b"(?>\xe3\x81\x82|\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88)\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88\xe3\x81\x86",
);
}
// ============================================================================
// Section 15: tests 701-750
// ============================================================================
#[test]
fn back_section_15() {
x2(
b"(?>\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88|\xe3\x81\x82)\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88\xe3\x81\x86",
0,
12,
);
x2(b"\xe3\x81\x82?|\xe3\x81\x84", b"\xe3\x81\x82", 3, 3);
x2(b"\xe3\x81\x82?|\xe3\x81\x84", b"\xe3\x81\x84", 3, 3);
x2(b"\xe3\x81\x82?|\xe3\x81\x84", b"", 0, 0);
x2(
b"\xe3\x81\x82*|\xe3\x81\x84",
b"\xe3\x81\x82\xe3\x81\x82",
6,
6,
);
x2(
b"\xe3\x81\x82*|\xe3\x81\x84*",
b"\xe3\x81\x84\xe3\x81\x82",
6,
6,
);
x2(
b"\xe3\x81\x82*|\xe3\x81\x84*",
b"\xe3\x81\x82\xe3\x81\x84",
6,
6,
);
x2(
b"[a\xe3\x81\x82]*|\xe3\x81\x84*",
b"a\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
13,
13,
);
x2(b"\xe3\x81\x82+|\xe3\x81\x84*", b"", 0, 0);
x2(
b"\xe3\x81\x82+|\xe3\x81\x84*",
b"\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
9,
9,
);
x2(
b"\xe3\x81\x82+|\xe3\x81\x84*",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
12,
12,
);
x2(
b"\xe3\x81\x82+|\xe3\x81\x84*",
b"a\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
13,
13,
);
n(b"\xe3\x81\x82+|\xe3\x81\x84+", b"");
x2(b"(\xe3\x81\x82|\xe3\x81\x84)?", b"\xe3\x81\x84", 3, 3);
x2(
b"(\xe3\x81\x82|\xe3\x81\x84)*",
b"\xe3\x81\x84\xe3\x81\x82",
6,
6,
);
x2(
b"(\xe3\x81\x82|\xe3\x81\x84)+",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84",
6,
9,
);
x2(
b"(\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x82)+",
b"\xe3\x81\x86\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88",
6,
12,
);
x2(
b"(\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x88)+",
b"\xe3\x81\x86\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88",
12,
18,
);
x2(
b"(\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x82)+",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x82",
9,
15,
);
x2(
b"(\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x82)+",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x82\x92\xe3\x81\x86\xe3\x81\x82",
9,
15,
);
x2(
b"(\xe3\x81\x82\xe3\x81\x84|\xe3\x81\x86\xe3\x81\x82)+",
b"$$zzzz\xe3\x81\x82\xe3\x81\x84\xe3\x82\x92\xe3\x81\x86\xe3\x81\x82",
15,
21,
);
x2(
b"(\xe3\x81\x82|\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84)+",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84\xe3\x81\x82",
12,
15,
);
x2(
b"(\xe3\x81\x82|\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84)+",
b"\xe3\x81\x84\xe3\x81\x82",
3,
6,
);
x2(
b"(\xe3\x81\x82|\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84)+",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x82",
15,
18,
);
x2(
b"(?:\xe3\x81\x82|\xe3\x81\x84)(?:\xe3\x81\x82|\xe3\x81\x84)",
b"\xe3\x81\x82\xe3\x81\x84",
0,
6,
);
x2(
b"(?:\xe3\x81\x82*|\xe3\x81\x84*)(?:\xe3\x81\x82*|\xe3\x81\x84*)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
18,
18,
);
x2(
b"(?:\xe3\x81\x82*|\xe3\x81\x84*)(?:\xe3\x81\x82+|\xe3\x81\x84+)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
15,
18,
);
x2(
b"(?:\xe3\x81\x82+|\xe3\x81\x84+){2}",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
12,
18,
);
x2(
b"(?:\xe3\x81\x82+|\xe3\x81\x84+){1,2}",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
15,
18,
);
x2(
b"(?:\xe3\x81\x82+|\\A\xe3\x81\x84*)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x81\x86\xe3\x81\x86",
0,
6,
);
n(
b"(?:\xe3\x81\x82+|\\A\xe3\x81\x84*)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86",
);
x2(b"(?:^\xe3\x81\x82+|\xe3\x81\x84+)*\xe3\x81\x86", b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86", 21, 24);
x2(
b"(?:^\xe3\x81\x82+|\xe3\x81\x84+)*\xe3\x81\x86",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86",
18,
21,
);
x2(
b"\xe3\x81\x86{0,}",
b"\xe3\x81\x86\xe3\x81\x86\xe3\x81\x86\xe3\x81\x86",
12,
12,
);
x2(b"\xe3\x81\x82|(?i)c", b"C", 0, 1);
x2(b"(?i)c|\xe3\x81\x82", b"C", 0, 1);
x2(b"(?i:\xe3\x81\x82)|a", b"a", 0, 1);
n(b"(?i:\xe3\x81\x82)|a", b"A");
x2(
b"[\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]?",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
9,
9,
);
x2(
b"[\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]*",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
9,
9,
);
x2(
b"[^\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]*",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
9,
9,
);
n(
b"[^\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]+",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
);
x2(
b"\xe3\x81\x82??",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82",
9,
9,
);
x2(
b"\xe3\x81\x84\xe3\x81\x82??\xe3\x81\x84",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x84",
0,
9,
);
x2(
b"\xe3\x81\x82*?",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82",
9,
9,
);
x2(
b"\xe3\x81\x84\xe3\x81\x82*?",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82",
0,
3,
);
x2(
b"\xe3\x81\x84\xe3\x81\x82*?\xe3\x81\x84",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84",
0,
12,
);
x2(
b"\xe3\x81\x82+?",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82",
6,
9,
);
x2(
b"\xe3\x81\x84\xe3\x81\x82+?",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82",
0,
6,
);
x2(
b"\xe3\x81\x84\xe3\x81\x82+?\xe3\x81\x84",
b"\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84",
0,
12,
);
}
// ============================================================================
// Section 16: tests 751-800
// ============================================================================
#[test]
fn back_section_16() {
x2(b"(?:\xe5\xa4\xa9?)??", b"\xe5\xa4\xa9", 3, 3);
x2(b"(?:\xe5\xa4\xa9??)?", b"\xe5\xa4\xa9", 3, 3);
x2(
b"(?:\xe5\xa4\xa2?)+?",
b"\xe5\xa4\xa2\xe5\xa4\xa2\xe5\xa4\xa2",
9,
9,
);
x2(
b"(?:\xe9\xa2\xa8+)??",
b"\xe9\xa2\xa8\xe9\xa2\xa8\xe9\xa2\xa8",
9,
9,
);
x2(
b"(?:\xe9\x9b\xaa+)??\xe9\x9c\x9c",
b"\xe9\x9b\xaa\xe9\x9b\xaa\xe9\x9b\xaa\xe9\x9c\x9c",
9,
12,
);
x2(b"(?:\xe3\x81\x82\xe3\x81\x84)?{2}", b"", 0, 0);
x2(
b"(?:\xe9\xac\xbc\xe8\xbb\x8a)?{2}",
b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc",
15,
15,
);
x2(
b"(?:\xe9\xac\xbc\xe8\xbb\x8a)*{0}",
b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc",
15,
15,
);
x2(b"(?:\xe9\xac\xbc\xe8\xbb\x8a){3,}", b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a", 6, 24);
n(
b"(?:\xe9\xac\xbc\xe8\xbb\x8a){3,}",
b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a",
);
x2(
b"(?:\xe9\xac\xbc\xe8\xbb\x8a){2,4}",
b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a",
6,
18,
);
x2(b"(?:\xe9\xac\xbc\xe8\xbb\x8a){2,4}", b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a", 18, 30);
x2(b"(?:\xe9\xac\xbc\xe8\xbb\x8a){2,4}?", b"\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a\xe9\xac\xbc\xe8\xbb\x8a", 18, 30);
x2(
b"(?:\xe9\xac\xbc\xe8\xbb\x8a){,}",
b"\xe9\xac\xbc\xe8\xbb\x8a{,}",
0,
9,
);
x2(b"(?:\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f)+?{2}", b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f", 9, 27);
x3(b"(\xe7\x81\xab)", b"\xe7\x81\xab", 0, 3, 1);
x3(
b"(\xe7\x81\xab\xe6\xb0\xb4)",
b"\xe7\x81\xab\xe6\xb0\xb4",
0,
6,
1,
);
x2(
b"((\xe6\x99\x82\xe9\x96\x93))",
b"\xe6\x99\x82\xe9\x96\x93",
0,
6,
);
x3(
b"((\xe9\xa2\xa8\xe6\xb0\xb4))",
b"\xe9\xa2\xa8\xe6\xb0\xb4",
0,
6,
1,
);
x3(
b"((\xe6\x98\xa8\xe6\x97\xa5))",
b"\xe6\x98\xa8\xe6\x97\xa5",
0,
6,
2,
);
x3(
b"((((((((((((((((((((\xe9\x87\x8f\xe5\xad\x90))))))))))))))))))))",
b"\xe9\x87\x8f\xe5\xad\x90",
0,
6,
20,
);
x3(
b"(\xe3\x81\x82\xe3\x81\x84)(\xe3\x81\x86\xe3\x81\x88)",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88",
0,
6,
1,
);
x3(
b"(\xe3\x81\x82\xe3\x81\x84)(\xe3\x81\x86\xe3\x81\x88)",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88",
6,
12,
2,
);
x3(b"()(\xe3\x81\x82)\xe3\x81\x84\xe3\x81\x86(\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b)\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93", b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93", 9, 18, 3);
x3(b"(()(\xe3\x81\x82)\xe3\x81\x84\xe3\x81\x86(\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b)\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93)", b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93", 9, 18, 4);
x3(b".*(\xe3\x83\x95\xe3\x82\xa9)\xe3\x83\xb3\xe3\x83\xbb\xe3\x83\x9e(\xe3\x83\xb3()\xe3\x82\xb7\xe3\x83\xa5\xe3\x82\xbf)\xe3\x82\xa4\xe3\x83\xb3", b"\xe3\x83\x95\xe3\x82\xa9\xe3\x83\xb3\xe3\x83\xbb\xe3\x83\x9e\xe3\x83\xb3\xe3\x82\xb7\xe3\x83\xa5\xe3\x82\xbf\xe3\x82\xa4\xe3\x83\xb3", 15, 27, 2);
x2(b"(^\xe3\x81\x82)", b"\xe3\x81\x82", 0, 3);
x3(
b"(\xe3\x81\x82)|(\xe3\x81\x82)",
b"\xe3\x81\x84\xe3\x81\x82",
3,
6,
1,
);
x3(
b"(^\xe3\x81\x82)|(\xe3\x81\x82)",
b"\xe3\x81\x84\xe3\x81\x82",
3,
6,
2,
);
x3(
b"(\xe3\x81\x82?)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82",
9,
9,
1,
);
x3(
b"(\xe3\x81\xbe*)",
b"\xe3\x81\xbe\xe3\x81\xbe\xe3\x81\xbe",
9,
9,
1,
);
x3(b"(\xe3\x81\xa8*)", b"", 0, 0, 1);
x3(
b"(\xe3\x82\x8b+)",
b"\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b",
18,
21,
1,
);
x3(
b"(\xe3\x81\xb5+|\xe3\x81\xb8*)",
b"\xe3\x81\xb5\xe3\x81\xb5\xe3\x81\xb5\xe3\x81\xb8\xe3\x81\xb8",
15,
15,
1,
);
x3(
b"(\xe3\x81\x82+|\xe3\x81\x84?)",
b"\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82",
15,
15,
1,
);
x3(
b"(\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86)?",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
-1,
-1,
1,
);
x3(
b"(\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86)*",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
-1,
-1,
1,
);
x3(
b"(\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86)+",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
0,
9,
1,
);
x3(
b"(\xe3\x81\x95\xe3\x81\x97\xe3\x81\x99|\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86)+",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
0,
9,
1,
);
x3(b"([\xe3\x81\xaa\xe3\x81\xab\xe3\x81\xac][\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f]|\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f)+", b"\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f", 0, 9, 1);
x3(
b"((?i:\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86))",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86",
0,
9,
1,
);
x3(
b"((?m:\xe3\x81\x82.\xe3\x81\x86))",
b"\xe3\x81\x82\n\xe3\x81\x86",
0,
7,
1,
);
x3(
b"((?=\xe3\x81\x82\xe3\x82\x93)\xe3\x81\x82)",
b"\xe3\x81\x82\xe3\x82\x93\xe3\x81\x84",
0,
3,
1,
);
x3(
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86|(.\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88)",
b"\xe3\x82\x93\xe3\x81\x82\xe3\x81\x84\xe3\x81\x88",
0,
12,
1,
);
x3(
b"\xe3\x81\x82*(.)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x82\x93",
12,
15,
1,
);
x3(
b"\xe3\x81\x82*?(.)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x82\x93",
12,
15,
1,
);
x3(
b"\xe3\x81\x82*?(\xe3\x82\x93)",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x82\x93",
12,
15,
1,
);
x3(
b"[\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88]\xe3\x81\x82*(.)",
b"\xe3\x81\x88\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x82\x93",
15,
18,
1,
);
x3(
b"(\\A\xe3\x81\x84\xe3\x81\x84)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86",
0,
6,
1,
);
n(
b"(\\A\xe3\x81\x84\xe3\x81\x84)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x82\x93\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86",
);
}
// ============================================================================
// Section 17: tests 801-850
// ============================================================================
#[test]
fn back_section_17() {
x3(
b"(^\xe3\x81\x84\xe3\x81\x84)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86",
0,
6,
1,
);
n(
b"(^\xe3\x81\x84\xe3\x81\x84)\xe3\x81\x86\xe3\x81\x86",
b"\xe3\x82\x93\xe3\x81\x84\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86",
);
x3(
b"\xe3\x82\x8d\xe3\x82\x8d(\xe3\x82\x8b\xe3\x82\x8b$)",
b"\xe3\x82\x8d\xe3\x82\x8d\xe3\x82\x8b\xe3\x82\x8b",
6,
12,
1,
);
n(
b"\xe3\x82\x8d\xe3\x82\x8d(\xe3\x82\x8b\xe3\x82\x8b$)",
b"\xe3\x82\x8d\xe3\x82\x8d\xe3\x82\x8b\xe3\x82\x8b\xe3\x82\x8b",
);
x2(b"(\xe7\x84\xa1)\\1", b"\xe7\x84\xa1\xe7\x84\xa1", 0, 6);
n(b"(\xe7\x84\xa1)\\1", b"\xe7\x84\xa1\xe6\xad\xa6");
x2(b"(\xe7\xa9\xba?)\\1", b"\xe7\xa9\xba\xe7\xa9\xba", 6, 6);
x2(b"(\xe7\xa9\xba??)\\1", b"\xe7\xa9\xba\xe7\xa9\xba", 6, 6);
x2(
b"(\xe7\xa9\xba*)\\1",
b"\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba",
15,
15,
);
x3(
b"(\xe7\xa9\xba*)\\1",
b"\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba\xe7\xa9\xba",
15,
15,
1,
);
x2(
b"\xe3\x81\x82(\xe3\x81\x84*)\\1",
b"\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
0,
15,
);
x2(
b"\xe3\x81\x82(\xe3\x81\x84*)\\1",
b"\xe3\x81\x82\xe3\x81\x84",
0,
3,
);
x2(b"(\xe3\x81\x82*)(\xe3\x81\x84*)\\1\\2", b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84", 30, 30);
x2(
b"(\xe3\x81\x82*)(\xe3\x81\x84*)\\2",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
21,
21,
);
x3(
b"(\xe3\x81\x82*)(\xe3\x81\x84*)\\2",
b"\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84\xe3\x81\x84",
21,
21,
2,
);
x2(b"(((((((\xe3\x81\xbd*)\xe3\x81\xba))))))\xe3\x81\xb4\\7", b"\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xba\xe3\x81\xb4\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xbd", 9, 15);
x3(b"(((((((\xe3\x81\xbd*)\xe3\x81\xba))))))\xe3\x81\xb4\\7", b"\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xba\xe3\x81\xb4\xe3\x81\xbd\xe3\x81\xbd\xe3\x81\xbd", 9, 9, 7);
x2(
b"(\xe3\x81\xaf)(\xe3\x81\xb2)(\xe3\x81\xb5)\\2\\1\\3",
b"\xe3\x81\xaf\xe3\x81\xb2\xe3\x81\xb5\xe3\x81\xb2\xe3\x81\xaf\xe3\x81\xb5",
0,
18,
);
x2(
b"([\xe3\x81\x8d-\xe3\x81\x91])\\1",
b"\xe3\x81\x8f\xe3\x81\x8f",
0,
6,
);
x2(b"(\\w\\d\\s)\\1", b"\xe3\x81\x825 \xe3\x81\x825 ", 0, 10);
n(b"(\\w\\d\\s)\\1", b"\xe3\x81\x825 \xe3\x81\x825");
x2(
b"(\xe8\xaa\xb0\xef\xbc\x9f|[\xe3\x81\x82-\xe3\x81\x86]{3})\\1",
b"\xe8\xaa\xb0\xef\xbc\x9f\xe8\xaa\xb0\xef\xbc\x9f",
0,
12,
);
x2(
b"...(\xe8\xaa\xb0\xef\xbc\x9f|[\xe3\x81\x82-\xe3\x81\x86]{3})\\1",
b"\xe3\x81\x82a\xe3\x81\x82\xe8\xaa\xb0\xef\xbc\x9f\xe8\xaa\xb0\xef\xbc\x9f",
0,
19,
);
x2(
b"(\xe8\xaa\xb0\xef\xbc\x9f|[\xe3\x81\x82-\xe3\x81\x86]{3})\\1",
b"\xe3\x81\x86\xe3\x81\x84\xe3\x81\x86\xe3\x81\x86\xe3\x81\x84\xe3\x81\x86",
0,
18,
);
x2(b"(^\xe3\x81\x93)\\1", b"\xe3\x81\x93\xe3\x81\x93", 0, 6);
n(
b"(^\xe3\x82\x80)\\1",
b"\xe3\x82\x81\xe3\x82\x80\xe3\x82\x80",
);
n(b"(\xe3\x81\x82$)\\1", b"\xe3\x81\x82\xe3\x81\x82");
n(
b"(\xe3\x81\x82\xe3\x81\x84\\Z)\\1",
b"\xe3\x81\x82\xe3\x81\x84",
);
x2(b"(\xe3\x81\x82*\\Z)\\1", b"\xe3\x81\x82", 3, 3);
x2(b".(\xe3\x81\x82*\\Z)\\1", b"\xe3\x81\x84\xe3\x81\x82", 3, 6);
x3(
b"(.(\xe3\x82\x84\xe3\x81\x84\xe3\x82\x86)\\2)",
b"z\xe3\x82\x84\xe3\x81\x84\xe3\x82\x86\xe3\x82\x84\xe3\x81\x84\xe3\x82\x86",
0,
19,
1,
);
x3(b"(.(..\\d.)\\2)", b"\xe3\x81\x8212341234", 0, 11, 1);
x2(
b"((?i:\xe3\x81\x82v\xe3\x81\x9a))\\1",
b"\xe3\x81\x82v\xe3\x81\x9a\xe3\x81\x82v\xe3\x81\x9a",
0,
14,
);
x2(
b"(?<\xe6\x84\x9a\xe3\x81\x8b>\xe5\xa4\x89|\\(\\g<\xe6\x84\x9a\xe3\x81\x8b>\\))",
b"((((((\xe5\xa4\x89))))))",
6,
9,
);
x2(b"\\A(?:\\g<\xe9\x98\xbf_1>|\\g<\xe4\xba\x91_2>|\\z\xe7\xb5\x82\xe4\xba\x86 (?<\xe9\x98\xbf_1>\xe8\xa6\xb3|\xe8\x87\xaa\\g<\xe4\xba\x91_2>\xe8\x87\xaa)(?<\xe4\xba\x91_2>\xe5\x9c\xa8|\xe8\x8f\xa9\xe8\x96\xa9\\g<\xe9\x98\xbf_1>\xe8\x8f\xa9\xe8\x96\xa9))$", b"\xe8\x8f\xa9\xe8\x96\xa9\xe8\x87\xaa\xe8\x8f\xa9\xe8\x96\xa9\xe8\x87\xaa\xe5\x9c\xa8\xe8\x87\xaa\xe8\x8f\xa9\xe8\x96\xa9\xe8\x87\xaa\xe8\x8f\xa9\xe8\x96\xa9", 0, 39);
x2(b"[[\xe3\x81\xb2\xe3\x81\xb5]]", b"\xe3\x81\xb5", 0, 3);
x2(
b"[[\xe3\x81\x84\xe3\x81\x8a\xe3\x81\x86]\xe3\x81\x8b]",
b"\xe3\x81\x8b",
0,
3,
);
n(b"[[^\xe3\x81\x82]]", b"\xe3\x81\x82");
n(b"[^[\xe3\x81\x82]]", b"\xe3\x81\x82");
x2(b"[^[^\xe3\x81\x82]]", b"\xe3\x81\x82", 0, 3);
x2(
b"[[\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f]&&\xe3\x81\x8d\xe3\x81\x8f]",
b"\xe3\x81\x8f",
0,
3,
);
n(
b"[[\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f]&&\xe3\x81\x8d\xe3\x81\x8f]",
b"\xe3\x81\x8b",
);
n(
b"[[\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f]&&\xe3\x81\x8d\xe3\x81\x8f]",
b"\xe3\x81\x91",
);
x2(
b"[\xe3\x81\x82-\xe3\x82\x93&&\xe3\x81\x84-\xe3\x82\x92&&\xe3\x81\x86-\xe3\x82\x91]",
b"\xe3\x82\x91",
0,
3,
);
n(
b"[^\xe3\x81\x82-\xe3\x82\x93&&\xe3\x81\x84-\xe3\x82\x92&&\xe3\x81\x86-\xe3\x82\x91]",
b"\xe3\x82\x91",
);
x2(
b"[[^\xe3\x81\x82&&\xe3\x81\x82]&&\xe3\x81\x82-\xe3\x82\x93]",
b"\xe3\x81\x84",
0,
3,
);
n(
b"[[^\xe3\x81\x82&&\xe3\x81\x82]&&\xe3\x81\x82-\xe3\x82\x93]",
b"\xe3\x81\x82",
);
x2(b"[[^\xe3\x81\x82-\xe3\x82\x93&&\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]&&[^\xe3\x81\x86-\xe3\x81\x8b]]", b"\xe3\x81\x8d", 0, 3);
n(b"[[^\xe3\x81\x82-\xe3\x82\x93&&\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]&&[^\xe3\x81\x86-\xe3\x81\x8b]]", b"\xe3\x81\x84");
x2(
b"[^[^\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]]",
b"\xe3\x81\x86",
0,
3,
);
}
// ============================================================================
// Section 18: tests 851-900
// ============================================================================
#[test]
fn back_section_18() {
x2(
b"[^[^\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]]",
b"\xe3\x81\x88",
0,
3,
);
n(
b"[^[^\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]]",
b"\xe3\x81\x8b",
);
x2(b"[\xe3\x81\x82-&&-\xe3\x81\x82]", b"-", 0, 1);
x2(b"[^[^a-z\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^bcdefg\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]q-w]", b"\xe3\x81\x88", 0, 3);
x2(b"[^[^a-z\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^bcdefg\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]g-w]", b"f", 0, 1);
x2(b"[^[^a-z\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^bcdefg\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]g-w]", b"g", 0, 1);
n(b"[^[^a-z\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86]&&[^bcdefg\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a]g-w]", b"2");
x2(b"a<b>\xe3\x83\x90\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa7\xe3\x83\xb3\xe3\x81\xae\xe3\x83\x80\xe3\x82\xa6\xe3\x83\xb3\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x89<\\/b>", b"a<b>\xe3\x83\x90\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa7\xe3\x83\xb3\xe3\x81\xae\xe3\x83\x80\xe3\x82\xa6\xe3\x83\xb3\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x89</b>", 0, 44);
x2(b".<b>\xe3\x83\x90\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa7\xe3\x83\xb3\xe3\x81\xae\xe3\x83\x80\xe3\x82\xa6\xe3\x83\xb3\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x89<\\/b>", b"a<b>\xe3\x83\x90\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa7\xe3\x83\xb3\xe3\x81\xae\xe3\x83\x80\xe3\x82\xa6\xe3\x83\xb3\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x89</b>", 0, 44);
x2(
b"\\n?\\z",
b"\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf",
15,
15,
);
x2(b"(?m).*", b"\xe9\x9d\x92\xe8\xb5\xa4\xe9\xbb\x84", 9, 9);
x2(b"(?m).*a", b"\xe9\x9d\x92\xe8\xb5\xa4\xe9\xbb\x84a", 9, 10);
x2(b"\\p{Hiragana}", b"\xe3\x81\xb4", 0, 3);
n(b"\\P{Hiragana}", b"\xe3\x81\xb4");
x2(b"\\p{Emoji}", b"\xe2\xad\x90", 0, 3);
x2(b"\\p{^Emoji}", b"\xef\xbc\x93", 0, 3);
x2(b"\\p{Extended_Pictographic}", b"\xe2\x9a\xa1", 0, 3);
n(b"\\p{Extended_Pictographic}", b"\xe3\x81\x82");
x2(b"\\p{Word}", b"\xe3\x81\x93", 0, 3);
n(b"\\p{^Word}", b"\xe3\x81\x93");
x2(b"[\\p{Word}]", b"\xe3\x81\x93", 0, 3);
n(b"[\\p{^Word}]", b"\xe3\x81\x93");
n(b"[^\\p{Word}]", b"\xe3\x81\x93");
x2(b"[^\\p{^Word}]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\p{^Word}&&\\p{ASCII}]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\p{^Word}&&\\p{ASCII}]", b"a", 0, 1);
n(b"[^\\p{^Word}&&\\p{ASCII}]", b"#");
x2(b"[^[\\p{^Word}]&&[\\p{ASCII}]]", b"\xe3\x81\x93", 0, 3);
x2(b"[^[\\p{ASCII}]&&[^\\p{Word}]]", b"\xe3\x81\x93", 0, 3);
n(b"[[\\p{ASCII}]&&[^\\p{Word}]]", b"\xe3\x81\x93");
x2(b"[^[\\p{^Word}]&&[^\\p{ASCII}]]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\x{104a}]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\p{^Word}&&[^\\x{104a}]]", b"\xe3\x81\x93", 0, 3);
x2(b"[^[\\p{^Word}]&&[^\\x{104a}]]", b"\xe3\x81\x93", 0, 3);
n(b"[^\\p{Word}||[^\\x{104a}]]", b"\xe3\x81\x93");
x2(b"\\p{^Cntrl}", b"\xe3\x81\x93", 0, 3);
n(b"\\p{Cntrl}", b"\xe3\x81\x93");
x2(b"[\\p{^Cntrl}]", b"\xe3\x81\x93", 0, 3);
n(b"[\\p{Cntrl}]", b"\xe3\x81\x93");
n(b"[^\\p{^Cntrl}]", b"\xe3\x81\x93");
x2(b"[^\\p{Cntrl}]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\p{Cntrl}&&\\p{ASCII}]", b"\xe3\x81\x93", 0, 3);
x2(b"[^\\p{Cntrl}&&\\p{ASCII}]", b"a", 0, 1);
n(b"[^\\p{^Cntrl}&&\\p{ASCII}]", b"#");
x2(b"[^[\\p{^Cntrl}]&&[\\p{ASCII}]]", b"\xe3\x81\x93", 0, 3);
x2(b"[^[\\p{ASCII}]&&[^\\p{Cntrl}]]", b"\xe3\x81\x93", 0, 3);
n(b"[[\\p{ASCII}]&&[^\\p{Cntrl}]]", b"\xe3\x81\x93");
n(b"[^[\\p{^Cntrl}]&&[^\\p{ASCII}]]", b"\xe3\x81\x93");
n(b"[^\\p{^Cntrl}&&[^\\x{104a}]]", b"\xe3\x81\x93");
n(b"[^[\\p{^Cntrl}]&&[^\\x{104a}]]", b"\xe3\x81\x93");
}
// ============================================================================
// Section 19: tests 901-950
// ============================================================================
#[test]
fn back_section_19() {
n(b"[^\\p{Cntrl}||[^\\x{104a}]]", b"\xe3\x81\x93");
x2(b"(?-W:\\p{Word})", b"\xe3\x81\x93", 0, 3);
n(b"(?W:\\p{Word})", b"\xe3\x81\x93");
x2(b"(?W:\\p{Word})", b"k", 0, 1);
x2(b"(?-W:[[:word:]])", b"\xe3\x81\x93", 0, 3);
n(b"(?W:[[:word:]])", b"\xe3\x81\x93");
x2(b"(?-D:\\p{Digit})", b"\xef\xbc\x93", 0, 3);
n(b"(?D:\\p{Digit})", b"\xef\xbc\x93");
x2(b"(?-S:\\p{Space})", b"\xc2\x85", 0, 2);
n(b"(?S:\\p{Space})", b"\xc2\x85");
x2(b"(?-P:\\p{Word})", b"\xe3\x81\x93", 0, 3);
n(b"(?P:\\p{Word})", b"\xe3\x81\x93");
x2(b"(?-W:\\w)", b"\xe3\x81\x93", 0, 3);
n(b"(?W:\\w)", b"\xe3\x81\x93");
x2(b"(?-W:\\w)", b"k", 0, 1);
x2(b"(?W:\\w)", b"k", 0, 1);
n(b"(?-W:\\W)", b"\xe3\x81\x93");
x2(b"(?W:\\W)", b"\xe3\x81\x93", 0, 3);
n(b"(?-W:\\W)", b"k");
n(b"(?W:\\W)", b"k");
x2(b"(?-W:\\b)", b"\xe3\x81\x93", 3, 3);
n(b"(?W:\\b)", b"\xe3\x81\x93");
x2(b"(?-W:\\b)", b"h", 1, 1);
x2(b"(?W:\\b)", b"h", 1, 1);
n(b"(?-W:\\B)", b"\xe3\x81\x93");
x2(b"(?W:\\B)", b"\xe3\x81\x93", 3, 3);
n(b"(?-W:\\B)", b"h");
n(b"(?W:\\B)", b"h");
x2(b"(?-P:\\b)", b"\xe3\x81\x93", 3, 3);
n(b"(?P:\\b)", b"\xe3\x81\x93");
x2(b"(?-P:\\b)", b"h", 1, 1);
x2(b"(?P:\\b)", b"h", 1, 1);
n(b"(?-P:\\B)", b"\xe3\x81\x93");
x2(b"(?P:\\B)", b"\xe3\x81\x93", 3, 3);
n(b"(?-P:\\B)", b"h");
n(b"(?P:\\B)", b"h");
x2(b"\\p{InBasicLatin}", b"\x41", 0, 1);
n(b".\\y\\O", b"\x0d\x0a");
x2(b".\\Y\\O", b"\x0d\x0a", 0, 2);
n(b"^.\\y.$", b"\x67\xcc\x88");
x2(b".\\Y.", b"\x67\xcc\x88", 0, 3);
x2(b"\\y.\\Y.\\y", b"\x67\xcc\x88", 0, 3);
x2(b"\\y.\\y", b"\xea\xb0\x81", 0, 3);
x2(
b"^.\\Y.\\Y.$",
b"\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8",
0,
9,
);
n(b"^.\\y.\\Y.$", b"\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8");
x2(b".\\Y.", b"\xe0\xae\xa8\xe0\xae\xbf", 0, 6);
n(b".\\y.", b"\xe0\xae\xa8\xe0\xae\xbf");
x2(b".\\Y.", b"\xe0\xb8\x81\xe0\xb8\xb3", 0, 6);
n(b".\\y.", b"\xe0\xb8\x81\xe0\xb8\xb3");
x2(b".\\Y.", b"\xe0\xa4\xb7\xe0\xa4\xbf", 0, 6);
}
// ============================================================================
// Section 20: tests 951-1000
// ============================================================================
#[test]
fn back_section_20() {
n(b".\\y.", b"\xe0\xa4\xb7\xe0\xa4\xbf");
x2(b"..\\Y.", b"\xe3\x80\xb0\xe2\x80\x8d\xe2\xad\x95", 0, 9);
x2(
b"...\\Y.",
b"\xe3\x80\xb0\xcc\x82\xe2\x80\x8d\xe2\xad\x95",
0,
11,
);
n(b"...\\Y.", b"\xe3\x80\xb0\xcd\xb0\xe2\x80\x8d\xe2\xad\x95");
n(b"^\\X\\X$", b"\x0d\x0a");
x2(b"^\\X$", b"\x0d\x0a", 0, 2);
n(b"^\\X\\X.$", b"\x67\xcc\x88");
x2(b"^\\X$", b"\x67\xcc\x88", 0, 3);
x2(b"^\\X$", b"\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8", 0, 9);
n(b"^\\X\\X\\X$", b"\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8");
x2(b"^\\X$", b"\xe0\xae\xa8\xe0\xae\xbf", 0, 6);
n(b"\\X\\X", b"\xe0\xae\xa8\xe0\xae\xbf");
x2(b"^\\X$", b"\xe0\xb8\x81\xe0\xb8\xb3", 0, 6);
n(b"\\X\\X", b"\xe0\xb8\x81\xe0\xb8\xb3");
x2(b"^\\X$", b"\xe0\xa4\xb7\xe0\xa4\xbf", 0, 6);
n(b"\\X\\X", b"\xe0\xa4\xb7\xe0\xa4\xbf");
n(b"^\\X.$", b"\xe0\xae\xa8\xe0\xae\xbf");
x2(b"h\\Xllo", b"ha\xcc\x80llo", 0, 7);
x2(b"(?y{g})\\yabc\\y", b"abc", 0, 3);
x2(b"(?y{g})\\y\\X\\y", b"abc", 2, 3);
x2(b"(?y{w})\\yabc\\y", b"abc", 0, 3);
x2(b"(?y{w})\\y\\X", b"\r\n", 0, 2);
x2(b"(?y{w})\\X", b"\x0cz", 1, 2);
x2(b"(?y{w})\\X", b"q\x0c", 1, 2);
x2(b"(?y{w})\\y\\X", b"\xe2\x80\x8d\xe2\x9d\x87", 0, 6);
x2(b"(?y{w})\\y\\X", b"\x20\x20", 0, 2);
x2(b"(?y{w})\\y\\X", b"a\xe2\x80\x8d", 0, 4);
x2(b"(?y{w})\\y\\X\\y", b"abc", 0, 3);
x2(b"(?y{w})\\y\\X\\y", b"v\xce\x87w", 0, 4);
x2(b"(?y{w})\\y\\X\\y", b"\xd7\x93\x27", 0, 3);
x2(b"(?y{w})\\y\\X\\y", b"\xd7\x93\x22\xd7\x93", 0, 5);
x2(b"(?y{w})\\y\\X", b"14 45", 3, 5);
x2(b"(?y{w})\\y\\X", b"a14", 0, 3);
x2(b"(?y{w})\\y\\X", b"832e", 0, 4);
x2(b"(?y{w})\\y\\X", b"8\xef\xbc\x8c\xdb\xb0", 0, 6);
x2(b"(?y{w})\\y\\X\\y", b"\xe3\x82\xb1\xe3\x83\xb3", 0, 6);
x2(
b"(?y{w})\\y\\X\\y",
b"\xe3\x82\xb1\xe3\x83\xb3\xe2\x80\xaf\xe3\x82\xbf",
0,
12,
);
x2(b"(?y{w})\\y\\X\\y", b"\x21\x23", 1, 2);
x2(b"(?y{w})\\y\\X\\y", b"\xe5\xb1\xb1\xe3\x82\xa2", 3, 6);
x2(b"(?y{w})\\y\\X", b"3.14", 0, 4);
x2(b"(?y{w})\\y\\X", b"3 14", 2, 4);
x2(b"\\x40", b"@", 0, 1);
x2(b"\\x1", b"\x01", 0, 1);
x2(b"\\x{1}", b"\x01", 0, 1);
x2(b"\\x{4E38}", b"\xe4\xb8\xb8", 0, 3);
x2(b"\\u4E38", b"\xe4\xb8\xb8", 0, 3);
x2(b"\\u0040", b"@", 0, 1);
x2(b"c.*\\b", b"abc", 2, 3);
x2(b"\\b.*abc.*\\b", b"abc", 0, 3);
x2(b"((?()0+)+++(((0\\g<0>)0)|())++++((?(1)(0\\g<0>))++++++0*())++++((?(1)(0\\g<1>)+)++++++++++*())++++((?(1)((0)\\g<0>)+)++())+0++*+++(((0\\g<0>))*())++++((?(1)(0\\g<0>)+)++++++++++*|)++++*+++((?(1)((0)\\g<0>)+)+++++++++())++*|)++++((?()0))|", b"abcde", 5, 5);
}
// ============================================================================
// Section 21: tests 1001-1050
// ============================================================================
#[test]
fn back_section_21() {
n(b"(*FAIL)", b"abcdefg");
n(b"abcd(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)(*FAIL)", b"abcdefg");
x2(b"(?:[ab]|(*MAX{2}).)*", b"abcbaaccaaa", 11, 11);
x2(
b"(?:(*COUNT[AB]{X})[ab]|(*COUNT[CD]{X})[cd])*(*CMP{AB,<,CD})",
b"abababcdab",
7,
8,
);
x2(b"(?(?{....})123|456)", b"123", 0, 3);
x2(b"(?(*FAIL)123|456)", b"456", 0, 3);
x2(b"\\g'0'++{,0}", b"abcdefgh", 8, 8);
x2(b"\\g'0'++{,0}?", b"abcdefgh", 8, 8);
x2(b"\\g'0'++{,0}b", b"abcdefgh", 1, 2);
x2(b"\\g'0'++{,0}?def", b"abcdefgh", 3, 6);
x2(b"a{1,3}?", b"aaa", 2, 3);
x2(b"a{3}", b"aaa", 0, 3);
x2(b"a{3}?", b"aaa", 3, 3);
x2(b"a{3}?", b"aa", 2, 2);
x2(b"a{3,3}?", b"aaa", 0, 3);
n(b"a{3,3}?", b"aa");
x2(b"a{1,3}+", b"aaaaaa", 5, 6);
x2(b"a{3}+", b"aaaaaa", 3, 6);
x2(b"a{3,3}+", b"aaaaaa", 3, 6);
n(b"a{2,3}?", b"a");
n(b"a{3,2}a", b"aaa");
x2(b"a{3,2}b", b"aaab", 1, 4);
x2(b"a{3,2}b", b"aaaab", 2, 5);
x2(b"a{3,2}b", b"aab", 0, 3);
x2(b"a{3,2}?", b"", 0, 0);
x2(b"a{2,3}+a", b"aaa", 0, 3);
x2(b"[\\x{0}-\\x{7fffffff}]", b"a", 0, 1);
x2(b"[\\x{7f}-\\x{7fffffff}]", b"\xe5\xae\xb6", 0, 3);
x2(b"[a[cdef]]", b"a", 0, 1);
n(b"[a[xyz]-c]", b"b");
x2(b"[a[xyz]-c]", b"a", 0, 1);
x2(b"[a[xyz]-c]", b"-", 0, 1);
x2(b"[a[xyz]-c]", b"c", 0, 1);
x2(b"(a.c|def)(.{4})(?<=\\1)", b"abcdabc", 0, 7);
x2(b"(a.c|de)(.{4})(?<=\\1)", b"abcdabc", 0, 7);
x2(b"(a.c|def)(.{5})(?<=d\\1e)", b"abcdabce", 0, 8);
x2(b"(a.c|.)d(?<=\\k<1>d)", b"zzzzzabcdabc", 7, 9);
x2(b"(?<=az*)abc", b"azzzzzzzzzzabcdabcabc", 11, 14);
x2(b"(?<=ab|abc|abcd)ef", b"abcdef", 4, 6);
x2(b"(?<=ta+|tb+|tc+|td+)zz", b"tcccccccccczz", 11, 13);
x2(b"(?<=t.{7}|t.{5}|t.{2}|t.)zz", b"tczz", 2, 4);
x2(b"(?<=t.{7}|t.{5}|t.{2})zz", b"tczzzz", 3, 5);
x2(b"(?<=t.{7}|t.{5}|t.{3})zz", b"tczzazzbzz", 8, 10);
n(b"(?<=t.{7}|t.{5}|t.{3})zz", b"tczzazzbczz");
x2(b"(?<=(ab|abc|abcd))ef", b"abcdef", 4, 6);
x2(b"(?<=(ta+|tb+|tc+|td+))zz", b"tcccccccccczz", 11, 13);
x2(b"(?<=(t.{7}|t.{5}|t.{2}|t.))zz", b"tczz", 2, 4);
x2(b"(?<=(t.{7}|t.{5}|t.{2}))zz", b"tczzzz", 3, 5);
x2(b"(?<=(t.{7}|t.{5}|t.{3}))zz", b"tczzazzbzz", 8, 10);
n(b"(?<=(t.{7}|t.{5}|t.{3}))zz", b"tczzazzbczz");
}
// ============================================================================
// Section 22: tests 1051-1100
// ============================================================================
#[test]
fn back_section_22() {
x2(b"(.{1,4})(.{1,4})(?<=\\2\\1)", b"abaaba", 2, 4);
x2(b"(.{1,4})(.{1,4})(?<=\\2\\1)", b"ababab", 2, 6);
n(b"(.{1,4})(.{1,4})(?<=\\2\\1)", b"abcdabce");
x2(b"(.{1,4})(.{1,4})(?<=\\2\\1)", b"abcdabceabce", 4, 12);
x2(b"(?<=a)", b"a", 1, 1);
x2(b"(?<=a.*\\w)z", b"abbbz", 4, 5);
n(b"(?<=a.*\\w)z", b"abb z");
x2(b"(?<=a.*\\W)z", b"abb z", 4, 5);
x2(b"(?<=a.*\\b)z", b"abb z", 4, 5);
x2(b"(?<=(?>abc))", b"abc", 3, 3);
x2(b"(?<=a\\Xz)", b"abz", 3, 3);
n(b"(?<=^a*)bc", b"zabc");
n(b"(?<=a*\\b)b", b"abc");
x2(b"(?<=a+.*[efg])z", b"abcdfz", 5, 6);
x2(b"(?<=a+.*[efg])z", b"abcdfgz", 6, 7);
n(b"(?<=a+.*[efg])z", b"bcdfz");
x2(b"(?<=a*.*[efg])z", b"bcdfz", 4, 5);
n(b"(?<=a+.*[efg])z", b"abcdz");
x2(b"(?<=v|t|a+.*[efg])z", b"abcdfz", 5, 6);
x2(b"(?<=v|t|^a+.*[efg])z", b"abcdfz", 5, 6);
x2(b"(?<=^(?:v|t|a+.*[efg]))z", b"abcdfz", 5, 6);
x2(b"(?<=v|^t|a+.*[efg])z", b"uabcdfz", 6, 7);
n(b"^..(?<=(a{,2}))\\1z", b"aaaaz");
x2(b"^..(?<=(a{,2}))\\1z", b"aaz", 0, 3);
e(
b"(?<=(?~|zoo)a.*z)",
b"abcdefz",
ONIGERR_INVALID_LOOK_BEHIND_PATTERN,
);
e(
b"(?<=(?~|)a.*z)",
b"abcdefz",
ONIGERR_INVALID_LOOK_BEHIND_PATTERN,
);
e(
b"(a(?~|boo)z){0}(?<=\\g<1>)",
b"abcdefz",
ONIGERR_INVALID_LOOK_BEHIND_PATTERN,
);
x2(b"(?<=(?<= )| )", b"abcde fg", 6, 6);
x2(
b"(?<=D|)(?<=@!nnnnnnnnnIIIIn;{1}D?()|<x@x*xxxD|)(?<=@xxx|xxxxx\\g<1>;{1}x)",
b"(?<=D|)(?<=@!nnnnnnnnnIIIIn;{1}D?()|<x@x*xxxD|)(?<=@xxx|xxxxx\\g<1>;{1}x)",
55,
55,
);
x2(b"(?<=;()|)\\g<1>", b"", 0, 0);
x2(b"(?<=;()|)\\k<1>", b";", 1, 1);
x2(b"(())\\g<3>{0}(?<=|())", b"abc", 3, 3);
x2(b"(?<=()|)\\1{0}", b"abc", 3, 3);
e(b"(?<!xxxxxxxxxxxxxxxxxxxxxxx{32774}{65521}xxxxxxxx{65521}xxxxxxxxxxxxxx{32774}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)", b"", ONIGERR_INVALID_LOOK_BEHIND_PATTERN);
x2(b"(?<=(?<=abc))def", b"abcdef", 3, 6);
x2(b"(?<=ab(?<=.+b)c)def", b"abcdef", 3, 6);
n(b"(?<=ab(?<=a+)c)def", b"abcdef");
n(b"(?<=abc)(?<!abc)def", b"abcdef");
n(b"(?<!ab.)(?<=.bc)def", b"abcdef");
x2(b"(?<!ab.)(?<=.bc)def", b"abcdefcbcdef", 9, 12);
n(b"(?<!abc)def", b"abcdef");
n(b"(?<!xxx|abc)def", b"abcdef");
n(b"(?<!xxxxx|abc)def", b"abcdef");
n(b"(?<!xxxxx|abc)def", b"xxxxxxdef");
n(b"(?<!x+|abc)def", b"abcdef");
n(b"(?<!x+|abc)def", b"xxxxxxxxxdef");
x2(b"(?<!x+|abc)def", b"xxxxxxxxzdef", 9, 12);
n(b"(?<!a.*z|a)def", b"axxxxxxxzdef");
n(b"(?<!a.*z|a)def", b"bxxxxxxxadef");
x2(b"(?<!a.*z|a)def", b"axxxxxxxzdefxxdef", 14, 17);
}
// ============================================================================
// Section 23: tests 1101-1150
// ============================================================================
#[test]
fn back_section_23() {
x2(b"(?<!a.*z|a)def", b"bxxxxxxxadefxxdef", 14, 17);
x2(b"(?<!a.*z|a)def", b"bxxxxxxxzdef", 9, 12);
x2(b"(?<!x+|y+)\\d+", b"xxx572", 5, 6);
x2(b"(?<!3+|4+)\\d+", b"33334444", 0, 8);
n(b".(?<!3+|4+)\\d+", b"33334444");
n(b"(.{,3})..(?<!\\1)", b"aaaaa");
x2(b"(.{,3})..(?<!\\1)", b"abcde", 2, 5);
x2(b"(.{,3})...(?<!\\1)", b"abcde", 1, 5);
x2(b"(a.c)(.{3,}?)(?<!\\1)", b"abcabcd", 0, 7);
x2(b"(a*)(.{3,}?)(?<!\\1)", b"abcabcd", 3, 7);
x2(b"(?:(a.*b)|c.*d)(?<!(?(1))azzzb)", b"azzzzb", 0, 6);
n(b"(?:(a.*b)|c.*d)(?<!(?(1))azzzb)", b"azzzb");
x2(b"<(?<!NT{+}abcd)", b"<(?<!NT{+}abcd)", 3, 4);
x2(b"(?<!a.*c)def", b"abbbbdef", 5, 8);
n(b"(?<!a.*c)def", b"abbbcdef");
x2(b"(?<!a.*X\\b)def", b"abbbbbXdef", 7, 10);
n(b"(?<!a.*X\\B)def", b"abbbbbXdef");
x2(b"(?<!a.*[uvw])def", b"abbbbbXdef", 7, 10);
n(b"(?<!a.*[uvw])def", b"abbbbbwdef");
x2(b"(?<!ab*\\S+)def", b"abbbbb def", 9, 12);
x2(b"(?<!a.*\\S)def", b"abbbbb def", 7, 10);
n(b"(?<!ab*\\s+)def", b"abbbbb def");
x2(b"(?<!ab*\\s+\\B)def", b"abbbbb def", 9, 12);
n(b"(?<!v|t|a+.*[efg])z", b"abcdfz");
x2(b"(?<!v|t|a+.*[efg])z", b"abcdfzavzuz", 10, 11);
n(b"(?<!v|t|^a+.*[efg])z", b"abcdfz");
n(b"(?<!^(?:v|t|a+.*[efg]))z", b"abcdfz");
x2(b"(?<!v|^t|^a+.*[efg])z", b"uabcdfz", 6, 7);
x2(b"((?(a)\\g<1>|b))", b"aab", 2, 3);
x2(b"((?(a)\\g<1>))", b"aab", 3, 3);
x2(b"(b(?(a)|\\g<1>))", b"bba", 1, 3);
e(b"(()(?(2)\\g<1>))", b"", ONIGERR_NEVER_ENDING_RECURSION);
x2(b"(?(a)(?:b|c))", b"ac", 2, 2);
n(b"^(?(a)b|c)", b"ac");
x2(b"(?i)a|b", b"B", 0, 1);
n(b"((?i)a|b.)|c", b"C");
n(b"c(?i)a.|b.", b"Caz");
x2(b"c(?i)a|b", b"cB", 0, 2);
x2(b"c(?i)a.|b.", b"cBb", 0, 3);
x2(b"(?i)st", b"st", 0, 2);
x2(b"(?i)st", b"St", 0, 2);
x2(b"(?i)st", b"sT", 0, 2);
x2(b"(?i)st", b"\xc5\xbft", 0, 3);
x2(b"(?i)st", b"\xef\xac\x85", 0, 3);
x2(b"(?i)st", b"\xef\xac\x86", 0, 3);
x2(b"(?i)ast", b"Ast", 0, 3);
x2(b"(?i)ast", b"ASt", 0, 3);
x2(b"(?i)ast", b"AsT", 0, 3);
x2(b"(?i)ast", b"A\xc5\xbft", 0, 4);
x2(b"(?i)ast", b"A\xef\xac\x85", 0, 4);
}
// ============================================================================
// Section 24: tests 1151-1200
// ============================================================================
#[test]
fn back_section_24() {
x2(b"(?i)ast", b"A\xef\xac\x86", 0, 4);
x2(b"(?i)stZ", b"stz", 0, 3);
x2(b"(?i)stZ", b"Stz", 0, 3);
x2(b"(?i)stZ", b"sTz", 0, 3);
x2(b"(?i)stZ", b"\xc5\xbftz", 0, 4);
x2(b"(?i)stZ", b"\xef\xac\x85z", 0, 4);
x2(b"(?i)stZ", b"\xef\xac\x86z", 0, 4);
x2(b"(?i)BstZ", b"bstz", 0, 4);
x2(b"(?i)BstZ", b"bStz", 0, 4);
x2(b"(?i)BstZ", b"bsTz", 0, 4);
x2(b"(?i)BstZ", b"b\xc5\xbftz", 0, 5);
x2(b"(?i)BstZ", b"b\xef\xac\x85z", 0, 5);
x2(b"(?i)BstZ", b"b\xef\xac\x86z", 0, 5);
x2(b"(?i).*st\\z", b"tttssss\xc5\xbft", 7, 10);
x2(b"(?i).*st\\z", b"tttssss\xef\xac\x85", 7, 10);
x2(b"(?i).*st\\z", b"tttssss\xef\xac\x86", 7, 10);
x2(
b"(?i).*\xe3\x81\x82st\xe3\x81\x84\\z",
b"tttssss\xe3\x81\x82\xc5\xbft\xe3\x81\x84",
7,
16,
);
x2(
b"(?i).*\xe3\x81\x82st\xe3\x81\x84\\z",
b"tttssss\xe3\x81\x82\xef\xac\x85\xe3\x81\x84",
7,
16,
);
x2(
b"(?i).*\xe3\x81\x82st\xe3\x81\x84\\z",
b"tttssss\xe3\x81\x82\xef\xac\x86\xe3\x81\x84",
7,
16,
);
x2(b"(?i).*\xc5\xbft\\z", b"tttssssst", 7, 9);
x2(b"(?i).*\xef\xac\x85\\z", b"tttssss\xe3\x81\x82st", 10, 12);
x2(
b"(?i).*\xef\xac\x86\xe3\x81\x84\\z",
b"tttssssst\xe3\x81\x84",
7,
12,
);
x2(
b"(?i).*\xef\xac\x85\\z",
b"tttssss\xe3\x81\x82\xef\xac\x85",
10,
13,
);
x2(b"(?i).*ss", b"abcdefghijklmnopqrstuvwxyz\xc3\x9f", 26, 28);
x2(
b"(?i).*ss.*",
b"abcdefghijklmnopqrstuvwxyz\xc3\x9fxyz",
26,
31,
);
x2(b"(?i).*\xc3\x9f", b"abcdefghijklmnopqrstuvwxyzss", 26, 28);
x2(b"(?i).*ss.*", b"abcdefghijklmnopqrstuvwxyzSSxyz", 26, 31);
x2(b"(?i)ssv", b"\xc3\x9fv", 0, 3);
x2(b"(?i)(?<=ss)v", b"SSv", 2, 3);
x2(b"(?i)(?<=\xc3\x9f)v", b"\xc3\x9fv", 2, 3);
x2(b"(?i).+Isss\xc7\xb0", b".+Isss\xc7\xb0", 1, 8);
x2(b".+Isss\xc7\xb0", b".+Isss\xc7\xb0", 1, 8);
x2(b"(?i)\xc7\xb0", b"\xc7\xb0", 0, 2);
x2(b"(?i)\xc7\xb0", b"j\xcc\x8c", 0, 3);
x2(b"(?i)j\xcc\x8c", b"\xc7\xb0", 0, 2);
x2(b"(?i)5\xc7\xb0", b"5\xc7\xb0", 0, 3);
x2(b"(?i)5\xc7\xb0", b"5j\xcc\x8c", 0, 4);
x2(b"(?i)5j\xcc\x8c", b"5\xc7\xb0", 0, 3);
x2(b"(?i)\xc7\xb0v", b"\xc7\xb0V", 0, 3);
x2(b"(?i)\xc7\xb0v", b"j\xcc\x8cV", 0, 4);
x2(b"(?i)j\xcc\x8cv", b"\xc7\xb0V", 0, 3);
x2(b"(?i)[\xc7\xb0]", b"\xc7\xb0", 0, 2);
x2(b"(?i)[\xc7\xb0]", b"j\xcc\x8c", 0, 3);
x2(b"(?i)\xef\xac\x80a", b"ffa", 0, 3);
x2(b"(?i)ffz", b"\xef\xac\x80z", 0, 4);
x2(b"(?i)\xe2\x84\xa6", b"\xcf\x89", 0, 2);
x2(b"a(?i)\xe2\x84\xa6", b"a\xcf\x89", 0, 3);
x2(b"(?i)A\xe2\x84\xa6", b"a\xcf\x89", 0, 3);
x2(b"(?i)A\xe2\x84\xa6=", b"a\xcf\x89=", 0, 4);
x2(b"(?i:ss)=1234567890", b"\xc5\xbf\xc5\xbf=1234567890", 0, 15);
}
// ============================================================================
// Section 25: tests 1201-1225
// ============================================================================
#[test]
fn back_section_25() {
n(b"a(b|)+d", b"abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcd");
e(b" \xfd", b"", ONIGERR_INVALID_CODE_POINT_VALUE);
e(
b"()0\\xfc00000\\xfc00000\\xfc00000\xfc",
b"",
ONIGERR_INVALID_CODE_POINT_VALUE,
);
e(b"000||0\xfa", b"0", ONIGERR_INVALID_CODE_POINT_VALUE);
e(
b"(?i)000000000000000000000\xf0",
b"",
ONIGERR_INVALID_CODE_POINT_VALUE,
);
e(b"0000\\\xf5", b"0", ONIGERR_INVALID_CODE_POINT_VALUE);
e(
b"(?i)FFF00000000000000000\xfd",
b"",
ONIGERR_INVALID_CODE_POINT_VALUE,
);
e(
b"x{55380}{77590}",
b"",
ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE,
);
e(
b"(xyz){40000}{99999}(?<name>vv)",
b"",
ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE,
);
e(
b"f{90000,90000}{80000,80000}",
b"",
ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE,
);
n(b"f{90000,90000}{80000,80001}", b"");
x2(b"\\p{Common}", b"\xe3\x8b\xbf", 0, 3);
x2(
b"\\p{In_Enclosed_CJK_Letters_and_Months}",
b"\xe3\x8b\xbf",
0,
3,
);
e(b"\\x{7fffffff}", b"", ONIGERR_INVALID_CODE_POINT_VALUE);
e(b"[\\x{7fffffff}]", b"", ONIGERR_INVALID_CODE_POINT_VALUE);
e(b"\\u040", b"@", ONIGERR_INVALID_CODE_POINT_VALUE);
e(b"(?<abc>\\g<abc>)", b"zzzz", ONIGERR_NEVER_ENDING_RECURSION);
e(b"(*FOO)", b"abcdefg", ONIGERR_UNDEFINED_CALLOUT_NAME);
e(
b"*",
b"abc",
ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED,
);
e(
b"|*",
b"abc",
ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED,
);
e(
b"(?i)*",
b"abc",
ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED,
);
e(
b"(?:*)",
b"abc",
ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED,
);
e(
b"(?m:*)",
b"abc",
ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED,
);
x2(b"(?:)*", b"abc", 3, 3);
e(b"^*", b"abc", ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID);
}