Skip to content

Commit 978f747

Browse files
committed
riscv: add basic mvendorid unit tests
Adds basic unit tests for the `mvendorid` CSR.
1 parent ed7e67e commit 978f747

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

riscv/src/register/mvendorid.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,45 @@ impl Mvendorid {
5555
})
5656
}
5757
}
58+
59+
#[cfg(test)]
60+
mod tests {
61+
use super::*;
62+
63+
#[test]
64+
fn test_mvendorid() {
65+
(0..u32::BITS)
66+
.map(|r| ((1u64 << r) - 1) as usize)
67+
.for_each(|raw| {
68+
let exp_bank = raw >> 7;
69+
let exp_offset = raw & (Mvendorid::CONTINUATION as usize);
70+
let exp_parity = ((1 - (exp_offset.count_ones() % 2)) << 7) as u8;
71+
let exp_mvendorid = Mvendorid::from_bits(raw);
72+
73+
assert_eq!(exp_mvendorid.bank(), exp_bank);
74+
assert_eq!(exp_mvendorid.offset(), exp_offset);
75+
76+
let mut jedec_iter = exp_mvendorid.jedec_manufacturer();
77+
(0..exp_bank)
78+
.for_each(|_| assert_eq!(jedec_iter.next(), Some(Mvendorid::CONTINUATION)));
79+
assert_eq!(jedec_iter.next(), Some(exp_parity | (exp_offset as u8)));
80+
assert_eq!(jedec_iter.next(), None);
81+
});
82+
83+
// ISA example used as a concrete test vector.
84+
85+
let exp_bank = 0xc;
86+
let exp_offset = 0x0a;
87+
let exp_decoded_offset = 0x8a;
88+
let raw_mvendorid = 0x60a;
89+
let exp_mvendorid = Mvendorid::from_bits(raw_mvendorid);
90+
91+
assert_eq!(exp_mvendorid.bank(), exp_bank);
92+
assert_eq!(exp_mvendorid.offset(), exp_offset);
93+
94+
let mut jedec_iter = exp_mvendorid.jedec_manufacturer();
95+
(0..exp_bank).for_each(|_| assert_eq!(jedec_iter.next(), Some(Mvendorid::CONTINUATION)));
96+
assert_eq!(jedec_iter.next(), Some(exp_decoded_offset));
97+
assert_eq!(jedec_iter.next(), None);
98+
}
99+
}

0 commit comments

Comments
 (0)