@@ -1321,6 +1321,63 @@ mod utils {
1321
1321
}
1322
1322
}
1323
1323
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
+
1324
1381
#[ cfg( nightly) ]
1325
1382
#[ bench]
1326
1383
fn bench_serialize_map ( b : & mut Bencher ) {
0 commit comments