@@ -1033,6 +1033,58 @@ mod tests {
1033
1033
}
1034
1034
}
1035
1035
1036
+ #[ test]
1037
+ fn test_display_error ( ) {
1038
+ assert_eq ! (
1039
+ format!( "{}" , Error :: OutOfBounds { addr: 0x10 } ) ,
1040
+ "address 0x10 is out of bounds"
1041
+ ) ;
1042
+
1043
+ assert_eq ! (
1044
+ format!(
1045
+ "{}" ,
1046
+ Error :: Overflow {
1047
+ base: 0x0 ,
1048
+ offset: 0x10
1049
+ }
1050
+ ) ,
1051
+ "address 0x0 offset by 0x10 would overflow"
1052
+ ) ;
1053
+
1054
+ assert_eq ! (
1055
+ format!(
1056
+ "{}" ,
1057
+ Error :: TooBig {
1058
+ nelements: 100000 ,
1059
+ size: 1000000000
1060
+ }
1061
+ ) ,
1062
+ "100000 elements of size 1000000000 would overflow a usize"
1063
+ ) ;
1064
+
1065
+ assert_eq ! (
1066
+ format!(
1067
+ "{}" ,
1068
+ Error :: Misaligned {
1069
+ addr: 0x4 ,
1070
+ alignment: 8
1071
+ }
1072
+ ) ,
1073
+ "address 0x4 is not aligned to 8"
1074
+ ) ;
1075
+
1076
+ assert_eq ! (
1077
+ format!(
1078
+ "{}" ,
1079
+ Error :: PartialBuffer {
1080
+ expected: 100 ,
1081
+ completed: 90
1082
+ }
1083
+ ) ,
1084
+ "only used 90 bytes in 100 long buffer"
1085
+ ) ;
1086
+ }
1087
+
1036
1088
#[ test]
1037
1089
fn misaligned_ref ( ) {
1038
1090
let mut a = [ 0u8 ; 3 ] ;
@@ -1170,26 +1222,49 @@ mod tests {
1170
1222
}
1171
1223
1172
1224
#[ test]
1173
- fn slice_len ( ) {
1225
+ fn mem_is_empty ( ) {
1174
1226
let a = VecMem :: new ( 100 ) ;
1175
- let s = a. get_slice ( 0 , 27 ) . unwrap ( ) ;
1176
- assert_eq ! ( s. len( ) , 27 ) ;
1227
+ assert ! ( !a. is_empty( ) ) ;
1228
+
1229
+ let a = VecMem :: new ( 0 ) ;
1230
+ assert ! ( a. is_empty( ) ) ;
1231
+ }
1232
+
1233
+ #[ test]
1234
+ fn slice_len ( ) {
1235
+ let mem = VecMem :: new ( 100 ) ;
1236
+ let slice = mem. get_slice ( 0 , 27 ) . unwrap ( ) ;
1237
+ assert_eq ! ( slice. len( ) , 27 ) ;
1238
+ assert ! ( !slice. is_empty( ) ) ;
1239
+
1240
+ let slice = mem. get_slice ( 34 , 27 ) . unwrap ( ) ;
1241
+ assert_eq ! ( slice. len( ) , 27 ) ;
1242
+ assert ! ( !slice. is_empty( ) ) ;
1177
1243
1178
- let s = a. get_slice ( 34 , 27 ) . unwrap ( ) ;
1179
- assert_eq ! ( s. len( ) , 27 ) ;
1244
+ let slice = slice. get_slice ( 20 , 5 ) . unwrap ( ) ;
1245
+ assert_eq ! ( slice. len( ) , 5 ) ;
1246
+ assert ! ( !slice. is_empty( ) ) ;
1180
1247
1181
- let s = s . get_slice ( 20 , 5 ) . unwrap ( ) ;
1182
- assert_eq ! ( s . len ( ) , 5 ) ;
1248
+ let slice = mem . get_slice ( 34 , 0 ) . unwrap ( ) ;
1249
+ assert ! ( slice . is_empty ( ) ) ;
1183
1250
}
1184
1251
1185
1252
#[ test]
1186
- fn slice_is_empty ( ) {
1187
- let a = VecMem :: new ( 100 ) ;
1188
- let s = a. get_slice ( 0 , 27 ) . unwrap ( ) ;
1189
- assert ! ( !s. is_empty( ) ) ;
1253
+ fn slice_offset ( ) {
1254
+ let mem = VecMem :: new ( 100 ) ;
1255
+ let slice = mem. get_slice ( 0 , 100 ) . unwrap ( ) ;
1256
+ assert ! ( slice. write( & [ 1 ; 80 ] , 10 ) . is_ok( ) ) ;
1257
+
1258
+ assert ! ( slice. offset( 101 ) . is_err( ) ) ;
1190
1259
1191
- let s = a. get_slice ( 34 , 0 ) . unwrap ( ) ;
1192
- assert ! ( s. is_empty( ) ) ;
1260
+ let maybe_offset_slice = slice. offset ( 10 ) ;
1261
+ assert ! ( maybe_offset_slice. is_ok( ) ) ;
1262
+ let offset_slice = maybe_offset_slice. unwrap ( ) ;
1263
+ assert_eq ! ( offset_slice. len( ) , 90 ) ;
1264
+ let mut buf = [ 0 ; 90 ] ;
1265
+ assert ! ( offset_slice. read( & mut buf, 0 ) . is_ok( ) ) ;
1266
+ assert_eq ! ( & buf[ 0 ..80 ] , & [ 1 ; 80 ] [ 0 ..80 ] ) ;
1267
+ assert_eq ! ( & buf[ 80 ..90 ] , & [ 0 ; 10 ] [ 0 ..10 ] ) ;
1193
1268
}
1194
1269
1195
1270
#[ test]
@@ -1221,6 +1296,20 @@ mod tests {
1221
1296
assert_eq ! ( c_ref[ 0 ..5 ] , a[ 0 ..5 ] ) ;
1222
1297
}
1223
1298
1299
+ #[ test]
1300
+ fn slice_copy_to_volatile_slice ( ) {
1301
+ let mut a = [ 2 , 4 , 6 , 8 , 10 ] ;
1302
+ let a_ref = & mut a[ ..] ;
1303
+ let a_slice = a_ref. get_slice ( 0 , a_ref. len ( ) ) . unwrap ( ) ;
1304
+
1305
+ let mut b = [ 0u8 ; 4 ] ;
1306
+ let b_ref = & mut b[ ..] ;
1307
+ let b_slice = b_ref. get_slice ( 0 , b_ref. len ( ) ) . unwrap ( ) ;
1308
+
1309
+ a_slice. copy_to_volatile_slice ( b_slice) ;
1310
+ assert_eq ! ( b, [ 2 , 4 , 6 , 8 ] ) ;
1311
+ }
1312
+
1224
1313
#[ test]
1225
1314
fn slice_overflow_error ( ) {
1226
1315
use std:: usize:: MAX ;
@@ -1373,6 +1462,18 @@ mod tests {
1373
1462
assert_eq ! ( buf, sample_buf) ;
1374
1463
}
1375
1464
1465
+ #[ test]
1466
+ fn ref_array_from_slice ( ) {
1467
+ let mut a = [ 2 , 4 , 6 , 8 , 10 ] ;
1468
+ let a_vec = a. to_vec ( ) ;
1469
+ let a_ref = & mut a[ ..] ;
1470
+ let a_slice = a_ref. get_slice ( 0 , a_ref. len ( ) ) . unwrap ( ) ;
1471
+ let a_array_ref: VolatileArrayRef < u8 > = a_slice. into ( ) ;
1472
+ for i in 0 ..a_vec. len ( ) {
1473
+ assert_eq ! ( a_array_ref. load( i) , a_vec[ i] ) ;
1474
+ }
1475
+ }
1476
+
1376
1477
#[ test]
1377
1478
fn ref_array_store ( ) {
1378
1479
let mut a = [ 0u8 ; 5 ] ;
0 commit comments