@@ -57,7 +57,6 @@ enum CursorOp {
5757 // return value separately.
5858 Consume ( prop:: sample:: Index ) ,
5959 // Buf trait operations
60- BufRemaining ,
6160 BufChunk ,
6261 BufAdvance ( prop:: sample:: Index ) ,
6362 BufChunksVectored ( prop:: sample:: Index ) ,
@@ -192,18 +191,6 @@ impl CursorOp {
192191 buf_list. consume ( amt) ;
193192 oracle. consume ( amt) ;
194193 }
195- Self :: BufRemaining => {
196- eprintln ! ( "buf_remaining" ) ;
197-
198- let buf_list_remaining = buf_list. remaining ( ) ;
199- let oracle_remaining = oracle. remaining ( ) ;
200- ensure ! (
201- buf_list_remaining == oracle_remaining,
202- "remaining didn't match: buf_list {} == oracle {}" ,
203- buf_list_remaining,
204- oracle_remaining
205- ) ;
206- }
207194 Self :: BufChunk => {
208195 eprintln ! ( "buf_chunk" ) ;
209196
@@ -297,7 +284,8 @@ impl CursorOp {
297284 ensure ! (
298285 !buf_list_bytes. is_empty( ) ,
299286 "chunks_vectored should return some data \
300- when remaining > 0 and num_iovs > 0"
287+ when remaining = {buf_list_remaining} > 0 \
288+ and num_iovs = {num_iovs} > 0"
301289 ) ;
302290 ensure ! (
303291 !oracle_bytes. is_empty( ) ,
@@ -312,6 +300,14 @@ impl CursorOp {
312300 "buf_list chunks_vectored data should match beginning \
313301 of oracle data"
314302 ) ;
303+
304+ // Verify that all iovs up to buf_list_filled are non-empty.
305+ for ( i, iov) in buf_list_iovs[ ..buf_list_filled] . iter ( ) . enumerate ( ) {
306+ ensure ! (
307+ !iov. is_empty( ) ,
308+ "buf_list iov at index {i} should be non-empty" ,
309+ ) ;
310+ }
315311 } else if buf_list_remaining == 0 {
316312 // If no bytes remaining, should return no data
317313 ensure ! (
@@ -449,6 +445,25 @@ impl CursorOp {
449445 }
450446 }
451447
448+ // Check general properties: remaining and has_remaining are the same.
449+ let buf_list_remaining = buf_list. remaining ( ) ;
450+ let oracle_remaining = oracle. remaining ( ) ;
451+ ensure ! (
452+ buf_list_remaining == oracle_remaining,
453+ "remaining didn't match: buf_list {} == oracle {}" ,
454+ buf_list_remaining,
455+ oracle_remaining
456+ ) ;
457+
458+ let buf_list_has_remaining = buf_list. has_remaining ( ) ;
459+ let oracle_has_remaining = oracle. has_remaining ( ) ;
460+ ensure ! (
461+ buf_list_has_remaining == oracle_has_remaining,
462+ "has_remaining didn't match: buf_list {} == oracle {}" ,
463+ buf_list_has_remaining,
464+ oracle_has_remaining
465+ ) ;
466+
452467 // Also check that the position is the same.
453468 let buf_list_position = buf_list. position ( ) ;
454469 ensure ! (
0 commit comments