@@ -340,14 +340,14 @@ impl<'v> PyTryFrom<'v> for PySequence {
340340
341341#[ cfg( test) ]
342342mod tests {
343- use crate :: types:: PySequence ;
343+ use crate :: types:: { PyList , PySequence } ;
344344 use crate :: AsPyPointer ;
345345 use crate :: Python ;
346346 use crate :: { PyObject , PyTryFrom , ToPyObject } ;
347347
348348 fn get_object ( ) -> PyObject {
349349 // Convenience function for getting a single unique object
350- Python :: with_gil ( |py| -> PyObject {
350+ Python :: with_gil ( |py| {
351351 let obj = py. eval ( "object()" , None , None ) . unwrap ( ) ;
352352
353353 obj. to_object ( py)
@@ -382,6 +382,19 @@ mod tests {
382382 } ) ;
383383 }
384384
385+ #[ test]
386+ fn test_seq_is_empty ( ) {
387+ Python :: with_gil ( |py| {
388+ let list = vec ! [ 1 ] . to_object ( py) ;
389+ let seq = list. cast_as :: < PySequence > ( py) . unwrap ( ) ;
390+ assert ! ( !seq. is_empty( ) . unwrap( ) ) ;
391+ let vec: Vec < u32 > = Vec :: new ( ) ;
392+ let empty_list = vec. to_object ( py) ;
393+ let empty_seq = empty_list. cast_as :: < PySequence > ( py) . unwrap ( ) ;
394+ assert ! ( empty_seq. is_empty( ) . unwrap( ) ) ;
395+ } ) ;
396+ }
397+
385398 #[ test]
386399 fn test_seq_contains ( ) {
387400 Python :: with_gil ( |py| {
@@ -417,10 +430,6 @@ mod tests {
417430 } ) ;
418431 }
419432
420- // fn test_get_slice() {}
421- // fn test_set_slice() {}
422- // fn test_del_slice() {}
423-
424433 #[ test]
425434 fn test_seq_del_item ( ) {
426435 Python :: with_gil ( |py| {
@@ -474,6 +483,54 @@ mod tests {
474483 } ) ;
475484 }
476485
486+ #[ test]
487+ fn test_seq_get_slice ( ) {
488+ Python :: with_gil ( |py| {
489+ let v: Vec < i32 > = vec ! [ 1 , 1 , 2 , 3 , 5 , 8 ] ;
490+ let ob = v. to_object ( py) ;
491+ let seq = ob. cast_as :: < PySequence > ( py) . unwrap ( ) ;
492+ assert_eq ! (
493+ [ 1 , 2 , 3 ] ,
494+ seq. get_slice( 1 , 4 ) . unwrap( ) . extract:: <[ i32 ; 3 ] >( ) . unwrap( )
495+ ) ;
496+ assert_eq ! (
497+ [ 3 , 5 , 8 ] ,
498+ seq. get_slice( 3 , 100 )
499+ . unwrap( )
500+ . extract:: <[ i32 ; 3 ] >( )
501+ . unwrap( )
502+ ) ;
503+ } ) ;
504+ }
505+
506+ #[ test]
507+ fn test_set_slice ( ) {
508+ Python :: with_gil ( |py| {
509+ let v: Vec < i32 > = vec ! [ 1 , 1 , 2 , 3 , 5 , 8 ] ;
510+ let w: Vec < i32 > = vec ! [ 7 , 4 ] ;
511+ let ob = v. to_object ( py) ;
512+ let seq = ob. cast_as :: < PySequence > ( py) . unwrap ( ) ;
513+ let ins = w. to_object ( py) ;
514+ seq. set_slice ( 1 , 4 , ins. as_ref ( py) ) . unwrap ( ) ;
515+ assert_eq ! ( [ 1 , 7 , 4 , 5 , 8 ] , seq. extract:: <[ i32 ; 5 ] >( ) . unwrap( ) ) ;
516+ seq. set_slice ( 3 , 100 , PyList :: empty ( py) ) . unwrap ( ) ;
517+ assert_eq ! ( [ 1 , 7 , 4 ] , seq. extract:: <[ i32 ; 3 ] >( ) . unwrap( ) ) ;
518+ } ) ;
519+ }
520+
521+ #[ test]
522+ fn test_del_slice ( ) {
523+ Python :: with_gil ( |py| {
524+ let v: Vec < i32 > = vec ! [ 1 , 1 , 2 , 3 , 5 , 8 ] ;
525+ let ob = v. to_object ( py) ;
526+ let seq = ob. cast_as :: < PySequence > ( py) . unwrap ( ) ;
527+ seq. del_slice ( 1 , 4 ) . unwrap ( ) ;
528+ assert_eq ! ( [ 1 , 5 , 8 ] , seq. extract:: <[ i32 ; 3 ] >( ) . unwrap( ) ) ;
529+ seq. del_slice ( 1 , 100 ) . unwrap ( ) ;
530+ assert_eq ! ( [ 1 ] , seq. extract:: <[ i32 ; 1 ] >( ) . unwrap( ) ) ;
531+ } ) ;
532+ }
533+
477534 #[ test]
478535 fn test_seq_index ( ) {
479536 Python :: with_gil ( |py| {
@@ -580,6 +637,22 @@ mod tests {
580637 } ) ;
581638 }
582639
640+ #[ test]
641+ fn test_seq_inplace ( ) {
642+ Python :: with_gil ( |py| {
643+ let v = vec ! [ "foo" , "bar" ] ;
644+ let ob = v. to_object ( py) ;
645+ let seq = ob. cast_as :: < PySequence > ( py) . unwrap ( ) ;
646+ let rep_seq = seq. in_place_repeat ( 3 ) . unwrap ( ) ;
647+ assert_eq ! ( 6 , seq. len( ) . unwrap( ) ) ;
648+ assert_eq ! ( seq, rep_seq) ;
649+
650+ let conc_seq = seq. in_place_concat ( seq) . unwrap ( ) ;
651+ assert_eq ! ( 12 , seq. len( ) . unwrap( ) ) ;
652+ assert_eq ! ( seq, conc_seq) ;
653+ } ) ;
654+ }
655+
583656 #[ test]
584657 fn test_list_coercion ( ) {
585658 Python :: with_gil ( |py| {
@@ -663,17 +736,4 @@ mod tests {
663736 assert ! ( seq_from. list( ) . is_ok( ) ) ;
664737 } ) ;
665738 }
666-
667- #[ test]
668- fn test_is_empty ( ) {
669- Python :: with_gil ( |py| {
670- let list = vec ! [ 1 ] . to_object ( py) ;
671- let seq = list. cast_as :: < PySequence > ( py) . unwrap ( ) ;
672- assert ! ( !seq. is_empty( ) . unwrap( ) ) ;
673- let vec: Vec < u32 > = Vec :: new ( ) ;
674- let empty_list = vec. to_object ( py) ;
675- let empty_seq = empty_list. cast_as :: < PySequence > ( py) . unwrap ( ) ;
676- assert ! ( empty_seq. is_empty( ) . unwrap( ) ) ;
677- } ) ;
678- }
679739}
0 commit comments