@@ -2020,6 +2020,50 @@ 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+ assert!( ty_obj. call1( & ( ( $( ( $key) , ) +) , ) ) . is_err( ) ) ;
2041+ let obj = ty_obj. call1( & ( ( $( ( $key, i32 :: from( $value) ) , ) +) , ) ) . unwrap( ) ;
2042+ assert_repr( & obj, concat!( $( "'" , $key, "'" , ": " , stringify!( $value) , ", " , ) +) ) ;
2043+ assert!( obj. call_method1( "update" , & ( ( $( ( $key) , ) +) , ) ) . is_err( ) ) ;
2044+ obj. call_method1( "update" , & ( ( $( ( i32 :: from( $value) , $key) , ) +) , ) ) . unwrap( ) ;
2045+ assert_repr( & obj, concat!(
2046+ concat!( $( "'" , $key, "'" , ": " , stringify!( $value) , ", " , ) +) ,
2047+ concat!( $( stringify!( $value) , ": " , "'" , $key, "'" , ", " , ) +)
2048+ ) ) ;
2049+ } ;
2050+ }
2051+
2052+ Python :: with_gil ( |py| {
2053+ tuple ! ( py, "a" => 1 ) ;
2054+ tuple ! ( py, "a" => 1 , "b" => 2 ) ;
2055+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 ) ;
2056+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 ) ;
2057+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 ) ;
2058+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 ) ;
2059+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 ) ;
2060+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 ) ;
2061+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 , "i" => 9 ) ;
2062+ tuple ! ( py, "a" => 1 , "b" => 2 , "c" => 3 , "d" => 4 , "e" => 5 , "f" => 6 , "g" => 7 , "h" => 8 , "i" => 9 , "j" => 10 , "k" => 11 ) ;
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 , "l" => 12 ) ;
2064+ } )
2065+ }
2066+
20232067 #[ test]
20242068 fn test_call_for_non_existing_method ( ) {
20252069 Python :: with_gil ( |py| {
0 commit comments