File tree 1 file changed +41
-0
lines changed
1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -54,3 +54,44 @@ impl Stvec {
54
54
}
55
55
}
56
56
}
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