@@ -372,6 +372,36 @@ def test_freeze(self):
372372 r"^Cannot add members to a frozen signature$" ):
373373 sig .members += {"b" : Out (1 )}
374374
375+ def assertFlattenedSignature (self , actual , expected ):
376+ for (a_path , a_member , a_value ), (b_path , b_member , b_value ) in zip (actual , expected ):
377+ self .assertEqual (a_path , b_path )
378+ self .assertEqual (a_member , b_member )
379+ self .assertIs (a_value , b_value )
380+
381+ def test_flatten (self ):
382+ sig = Signature ({"a" : In (1 ), "b" : Out (2 ).array (2 )})
383+ intf = sig .create ()
384+ self .assertFlattenedSignature (sig .flatten (intf ), [
385+ (("a" ,), In (1 ), intf .a ),
386+ ((("b" ,), 0 ), Out (2 ), intf .b [0 ]),
387+ ((("b" ,), 1 ), Out (2 ), intf .b [1 ])
388+ ])
389+
390+ def test_flatten_sig (self ):
391+ sig = Signature ({
392+ "a" : Out (Signature ({"p" : Out (1 )})),
393+ "b" : Out (Signature ({"q" : In (1 )})),
394+ "c" : In ( Signature ({"r" : Out (1 )})),
395+ "d" : In ( Signature ({"s" : In (1 )})),
396+ })
397+ intf = sig .create ()
398+ self .assertFlattenedSignature (sig .flatten (intf ), [
399+ (("a" , "p" ), Out (1 ), intf .a .p ),
400+ (("b" , "q" ), In (1 ), intf .b .q ),
401+ (("c" , "r" ), Out (1 ), intf .c .r ),
402+ (("d" , "s" ), In (1 ), intf .d .s ),
403+ ])
404+
375405 def assertNotCompliant (self , reason_regex , sig , obj ):
376406 self .assertFalse (sig .is_compliant (obj ))
377407 reasons = []
0 commit comments