use std::collections::HashMap;
use std::sync::Arc;
use std::collections::HashSet as Set;
use std::sync::Mutex as Lock;
mod helpers {
pub fn helper_function() -> String {
"Helper".to_string()
}
pub struct HelperStruct {
pub value: i32,
}
impl HelperStruct {
pub fn new(value: i32) -> Self {
HelperStruct { value }
}
}
pub mod nested {
pub fn nested_function() -> String {
"Nested".to_string()
}
use super::HelperStruct;
pub fn use_parent_struct() -> HelperStruct {
HelperStruct::new(100)
}
}
}
use helpers::{helper_function, HelperStruct};
use helpers::nested::nested_function;
mod other_helpers {
pub fn helper_function() -> i32 {
42
}
pub fn call_own_helper() -> i32 {
helper_function() }
}
use self::other_helpers::helper_function as other_helper;
fn main() {
println!("=== Testing Import Resolution ===\n");
println!("1. Standard library imports:");
let mut map: HashMap<String, i32> = HashMap::new();
map.insert("key".to_string(), 42);
println!(" HashMap created and used ✓");
let data = Arc::new(vec![1, 2, 3]);
println!(" Arc created and used ✓");
println!("\n2. Aliased imports:");
let mut set: Set<i32> = Set::new(); set.insert(1);
println!(" HashSet used as 'Set' ✓");
let lock = Lock::new(5); println!(" Mutex used as 'Lock' ✓");
println!("\n3. Relative module imports:");
let result = helper_function();
println!(" helper_function() returns: '{}' (expected: 'Helper') ✓", result);
let helper = HelperStruct::new(10);
println!(" HelperStruct::new() works with value: {} ✓", helper.value);
println!("\n4. Nested module imports:");
let nested_result = nested_function();
println!(" nested_function() returns: '{}' (expected: 'Nested') ✓", nested_result);
println!("\n5. Self imports with alias:");
let other_result = other_helper();
println!(" other_helper() returns: {} (expected: 42) ✓", other_result);
println!("\n=== All import tests completed ===");
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_standard_imports() {
let _map: HashMap<String, i32> = HashMap::new();
let _arc: Arc<Vec<i32>> = Arc::new(vec![]);
}
#[test]
fn test_aliased_imports() {
let _set: Set<i32> = Set::new();
let _lock: Lock<i32> = Lock::new(0);
}
#[test]
fn test_relative_imports() {
let result = helper_function();
assert_eq!(result, "Helper", "Should call helpers::helper_function");
let helper = HelperStruct::new(20);
assert_eq!(helper.value, 20);
let nested = nested_function();
assert_eq!(nested, "Nested");
}
#[test]
fn test_self_imports() {
let result = other_helper();
assert_eq!(result, 42, "Should call other_helpers::helper_function via alias");
}
mod nested_tests {
use super::super::*;
#[test]
fn test_grandparent_imports() {
let result = helper_function();
assert_eq!(result, "Helper");
}
}
}