@@ -590,10 +590,98 @@ async fn raw_write_million() -> Result<()> {
590590 assert_eq ! ( res. len( ) , 2usize . pow( NUM_BITS_KEY_PER_TXN ) ) ;
591591 }
592592
593- // test scan
594- let limit = 10 ;
595- let res = client. scan ( vec ! [ ] .., limit) . await ?;
596- assert_eq ! ( res. len( ) , limit as usize ) ;
593+ // test scan, key range from [0,0,0,0] to [255.0.0.0]
594+ let mut limit = 2000 ;
595+ let mut r = client. scan ( .., limit) . await ?;
596+ assert_eq ! ( r. len( ) , 256 ) ;
597+ for ( i, val) in r. iter ( ) . enumerate ( ) {
598+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
599+ assert_eq ! ( k[ 0 ] , i as u8 ) ;
600+ }
601+ r = client. scan ( vec ! [ 100 , 0 , 0 , 0 ] .., limit) . await ?;
602+ assert_eq ! ( r. len( ) , 156 ) ;
603+ for ( i, val) in r. iter ( ) . enumerate ( ) {
604+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
605+ assert_eq ! ( k[ 0 ] , i as u8 + 100 ) ;
606+ }
607+ r = client
608+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..vec ! [ 200 , 0 , 0 , 0 ] , limit)
609+ . await ?;
610+ assert_eq ! ( r. len( ) , 195 ) ;
611+ for ( i, val) in r. iter ( ) . enumerate ( ) {
612+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
613+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
614+ }
615+ r = client
616+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..=vec ! [ 200 , 0 , 0 , 0 ] , limit)
617+ . await ?;
618+ assert_eq ! ( r. len( ) , 196 ) ;
619+ for ( i, val) in r. iter ( ) . enumerate ( ) {
620+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
621+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
622+ }
623+ r = client
624+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..=vec ! [ 255 , 10 , 0 , 0 ] , limit)
625+ . await ?;
626+ assert_eq ! ( r. len( ) , 251 ) ;
627+ for ( i, val) in r. iter ( ) . enumerate ( ) {
628+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
629+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
630+ }
631+ r = client
632+ . scan ( vec ! [ 255 , 1 , 0 , 0 ] ..=vec ! [ 255 , 10 , 0 , 0 ] , limit)
633+ . await ?;
634+ assert_eq ! ( r. len( ) , 0 ) ;
635+ r = client. scan ( ..vec ! [ 0 , 0 , 0 , 0 ] , limit) . await ?;
636+ assert_eq ! ( r. len( ) , 0 ) ;
637+
638+ limit = 3 ;
639+ let mut r = client. scan ( .., limit) . await ?;
640+ assert_eq ! ( r. len( ) , limit as usize ) ;
641+ for ( i, val) in r. iter ( ) . enumerate ( ) {
642+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
643+ assert_eq ! ( k[ 0 ] , i as u8 ) ;
644+ }
645+ r = client. scan ( vec ! [ 100 , 0 , 0 , 0 ] .., limit) . await ?;
646+ assert_eq ! ( r. len( ) , limit as usize ) ;
647+ for ( i, val) in r. iter ( ) . enumerate ( ) {
648+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
649+ assert_eq ! ( k[ 0 ] , i as u8 + 100 ) ;
650+ }
651+ r = client
652+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..vec ! [ 200 , 0 , 0 , 0 ] , limit)
653+ . await ?;
654+ assert_eq ! ( r. len( ) , limit as usize ) ;
655+ for ( i, val) in r. iter ( ) . enumerate ( ) {
656+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
657+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
658+ }
659+ r = client
660+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..=vec ! [ 200 , 0 , 0 , 0 ] , limit)
661+ . await ?;
662+ assert_eq ! ( r. len( ) , limit as usize ) ;
663+ for ( i, val) in r. iter ( ) . enumerate ( ) {
664+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
665+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
666+ }
667+ r = client
668+ . scan ( vec ! [ 5 , 0 , 0 , 0 ] ..=vec ! [ 255 , 10 , 0 , 0 ] , limit)
669+ . await ?;
670+ assert_eq ! ( r. len( ) , limit as usize ) ;
671+ for ( i, val) in r. iter ( ) . enumerate ( ) {
672+ let k: Vec < u8 > = val. 0 . clone ( ) . into ( ) ;
673+ assert_eq ! ( k[ 0 ] , i as u8 + 5 ) ;
674+ }
675+ r = client
676+ . scan ( vec ! [ 255 , 1 , 0 , 0 ] ..=vec ! [ 255 , 10 , 0 , 0 ] , limit)
677+ . await ?;
678+ assert_eq ! ( r. len( ) , 0 ) ;
679+ r = client. scan ( ..vec ! [ 0 , 0 , 0 , 0 ] , limit) . await ?;
680+ assert_eq ! ( r. len( ) , 0 ) ;
681+
682+ limit = 0 ;
683+ r = client. scan ( .., limit) . await ?;
684+ assert_eq ! ( r. len( ) , limit as usize ) ;
597685
598686 // test batch_scan
599687 for batch_num in 1 ..4 {
0 commit comments