@@ -531,16 +531,85 @@ def testAssignRepeatedField(self, message_module):
531531 self .assertEqual ([1 , 2 , 3 , 4 ], msg .payload .repeated_int32 )
532532
533533 def testRepeatedFieldSelfSliceAssignment (self , message_module ):
534- msg = message_module .NestedTestAllTypes ()
535- msg .payload .repeated_int32 [:] = [1 , 2 , 3 , 4 ]
536- msg .payload .repeated_int32 [:] = msg .payload .repeated_int32
534+ msg = message_module .NestedTestAllTypes ()
535+ for field_name in [
536+ 'repeated_int32' ,
537+ 'repeated_int64' ,
538+ 'repeated_uint32' ,
539+ 'repeated_uint64' ,
540+ 'repeated_sint32' ,
541+ 'repeated_sint64' ,
542+ 'repeated_fixed32' ,
543+ 'repeated_fixed64' ,
544+ 'repeated_sfixed32' ,
545+ 'repeated_sfixed64' ,
546+ ]:
547+ field = getattr (msg .payload , field_name )
548+ field [:] = [1 , 2 , 3 , 4 ]
549+ field [:] = field
550+ self .assertEqual ([1 , 2 , 3 , 4 ], field )
551+ field [:] = field [1 :- 1 ]
552+ self .assertEqual ([2 , 3 ], field )
553+ for field_name in [
554+ 'repeated_float' ,
555+ 'repeated_double' ,
556+ ]:
557+ field = getattr (msg .payload , field_name )
558+ field [:] = [1.25 , 2.25 , 3.25 , 4.25 ]
559+ field [:] = field
560+ self .assertEqual ([1.25 , 2.25 , 3.25 , 4.25 ], field )
561+
562+ def testRepeatedFieldExtendWithPartialSuccess (self , message_module ):
563+ msg = message_module .NestedTestAllTypes ()
564+ msg .payload .repeated_int32 [:] = [1 , 2 , 3 , 4 ]
565+ with self .assertRaises (ValueError ):
566+ msg .payload .repeated_int32 .extend ([4 , 5 , 6 , 2 ** 34 ])
567+ if api_implementation .Type () == 'cpp' :
568+ self .assertEqual ([1 , 2 , 3 , 4 , 4 , 5 , 6 ], msg .payload .repeated_int32 )
569+ else :
537570 self .assertEqual ([1 , 2 , 3 , 4 ], msg .payload .repeated_int32 )
538571
572+ def testRepeatedFieldSubSliceAssignment (self , message_module ):
573+ msg = message_module .NestedTestAllTypes ()
574+ msg .payload .repeated_int32 [:] = range (1 , 6 )
575+ msg .payload .repeated_int32 [1 :3 ] = msg .payload .repeated_int32 [2 :4 ]
576+ self .assertEqual ([1 , 3 , 4 , 4 , 5 ], msg .payload .repeated_int32 )
577+ msg .payload .repeated_int32 .extend (msg .payload .repeated_int32 [1 :3 ])
578+ self .assertEqual ([1 , 3 , 4 , 4 , 5 , 3 , 4 ], msg .payload .repeated_int32 )
579+
580+ def testRepeatedFieldDifferentTypeSliceAssignment (self , message_module ):
581+ msg1 = message_module .NestedTestAllTypes ()
582+ msg2 = message_module .NestedTestAllTypes ()
583+ # int64 -> int32
584+ msg2 .payload .repeated_int64 [:] = [1 , 2 , 3 , 4 ]
585+ msg1 .payload .repeated_int32 [:] = msg2 .payload .repeated_int64
586+ self .assertEqual ([1 , 2 , 3 , 4 ], msg1 .payload .repeated_int32 )
587+ # int32 -> int64
588+ msg2 .payload .repeated_int32 [:] = [1 , 2 , 3 , 4 ]
589+ msg1 .payload .repeated_int64 [:] = msg2 .payload .repeated_int32
590+ self .assertEqual ([1 , 2 , 3 , 4 ], msg1 .payload .repeated_int64 )
591+ # int64 overflow -> int32
592+ msg2 .payload .repeated_int64 [:] = [1 , 2 , 3 , 2 ** 35 ]
593+ with self .assertRaises ((ValueError , OverflowError , TypeError )):
594+ msg1 .payload .repeated_int32 [:] = msg2 .payload .repeated_int64
595+ # double -> float
596+ msg2 .payload .repeated_double [:] = [1.5 , 2.5 , 3.5 ]
597+ msg1 .payload .repeated_float [:] = msg2 .payload .repeated_double
598+ self .assertEqual ([1.5 , 2.5 , 3.5 ], msg1 .payload .repeated_float )
599+ # float -> double
600+ msg2 .payload .repeated_float [:] = [1.5 , 2.5 , 3.5 ]
601+ msg1 .payload .repeated_double [:] = msg2 .payload .repeated_float
602+ self .assertEqual ([1.5 , 2.5 , 3.5 ], msg1 .payload .repeated_double )
603+
604+ msg2 .payload .repeated_double [:] = [1.5 , 2.5 , 1e300 ]
605+ msg1 .payload .repeated_float [:] = msg2 .payload .repeated_double
606+ self .assertEqual ([1.5 , 2.5 , float ('inf' )], msg1 .payload .repeated_float )
607+
539608 def testRepeatedFieldSelfExtend (self , message_module ):
540- msg = message_module .NestedTestAllTypes ()
541- msg .payload .repeated_int32 [:] = [1 , 2 , 3 , 4 ]
542- msg .payload .repeated_int32 .extend (msg .payload .repeated_int32 )
543- self .assertEqual ([1 , 2 , 3 , 4 ] * 2 , msg .payload .repeated_int32 )
609+ msg = message_module .NestedTestAllTypes ()
610+ msg .payload .repeated_int32 [:] = [1 , 2 , 3 , 4 ]
611+ msg .payload .repeated_int32 .extend (msg .payload .repeated_int32 )
612+ self .assertEqual ([1 , 2 , 3 , 4 ] * 2 , msg .payload .repeated_int32 )
544613
545614 def testAssignOutOfRange (self , message_module ):
546615 msg = message_module .NestedTestAllTypes ()
0 commit comments