#![cfg(any(
not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)),
feature = "analyzer_tests",
))]
#[path = "common/test_utils.rs"]
mod test_utils;
#[test]
#[cfg_attr(tarpaulin, ignore)]
fn test_vec_remove_integer_literal() {
let code = r#"
pub fn remove_first<T: Clone>(mut vec: Vec<T>) -> Option<T> {
if vec.len() > 0 {
Some(vec.remove(0))
} else {
None
}
}
"#;
let (generated, success) = test_utils::compile_single_check(code);
let err = if !success { &generated } else { "" };
println!("Generated:\n{}", generated);
if !success {
println!("Rustc error:\n{}", err);
}
assert!(
!generated.contains("vec.remove(&0)"),
"Should not auto-ref integer literal: vec.remove(&0) is wrong"
);
assert!(
generated.contains("vec.remove(0)") || generated.contains("vec.remove(0_usize)"),
"Should use integer literal directly (not &0): {}",
generated
);
assert!(
success,
"Generated Rust code should compile successfully. Rustc error:\n{}",
err
);
}