#![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]
fn test_entity_tuple_pattern_no_deref() {
let source = r#"
@derive(Copy, Clone, Debug)
pub struct Entity {
pub index: i64,
pub generation: i64,
}
pub struct Mesh {}
pub struct Transform {}
pub fn render_mesh(entity: Entity, mesh: Mesh, transform: Transform) {
}
pub fn run_rendering(entities: Vec<(Entity, Mesh, Transform)>) {
for (entity, mesh, transform) in entities {
render_mesh(entity, mesh, transform)
}
}
pub fn main() {}
"#;
let (rs, compiles) = test_utils::compile_single_check(source);
assert!(compiles, "Should compile. Generated:\n{}", rs);
assert!(
!rs.contains("*(entity)"),
"Should NOT add *(entity) for Copy Entity from tuple pattern. Generated:\n{}",
rs
);
}
#[test]
fn test_entity_simple_loop_no_deref() {
let source = r#"
@derive(Copy, Clone, Debug)
pub struct Entity {
pub index: i64,
}
pub fn process(entity: Entity) {
}
pub fn process_all(entities: Vec<Entity>) {
for entity in entities {
process(entity)
}
}
pub fn main() {}
"#;
let (rs, compiles) = test_utils::compile_single_check(source);
assert!(compiles, "Should compile. Generated:\n{}", rs);
assert!(
!rs.contains("*(entity)"),
"Should NOT add *(entity) for Copy Entity from simple loop. Generated:\n{}",
rs
);
}
#[test]
fn test_entity_explicit_deref_stripped_when_copy() {
let source = r#"
@derive(Copy, Clone, Debug, PartialEq)
pub struct Entity {
pub index: i64,
}
pub fn collect_all(entities: Vec<Entity>) -> Vec<Entity> {
let mut result = Vec::new()
for entity in entities {
result.push(*entity)
}
result
}
pub fn main() {}
"#;
let (rs, compiles) = test_utils::compile_single_check(source);
assert!(
compiles,
"Should compile. *entity should be stripped when Entity is Copy. Generated:\n{}",
rs
);
assert!(
!rs.contains("push(*entity)"),
"Should NOT generate push(*entity) for owned Copy - causes E0614. Generated:\n{}",
rs
);
}