use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(32))]
#[test]
fn ecel_never_panics_on_arbitrary_input(s in "\\PC{0,64}") {
let _ = etdl_parser::ecel::parse_condition(&s);
}
#[test]
fn ecel_oversized_index_no_panic(digits in 1..40usize) {
let idx = "9".repeat(digits);
let expr = format!("message.payload.items[{}].qty > 0", idx);
let _ = etdl_parser::ecel::parse_condition(&expr);
}
#[test]
fn yaml_never_panics_on_arbitrary_bytes(b in prop::collection::vec(any::<u8>(), 0..64)) {
let s = String::from_utf8_lossy(&b).to_string();
let _ = etdl_parser::parse_document(&s);
}
#[test]
fn span_builder_never_panics(s in "\\PC{0,64}") {
let _ = etdl_parser::spanned::build_span_index(&s);
let _ = etdl_parser::spanned::detect_duplicate_ids(&s);
}
#[test]
fn json_pointer_never_panics(pointer in "\\PC{0,48}") {
let doc = serde_json::json!({"a": {"b": [1, 2]}, "c": "x"});
let _ = etdl_parser::jsonptr::resolve_json_pointer(&doc, &pointer);
}
}
#[test]
fn ecel_billion_digit_index_saturates() {
let idx = "9".repeat(1000);
let expr = format!("message.payload.a[{}].b == 1", idx);
let result = etdl_parser::ecel::parse_condition(&expr);
assert!(result.is_ok() || result.is_err()); }
#[test]
fn deeply_nested_yaml_no_panic() {
let mut yaml = String::from("a:");
for _ in 0..500 {
yaml.push_str("\n a:");
}
let _ = etdl_parser::parse_document(&yaml);
}