#![cfg(target_arch = "aarch64")]
use arm_vcpu::TrapFrame;
#[test]
fn test_context_frame_default() {
let ctx = TrapFrame::default();
for i in 0..31 {
assert_eq!(ctx.gpr[i], 0, "GPR {} should be 0", i);
}
assert_eq!(ctx.sp_el0, 0);
assert_eq!(ctx.elr, 0);
assert_ne!(ctx.spsr, 0);
}
#[test]
fn test_context_frame_gpr_access() {
let mut ctx = TrapFrame::default();
for i in 0..=30 {
ctx.gpr[i] = 0xDEADBEEF;
assert_eq!(ctx.gpr[i], 0xDEADBEEF, "GPR {} should be 0xDEADBEEF", i);
}
}
#[test]
fn test_context_frame_set_argument_direct() {
let mut ctx = TrapFrame::default();
ctx.gpr[0] = 0x12345678;
assert_eq!(ctx.gpr[0], 0x12345678);
}
#[test]
fn test_context_frame_elr_access() {
let mut ctx = TrapFrame::default();
ctx.elr = 0x8000;
assert_eq!(ctx.elr, 0x8000);
}
#[test]
fn test_context_frame_layout() {
use core::mem::{align_of, size_of};
assert_eq!(size_of::<TrapFrame>(), 34 * 8);
assert!(align_of::<TrapFrame>() >= 8);
}
#[test]
fn test_context_frame_clone() {
let mut ctx1 = TrapFrame::default();
ctx1.gpr[0] = 0x1234;
ctx1.gpr[1] = 0x5678;
ctx1.elr = 0x8000;
let ctx2 = ctx1;
assert_eq!(ctx2.gpr[0], 0x1234);
assert_eq!(ctx2.gpr[1], 0x5678);
assert_eq!(ctx2.elr, 0x8000);
}