use xll_utils::types::Architecture;
#[test]
fn architecture_from_machine_type_x86() {
let arch = Architecture::from_machine_type(0x014c);
assert_eq!(arch, Architecture::X86);
assert!(arch.is_x86());
assert!(!arch.is_x64());
assert!(!arch.is_arm());
}
#[test]
fn architecture_from_machine_type_x64() {
let arch = Architecture::from_machine_type(0x8664);
assert_eq!(arch, Architecture::X64);
assert!(arch.is_x64());
assert!(!arch.is_x86());
assert!(!arch.is_arm());
}
#[test]
fn architecture_from_machine_type_arm() {
let arch = Architecture::from_machine_type(0x01c0);
assert_eq!(arch, Architecture::Arm);
assert!(arch.is_arm());
assert!(!arch.is_x86());
assert!(!arch.is_x64());
}
#[test]
fn architecture_from_machine_type_arm64() {
let arch = Architecture::from_machine_type(0xaa64);
assert_eq!(arch, Architecture::Arm64);
assert!(arch.is_arm());
}
#[test]
fn architecture_from_machine_type_unknown() {
let arch = Architecture::from_machine_type(0xFFFF);
assert_eq!(arch, Architecture::Unknown(0xFFFF));
assert!(!arch.is_x86());
assert!(!arch.is_x64());
assert!(!arch.is_arm());
}
#[test]
fn architecture_display() {
assert_eq!(Architecture::X86.to_string(), "x86");
assert_eq!(Architecture::X64.to_string(), "x64");
assert_eq!(Architecture::Arm.to_string(), "ARM");
assert_eq!(Architecture::Arm64.to_string(), "ARM64");
assert_eq!(Architecture::Unknown(0x1234).to_string(), "Unknown(0x1234)");
}
#[test]
fn architecture_roundtrip() {
for machine in [0x014c_u16, 0x8664, 0x01c0, 0xaa64] {
let arch = Architecture::from_machine_type(machine);
assert_eq!(arch.as_image_file_machine(), Some(machine));
}
assert_eq!(Architecture::Unknown(0x9999).as_image_file_machine(), None);
}
#[test]
fn architecture_equality() {
assert_eq!(Architecture::X64, Architecture::X64);
assert_ne!(Architecture::X86, Architecture::X64);
assert_eq!(Architecture::Unknown(42), Architecture::Unknown(42));
assert_ne!(Architecture::Unknown(42), Architecture::Unknown(43));
}
#[test]
fn fixture_xll_exists() {
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let fixture_path = std::path::Path::new(manifest_dir)
.join("tests")
.join("fixtures")
.join("test_xll.xll");
assert!(
fixture_path.exists(),
"Test fixture XLL not found at {}. Run: cargo build --release --manifest-path tests/fixtures/test_xll_src/Cargo.toml",
fixture_path.display()
);
}