Skip to content

Commit ea82de9

Browse files
committed
tests: add mconfigptr unit tests
Adds basic unit tests for the `mconfigptr` CSR.
1 parent 8caf5d1 commit ea82de9

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

riscv/src/register/mconfigptr.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,56 @@ impl Mconfigptr {
5252
}
5353
}
5454
}
55+
56+
#[cfg(test)]
57+
mod tests {
58+
use super::*;
59+
60+
#[test]
61+
fn test_mconfigptr() {
62+
#[cfg(target_arch = "riscv32")]
63+
const EXP_SHIFT: usize = 2;
64+
#[cfg(not(target_arch = "riscv32"))]
65+
const EXP_SHIFT: usize = 3;
66+
67+
const EXP_MASK: usize = (1usize << EXP_SHIFT) - 1;
68+
69+
assert_eq!(Mconfigptr::ALIGN_SHIFT, EXP_SHIFT);
70+
assert_eq!(Mconfigptr::ALIGN_MASK, EXP_MASK);
71+
72+
(1..usize::BITS)
73+
.map(|b| ((1u128 << b) - 1) as usize)
74+
.for_each(|ptr| {
75+
let mconfigptr = Mconfigptr::from_bits(ptr);
76+
assert_eq!(mconfigptr.bits(), ptr);
77+
78+
match mconfigptr.try_as_ptr() {
79+
Ok(cfg_ptr) => {
80+
assert_eq!(cfg_ptr, ptr as *const _);
81+
assert_eq!(mconfigptr.as_ptr(), ptr as *const _);
82+
}
83+
Err(err) if ptr == 0 => assert_eq!(
84+
err,
85+
Error::InvalidFieldVariant {
86+
field: "mconfigptr",
87+
value: 0
88+
}
89+
),
90+
Err(err) => assert_eq!(
91+
err,
92+
Error::InvalidFieldValue {
93+
field: "mconfigptr",
94+
value: ptr,
95+
bitmask: !Mconfigptr::ALIGN_MASK,
96+
}
97+
),
98+
}
99+
100+
let aligned_ptr = ptr << Mconfigptr::ALIGN_SHIFT;
101+
let aligned_mconfigptr = Mconfigptr::from_bits(aligned_ptr);
102+
103+
assert_eq!(aligned_mconfigptr.try_as_ptr(), Ok(aligned_ptr as *const _));
104+
assert_eq!(aligned_mconfigptr.as_ptr(), aligned_ptr as *const _);
105+
});
106+
}
107+
}

0 commit comments

Comments
 (0)