@@ -2020,6 +2020,51 @@ mod tests {
20202020 } )
20212021 }
20222022
2023+ #[ test]
2024+ fn test_call_tuple_ref ( ) {
2025+ let assert_repr = |obj : & Bound < ' _ , PyAny > , expected : & str | {
2026+ use crate :: prelude:: PyStringMethods ;
2027+ assert_eq ! (
2028+ obj. repr( )
2029+ . unwrap( )
2030+ . to_cow( )
2031+ . unwrap( )
2032+ . trim_matches( |c| c == '{' || c == '}' ) ,
2033+ expected. trim_matches( |c| c == ',' || c == ' ' )
2034+ ) ;
2035+ } ;
2036+
2037+ macro_rules! tuple {
2038+ ( $py: ident, $( $key: literal => $value: literal) ,+) => {
2039+ let ty_obj = $py. get_type:: <PyDict >( ) . into_pyobject( $py) . unwrap( ) ;
2040+ #[ allow( clippy:: needless_borrows_for_generic_args) ]
2041+ let obj = ty_obj. call1( & ( (
2042+ $( ( $key, i32 :: from( $value) ) , ) +
2043+ ) , ) ) . unwrap( ) ;
2044+ assert_repr( & obj, concat!( $( "'" , $key, "'" , ": " , stringify!( $value) , ", " , ) +) ) ;
2045+ #[ allow( clippy:: needless_borrows_for_generic_args) ]
2046+ $(
2047+ let v = obj. call_method1( "pop" , & ( $key, ) ) . unwrap( ) ;
2048+ assert_eq!( v. extract:: <i32 >( ) . unwrap( ) , $value) ;
2049+ ) +
2050+ } ;
2051+ }
2052+
2053+ Python :: with_gil ( |py| {
2054+ tuple ! ( py, "a" => 1 ) ;
2055+ tuple ! ( py, "a" => 1 , "b" => 2 ) ;
2056+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 ) ;
2057+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 ) ;
2058+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 ) ;
2059+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 ) ;
2060+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 ) ;
2061+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 ) ;
2062+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 , "i" => 9 ) ;
2063+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 , "i" => 9 , "j" => 10 , "k" => 11 ) ;
2064+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 , "i" => 9 , "j" => 10 , "k" => 11 , "l" => 12 ) ;
2065+ } )
2066+ }
2067+
20232068 #[ test]
20242069 fn test_call_for_non_existing_method ( ) {
20252070 Python :: with_gil ( |py| {
0 commit comments