Skip to content

Commit 752d43c

Browse files
committed
review: add a few more tests.
Signed-off-by: Piotr Sikora <[email protected]>
1 parent 7bad453 commit 752d43c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

src/hostcalls.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,6 +1321,63 @@ mod utils {
13211321
}
13221322
}
13231323

1324+
#[test]
1325+
fn test_deserialize_map_roundtrip() {
1326+
let map = deserialize_map(SERIALIZED_MAP);
1327+
// TODO(v0.3): fix arguments, so that maps can be reused without conversion.
1328+
let map_refs: Vec<(&str, &str)> =
1329+
map.iter().map(|x| (x.0.as_ref(), x.1.as_ref())).collect();
1330+
let serialized_map = serialize_map(map_refs);
1331+
assert_eq!(serialized_map, SERIALIZED_MAP);
1332+
}
1333+
1334+
#[test]
1335+
fn test_deserialize_map_roundtrip_bytes() {
1336+
let map = deserialize_map_bytes(SERIALIZED_MAP);
1337+
// TODO(v0.3): fix arguments, so that maps can be reused without conversion.
1338+
let map_refs: Vec<(&str, &[u8])> =
1339+
map.iter().map(|x| (x.0.as_ref(), x.1.as_ref())).collect();
1340+
let serialized_map = serialize_map_bytes(map_refs);
1341+
assert_eq!(serialized_map, SERIALIZED_MAP);
1342+
}
1343+
1344+
#[test]
1345+
fn test_deserialize_map_all_chars() {
1346+
// 0x00-0x7f are valid single-byte UTF-8 characters.
1347+
for i in 0..0x7f {
1348+
let serialized_src = [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 99, 0, i, 0];
1349+
let map = deserialize_map(&serialized_src);
1350+
// TODO(v0.3): fix arguments, so that maps can be reused without conversion.
1351+
let map_refs: Vec<(&str, &str)> =
1352+
map.iter().map(|x| (x.0.as_ref(), x.1.as_ref())).collect();
1353+
let serialized_map = serialize_map(map_refs);
1354+
assert_eq!(serialized_map, serialized_src);
1355+
}
1356+
// 0x80-0xff are invalid single-byte UTF-8 characters.
1357+
for i in 0x80..0xff {
1358+
let serialized_src = [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 99, 0, i, 0];
1359+
std::panic::set_hook(Box::new(|_| {}));
1360+
let result = std::panic::catch_unwind(|| {
1361+
deserialize_map(&serialized_src);
1362+
});
1363+
assert!(result.is_err());
1364+
}
1365+
}
1366+
1367+
#[test]
1368+
fn test_deserialize_map_all_chars_bytes() {
1369+
// All 256 single-byte characters are allowed when emitting bytes.
1370+
for i in 0..0xff {
1371+
let serialized_src = [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 99, 0, i, 0];
1372+
let map = deserialize_map_bytes(&serialized_src);
1373+
// TODO(v0.3): fix arguments, so that maps can be reused without conversion.
1374+
let map_refs: Vec<(&str, &[u8])> =
1375+
map.iter().map(|x| (x.0.as_ref(), x.1.as_ref())).collect();
1376+
let serialized_map = serialize_map_bytes(map_refs);
1377+
assert_eq!(serialized_map, serialized_src);
1378+
}
1379+
}
1380+
13241381
#[cfg(nightly)]
13251382
#[bench]
13261383
fn bench_serialize_map(b: &mut Bencher) {

0 commit comments

Comments
 (0)