()
| 334 | |
| 335 | #[test] |
| 336 | fn test_read_serialize() { |
| 337 | type Buf = ReadBuffer<U4>; |
| 338 | |
| 339 | let mut n = 0u8; |
| 340 | let mut g = |block: &mut Array<u8, U4>| { |
| 341 | block.iter_mut().for_each(|b| { |
| 342 | *b = n; |
| 343 | n += 1; |
| 344 | }); |
| 345 | }; |
| 346 | |
| 347 | let mut buf = Buf::default(); |
| 348 | let ser1 = buf.serialize(); |
| 349 | assert_eq!(&ser1[..], &[4, 0, 0, 0]); |
| 350 | assert_eq!(Buf::deserialize(&ser1).unwrap().serialize(), ser1); |
| 351 | |
| 352 | let mut buf1 = Buf::deserialize(&ser1).unwrap(); |
| 353 | assert_eq!(buf1.serialize(), ser1); |
| 354 | assert_eq!(buf1.remaining(), 0); |
| 355 | assert_eq!(buf1.read_cached(10), []); |
| 356 | |
| 357 | buf.write_block(2, &mut g, |buf| assert_eq!(buf, [0, 1])); |
| 358 | |
| 359 | let ser2 = buf.serialize(); |
| 360 | assert_eq!(&ser2[..], &[2, 0, 2, 3]); |
| 361 | |
| 362 | let mut buf2 = Buf::deserialize(&ser2).unwrap(); |
| 363 | assert_eq!(buf2.serialize(), ser2); |
| 364 | assert_eq!(buf2.remaining(), 2); |
| 365 | assert_eq!(buf2.read_cached(10), [2, 3]); |
| 366 | |
| 367 | // Invalid position |
| 368 | let buf = Array([0, 0, 0, 0]); |
| 369 | assert!(Buf::deserialize(&buf).is_err()); |
| 370 | let buf = Array([5, 0, 0, 0]); |
| 371 | assert!(Buf::deserialize(&buf).is_err()); |
| 372 | let buf = Array([10, 0, 0, 0]); |
| 373 | assert!(Buf::deserialize(&buf).is_err()); |
| 374 | // "Garbage" bytes are not zeroized |
| 375 | let buf = Array([2, 1, 0, 0]); |
| 376 | assert!(Buf::deserialize(&buf).is_err()); |
| 377 | let buf = Array([3, 0, 1, 0]); |
| 378 | assert!(Buf::deserialize(&buf).is_err()); |
| 379 | let buf = Array([4, 0, 0, 1]); |
| 380 | assert!(Buf::deserialize(&buf).is_err()); |
| 381 | } |
| 382 | |
| 383 | #[test] |
| 384 | fn eager_buffer_exception_safety() { |
nothing calls this directly
no test coverage detected