@@ -83,29 +83,41 @@ fn test_read() {
8383
8484 let mut n = 0u8 ;
8585 let mut g = |block : & mut Array < u8 , U4 > | {
86- block. iter_mut ( ) . for_each ( |b| * b = n) ;
87- n += 1 ;
86+ block. iter_mut ( ) . for_each ( |b| {
87+ * b = n;
88+ n += 1 ;
89+ } ) ;
8890 } ;
8991
90- let mut out = [ 0u8 ; 6 ] ;
91- buf. read ( & mut out, & mut g) ;
92- assert_eq ! ( out, [ 0 , 0 , 0 , 0 , 1 , 1 ] ) ;
93- assert_eq ! ( buf. get_pos( ) , 2 ) ;
92+ let res = buf. read_cached ( 0 ) ;
93+ assert ! ( res. is_empty( ) ) ;
94+ let res = buf. read_cached ( 10 ) ;
95+ assert ! ( res. is_empty( ) ) ;
96+
97+ buf. write_block ( 2 , & mut g, |buf| assert_eq ! ( buf, [ 0 , 1 ] ) ) ;
9498 assert_eq ! ( buf. remaining( ) , 2 ) ;
9599
96- let mut out = [ 0u8 ; 3 ] ;
97- buf. read ( & mut out, & mut g) ;
98- assert_eq ! ( out, [ 1 , 1 , 2 ] ) ;
99- assert_eq ! ( buf. get_pos( ) , 1 ) ;
100- assert_eq ! ( buf. remaining( ) , 3 ) ;
100+ let res = buf. read_cached ( 1 ) ;
101+ assert_eq ! ( res, [ 2 ] ) ;
102+ let res = buf. read_cached ( 10 ) ;
103+ assert_eq ! ( res, [ 3 ] ) ;
104+ assert_eq ! ( buf. remaining( ) , 0 ) ;
105+
106+ buf. write_block ( 0 , |_| unreachable ! ( ) , |_| unreachable ! ( ) ) ;
107+ buf. write_block ( 3 , & mut g, |buf| assert_eq ! ( buf, [ 4 , 5 , 6 ] ) ) ;
108+ assert_eq ! ( buf. remaining( ) , 1 ) ;
101109
102- let mut out = [ 0u8 ; 3 ] ;
103- buf. read ( & mut out, & mut g) ;
104- assert_eq ! ( out, [ 2 , 2 , 2 ] ) ;
105- assert_eq ! ( buf. get_pos( ) , 4 ) ;
110+ buf. write_block ( 0 , |_| unreachable ! ( ) , |_| unreachable ! ( ) ) ;
106111 assert_eq ! ( buf. remaining( ) , 0 ) ;
112+ let res = buf. read_cached ( 10 ) ;
113+ assert ! ( res. is_empty( ) ) ;
107114
108- assert_eq ! ( n, 3 ) ;
115+ buf. write_block ( 1 , & mut g, |buf| assert_eq ! ( buf, [ 8 ] ) ) ;
116+ assert_eq ! ( buf. remaining( ) , 3 ) ;
117+
118+ let res = buf. read_cached ( 10 ) ;
119+ assert_eq ! ( res, [ 9 , 10 , 11 ] ) ;
120+ assert_eq ! ( buf. remaining( ) , 0 ) ;
109121}
110122
111123#[ test]
@@ -287,55 +299,33 @@ fn test_lazy_serialize() {
287299fn test_read_serialize ( ) {
288300 type Buf = ReadBuffer < U4 > ;
289301
290- let mut n = 42u8 ;
302+ let mut n = 0u8 ;
291303 let mut g = |block : & mut Array < u8 , U4 > | {
292304 block. iter_mut ( ) . for_each ( |b| {
293305 * b = n;
294306 n += 1 ;
295307 } ) ;
296308 } ;
297309
298- let mut buf1 = Buf :: default ( ) ;
299- let ser0 = buf1. serialize ( ) ;
300- assert_eq ! ( & ser0[ ..] , & [ 4 , 0 , 0 , 0 ] ) ;
301- assert_eq ! ( Buf :: deserialize( & ser0) . unwrap( ) . serialize( ) , ser0) ;
302-
303- buf1. read ( & mut [ 0 ; 2 ] , & mut g) ;
304-
305- let ser1 = buf1. serialize ( ) ;
306- assert_eq ! ( & ser1[ ..] , & [ 2 , 0 , 44 , 45 ] ) ;
310+ let mut buf = Buf :: default ( ) ;
311+ let ser1 = buf. serialize ( ) ;
312+ assert_eq ! ( & ser1[ ..] , & [ 4 , 0 , 0 , 0 ] ) ;
313+ assert_eq ! ( Buf :: deserialize( & ser1) . unwrap( ) . serialize( ) , ser1) ;
307314
308- let mut buf2 = Buf :: deserialize ( & ser1) . unwrap ( ) ;
315+ let mut buf1 = Buf :: deserialize ( & ser1) . unwrap ( ) ;
309316 assert_eq ! ( buf1. serialize( ) , ser1) ;
317+ assert_eq ! ( buf1. remaining( ) , 0 ) ;
318+ assert_eq ! ( buf1. read_cached( 10 ) , [ ] ) ;
310319
311- buf1. read ( & mut [ 0 ; 1 ] , & mut g) ;
312- buf2. read ( & mut [ 0 ; 1 ] , & mut g) ;
313-
314- let ser2 = buf1. serialize ( ) ;
315- assert_eq ! ( & ser2[ ..] , & [ 3 , 0 , 0 , 45 ] ) ;
316- assert_eq ! ( buf1. serialize( ) , ser2) ;
317-
318- let mut buf3 = Buf :: deserialize ( & ser2) . unwrap ( ) ;
319- assert_eq ! ( buf3. serialize( ) , ser2) ;
320-
321- buf1. read ( & mut [ 0 ; 1 ] , & mut g) ;
322- buf2. read ( & mut [ 0 ; 1 ] , & mut g) ;
323- buf3. read ( & mut [ 0 ; 1 ] , & mut g) ;
324-
325- let ser3 = buf1. serialize ( ) ;
326- assert_eq ! ( & ser3[ ..] , & [ 4 , 0 , 0 , 0 ] ) ;
327- assert_eq ! ( buf2. serialize( ) , ser3) ;
328- assert_eq ! ( buf3. serialize( ) , ser3) ;
320+ buf. write_block ( 2 , & mut g, |buf| assert_eq ! ( buf, [ 0 , 1 ] ) ) ;
329321
330- buf1. read ( & mut [ 0 ; 1 ] , & mut g) ;
331- buf2. read ( & mut [ 0 ; 1 ] , & mut g) ;
332- buf3. read ( & mut [ 0 ; 1 ] , & mut g) ;
322+ let ser2 = buf. serialize ( ) ;
323+ assert_eq ! ( & ser2[ ..] , & [ 2 , 0 , 2 , 3 ] ) ;
333324
334- // note that each buffer calls `gen`, so they get filled
335- // with different data
336- assert_eq ! ( & buf1. serialize( ) [ ..] , & [ 1 , 47 , 48 , 49 ] ) ;
337- assert_eq ! ( & buf2. serialize( ) [ ..] , & [ 1 , 51 , 52 , 53 ] ) ;
338- assert_eq ! ( & buf3. serialize( ) [ ..] , & [ 1 , 55 , 56 , 57 ] ) ;
325+ let mut buf2 = Buf :: deserialize ( & ser2) . unwrap ( ) ;
326+ assert_eq ! ( buf2. serialize( ) , ser2) ;
327+ assert_eq ! ( buf2. remaining( ) , 2 ) ;
328+ assert_eq ! ( buf2. read_cached( 10 ) , [ 2 , 3 ] ) ;
339329
340330 // Invalid position
341331 let buf = Array ( [ 0 , 0 , 0 , 0 ] ) ;
0 commit comments