@@ -795,11 +795,14 @@ def test_float_add_constant_propagation(self):
795
795
def testfunc (n ):
796
796
a = 1.0
797
797
for _ in range (n ):
798
- a = a + 0.1
798
+ a = a + 0.25
799
+ a = a + 0.25
800
+ a = a + 0.25
801
+ a = a + 0.25
799
802
return a
800
803
801
804
res , ex = self ._run_with_optimizer (testfunc , 32 )
802
- self .assertAlmostEqual (res , 4.2 )
805
+ self .assertAlmostEqual (res , 33.0 )
803
806
self .assertIsNotNone (ex )
804
807
uops = get_opnames (ex )
805
808
guard_both_float_count = [opname for opname in iter_opnames (ex ) if opname == "_GUARD_BOTH_FLOAT" ]
@@ -812,11 +815,14 @@ def test_float_subtract_constant_propagation(self):
812
815
def testfunc (n ):
813
816
a = 1.0
814
817
for _ in range (n ):
815
- a = a - 0.1
818
+ a = a - 0.25
819
+ a = a - 0.25
820
+ a = a - 0.25
821
+ a = a - 0.25
816
822
return a
817
823
818
824
res , ex = self ._run_with_optimizer (testfunc , 32 )
819
- self .assertAlmostEqual (res , - 2.2 )
825
+ self .assertAlmostEqual (res , - 31.0 )
820
826
self .assertIsNotNone (ex )
821
827
uops = get_opnames (ex )
822
828
guard_both_float_count = [opname for opname in iter_opnames (ex ) if opname == "_GUARD_BOTH_FLOAT" ]
@@ -829,11 +835,14 @@ def test_float_multiply_constant_propagation(self):
829
835
def testfunc (n ):
830
836
a = 1.0
831
837
for _ in range (n ):
832
- a = a * 2.0
838
+ a = a * 1.0
839
+ a = a * 1.0
840
+ a = a * 1.0
841
+ a = a * 1.0
833
842
return a
834
843
835
844
res , ex = self ._run_with_optimizer (testfunc , 32 )
836
- self .assertAlmostEqual (res , 2 ** 32 )
845
+ self .assertAlmostEqual (res , 1.0 )
837
846
self .assertIsNotNone (ex )
838
847
uops = get_opnames (ex )
839
848
guard_both_float_count = [opname for opname in iter_opnames (ex ) if opname == "_GUARD_BOTH_FLOAT" ]
@@ -842,6 +851,24 @@ def testfunc(n):
842
851
# We'll also need to verify that propagation actually occurs.
843
852
self .assertIn ("_BINARY_OP_MULTIPLY_FLOAT" , uops )
844
853
854
+ def test_add_unicode_propagation (self ):
855
+ def testfunc (n ):
856
+ a = ""
857
+ for _ in range (n ):
858
+ a + a
859
+ a + a
860
+ a + a
861
+ a + a
862
+ return a
863
+
864
+ res , ex = self ._run_with_optimizer (testfunc , 32 )
865
+ self .assertEqual (res , "" )
866
+ self .assertIsNotNone (ex )
867
+ uops = get_opnames (ex )
868
+ guard_both_unicode_count = [opname for opname in iter_opnames (ex ) if opname == "_GUARD_BOTH_UNICODE" ]
869
+ self .assertLessEqual (len (guard_both_unicode_count ), 1 )
870
+ self .assertIn ("_BINARY_OP_ADD_UNICODE" , uops )
871
+
845
872
def test_compare_op_type_propagation_float (self ):
846
873
def testfunc (n ):
847
874
a = 1.0
0 commit comments