use pattern_core::Pattern;
#[test]
fn test_analyze_structure_with_atomic_pattern() {
let pattern = Pattern::point("atom".to_string());
let analysis = pattern.analyze_structure();
assert_eq!(analysis.depth_distribution, vec![1]); assert_eq!(analysis.element_counts, Vec::<usize>::new()); assert!(analysis.nesting_patterns.contains(&"atomic".to_string()));
assert!(!analysis.summary.is_empty());
}
#[test]
fn test_analyze_structure_depth_distribution() {
let pattern = Pattern::pattern(
"root".to_string(),
vec![
Pattern::point("child1".to_string()),
Pattern::point("child2".to_string()),
],
);
let analysis = pattern.analyze_structure();
assert_eq!(analysis.depth_distribution.len(), 2);
assert_eq!(analysis.depth_distribution[0], 1); assert_eq!(analysis.depth_distribution[1], 2); }
#[test]
fn test_analyze_structure_element_counts() {
let pattern = Pattern::pattern(
"root".to_string(),
vec![
Pattern::point("child1".to_string()),
Pattern::point("child2".to_string()),
Pattern::point("child3".to_string()),
],
);
let analysis = pattern.analyze_structure();
assert_eq!(analysis.element_counts[0], 3); }
#[test]
fn test_analyze_structure_nesting_patterns_identification() {
let linear = Pattern::pattern(
"level1".to_string(),
vec![Pattern::pattern(
"level2".to_string(),
vec![Pattern::point("level3".to_string())],
)],
);
let analysis = linear.analyze_structure();
assert!(analysis.nesting_patterns.contains(&"linear".to_string()));
let tree = Pattern::pattern(
"root".to_string(),
vec![
Pattern::point("child1".to_string()),
Pattern::point("child2".to_string()),
],
);
let analysis = tree.analyze_structure();
assert!(analysis.nesting_patterns.contains(&"tree".to_string()));
}
#[test]
fn test_analyze_structure_summary_generation() {
let pattern = Pattern::pattern(
"root".to_string(),
vec![
Pattern::point("child1".to_string()),
Pattern::point("child2".to_string()),
],
);
let analysis = pattern.analyze_structure();
assert!(!analysis.summary.is_empty());
assert!(analysis.summary.contains("node"));
assert!(analysis.summary.contains("level") || analysis.summary.contains("structure"));
}
#[test]
fn test_analysis_with_10000_plus_elements() {
let elements: Vec<Pattern<String>> = (0..10000)
.map(|i| Pattern::point(format!("element{}", i)))
.collect();
let pattern = Pattern::pattern("root".to_string(), elements);
let analysis = pattern.analyze_structure();
assert_eq!(analysis.element_counts[0], 10000);
assert!(!analysis.summary.is_empty());
}
#[test]
fn test_analysis_with_100_plus_nesting_levels() {
fn create_deep_pattern(depth: usize) -> Pattern<String> {
if depth == 0 {
Pattern::point("leaf".to_string())
} else {
Pattern::pattern(
format!("level{}", depth).to_string(),
vec![create_deep_pattern(depth - 1)],
)
}
}
let deep = create_deep_pattern(100);
let analysis = deep.analyze_structure();
assert_eq!(analysis.depth_distribution.len(), 101); assert!(!analysis.summary.is_empty());
}