File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -54,3 +54,44 @@ impl Stvec {
5454 }
5555 }
5656}
57+
58+ #[ cfg( test) ]
59+ mod tests {
60+ use super :: * ;
61+
62+ #[ test]
63+ fn test_stvec ( ) {
64+ let mut stvec = Stvec :: from_bits ( 0 ) ;
65+
66+ [ TrapMode :: Direct , TrapMode :: Vectored ]
67+ . into_iter ( )
68+ . for_each ( |trap_mode| {
69+ test_csr_field ! ( stvec, trap_mode: trap_mode) ;
70+ } ) ;
71+
72+ ( 1 ..=usize:: BITS )
73+ . map ( |r| ( ( ( 1u128 << r) - 1 ) as usize ) & !TRAP_MASK )
74+ . for_each ( |address| {
75+ stvec. set_address ( address) ;
76+ assert_eq ! ( stvec. address( ) , address) ;
77+
78+ assert_eq ! ( stvec. try_set_address( address) , Ok ( ( ) ) ) ;
79+ assert_eq ! ( stvec. address( ) , address) ;
80+ } ) ;
81+
82+ ( 1 ..=usize:: BITS )
83+ . filter_map ( |r| match ( ( 1u128 << r) - 1 ) as usize {
84+ addr if ( addr & TRAP_MASK ) != 0 => Some ( addr) ,
85+ _ => None ,
86+ } )
87+ . for_each ( |address| {
88+ assert_eq ! (
89+ stvec. try_set_address( address) ,
90+ Err ( Error :: InvalidFieldVariant {
91+ field: "stvec::address" ,
92+ value: address,
93+ } )
94+ ) ;
95+ } ) ;
96+ }
97+ }
You can’t perform that action at this time.
0 commit comments