use dcbor_pattern::*;
fn parse(s: &str) -> Pattern { Pattern::parse(s).unwrap() }
#[test]
fn test_search_with_partial_array_capture() {
let cbor1 = dcbor_parse::parse_dcbor_item("[1, 2, 3]").unwrap();
let cbor2 = dcbor_parse::parse_dcbor_item("[1]").unwrap();
let pattern_str = "search([@a(*), @rest((*)*)])";
let pattern = parse(pattern_str);
println!("Testing search pattern: {}", pattern_str);
let (paths1, captures1) = pattern.paths_with_captures(&cbor1);
println!("\nTest case 1 - [1, 2, 3]:");
println!("Paths: {:?}", paths1);
println!("Captures: {:?}", captures1);
assert!(!captures1.is_empty(), "Should have captures for [1, 2, 3]");
assert!(captures1.contains_key("a"), "Should have capture @a");
assert!(captures1.contains_key("rest"), "Should have capture @rest");
let (paths2, captures2) = pattern.paths_with_captures(&cbor2);
println!("\nTest case 2 - [1]:");
println!("Paths: {:?}", paths2);
println!("Captures: {:?}", captures2);
assert!(!captures2.is_empty(), "Should have captures for [1]");
assert!(captures2.contains_key("a"), "Should have capture @a");
}