Skip to content

Commit 218afdd

Browse files
Serban Iorgajiangliu
authored andcommitted
[VolatileMemory] increase coverage
Signed-off-by: Serban Iorga <seriorga@amazon.com>
1 parent 467eda6 commit 218afdd

File tree

2 files changed

+115
-14
lines changed

2 files changed

+115
-14
lines changed

coverage_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"coverage_score": 79.8,
2+
"coverage_score": 84.4,
33
"exclude_path": "mmap_windows.rs",
44
"crate_features": "backend-mmap"
55
}

src/volatile_memory.rs

Lines changed: 114 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,58 @@ mod tests {
10331033
}
10341034
}
10351035

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+
10361088
#[test]
10371089
fn misaligned_ref() {
10381090
let mut a = [0u8; 3];
@@ -1170,26 +1222,49 @@ mod tests {
11701222
}
11711223

11721224
#[test]
1173-
fn slice_len() {
1225+
fn mem_is_empty() {
11741226
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());
11771243

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());
11801247

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());
11831250
}
11841251

11851252
#[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());
11901259

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]);
11931268
}
11941269

11951270
#[test]
@@ -1221,6 +1296,20 @@ mod tests {
12211296
assert_eq!(c_ref[0..5], a[0..5]);
12221297
}
12231298

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+
12241313
#[test]
12251314
fn slice_overflow_error() {
12261315
use std::usize::MAX;
@@ -1373,6 +1462,18 @@ mod tests {
13731462
assert_eq!(buf, sample_buf);
13741463
}
13751464

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+
13761477
#[test]
13771478
fn ref_array_store() {
13781479
let mut a = [0u8; 5];

0 commit comments

Comments
 (0)