use crate::common::addr::{PhysAddr, VirtAddr};
#[test]
fn virt_addr_new_and_val() {
let va = VirtAddr::new(0x8000_1234);
assert_eq!(va.val(), 0x8000_1234);
}
#[test]
fn virt_addr_zero() {
let va = VirtAddr::new(0);
assert_eq!(va.val(), 0);
}
#[test]
fn virt_addr_max() {
let va = VirtAddr::new(u64::MAX);
assert_eq!(va.val(), u64::MAX);
}
#[test]
fn virt_addr_page_offset_aligned() {
let va = VirtAddr::new(0x8000_0000);
assert_eq!(va.page_offset(), 0);
}
#[test]
fn virt_addr_page_offset_nonzero() {
let va = VirtAddr::new(0x8000_0ABC);
assert_eq!(va.page_offset(), 0xABC);
}
#[test]
fn virt_addr_page_offset_max() {
let va = VirtAddr::new(0x1000_0FFF);
assert_eq!(va.page_offset(), 0xFFF);
}
#[test]
fn virt_addr_page_offset_only_lower_12_bits() {
let va = VirtAddr::new(0xFFFF_FFFF_FFFF_FFFF);
assert_eq!(va.page_offset(), 0xFFF);
}
#[test]
fn virt_addr_equality() {
let a = VirtAddr::new(42);
let b = VirtAddr::new(42);
assert_eq!(a, b);
}
#[test]
fn virt_addr_ordering() {
let lo = VirtAddr::new(100);
let hi = VirtAddr::new(200);
assert!(lo < hi);
}
#[test]
fn phys_addr_new_and_val() {
let pa = PhysAddr::new(0x8000_0000);
assert_eq!(pa.val(), 0x8000_0000);
}
#[test]
fn phys_addr_zero() {
let pa = PhysAddr::new(0);
assert_eq!(pa.val(), 0);
}
#[test]
fn phys_addr_max() {
let pa = PhysAddr::new(u64::MAX);
assert_eq!(pa.val(), u64::MAX);
}
#[test]
fn phys_addr_equality() {
assert_eq!(PhysAddr::new(1000), PhysAddr::new(1000));
assert_ne!(PhysAddr::new(1000), PhysAddr::new(1001));
}
#[test]
fn phys_addr_ordering() {
let lo = PhysAddr::new(0x1000);
let hi = PhysAddr::new(0x2000);
assert!(lo < hi);
}
#[test]
fn virt_and_phys_same_value_not_interchangeable() {
let v = VirtAddr::new(0x1234);
let p = PhysAddr::new(0x1234);
assert_eq!(v.val(), p.val());
}