use std::path::PathBuf;
#[test]
#[ignore = "manual check for problems with deep folder structures"]
fn create_deep_folders() {
let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
path.push("target");
let max_depth = 100;
let max_length = 8000;
let mut depth = 0;
let chars = [
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
];
loop {
if depth >= max_depth {
println!("Reached maximum depth limit: {max_depth}");
break;
}
let dir_name = format!(
"{}{}{}",
chars[depth % 26],
chars[(depth / 26) % 26],
chars[(depth / (26 * 26)) % 26]
);
path.push(&dir_name);
if path.to_string_lossy().len() >= max_length {
println!("Reached maximum path length limit: {max_length}");
path.pop(); break;
}
println!("Attempting to create: {}", path.to_string_lossy());
match std::fs::create_dir_all(&path) {
Ok(()) => {
depth += 1;
println!(
"Created depth {}: {} (path length: {})",
depth,
dir_name,
path.to_string_lossy().len()
);
}
Err(e) => {
println!(
"Failed at depth {}: {} (path length: {})",
depth,
dir_name,
path.to_string_lossy().len()
);
println!("Error: {e}");
break;
}
}
}
println!("Maximum depth reached: {depth}");
println!("Final path length: {}", path.to_string_lossy().len());
}