Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_peepholer.py

    r2 r391  
    2020
    2121    def test_unot(self):
    22         # UNARY_NOT JUMP_IF_FALSE POP_TOP  -->  JUMP_IF_TRUE POP_TOP'
     22        # UNARY_NOT POP_JUMP_IF_FALSE  -->  POP_JUMP_IF_TRUE
    2323        def unot(x):
    2424            if not x == 2:
    2525                del x
    2626        asm = disassemble(unot)
    27         for elem in ('UNARY_NOT', 'JUMP_IF_FALSE'):
    28             self.assert_(elem not in asm)
    29         for elem in ('JUMP_IF_TRUE', 'POP_TOP'):
    30             self.assert_(elem in asm)
     27        for elem in ('UNARY_NOT', 'POP_JUMP_IF_FALSE'):
     28            self.assertNotIn(elem, asm)
     29        self.assertIn('POP_JUMP_IF_TRUE', asm)
    3130
    3231    def test_elim_inversion_of_is_or_in(self):
     
    3837            ):
    3938            asm = dis_single(line)
    40             self.assert_(elem in asm)
     39            self.assertIn(elem, asm)
    4140
    4241    def test_none_as_constant(self):
     
    4746        asm = disassemble(f)
    4847        for elem in ('LOAD_GLOBAL',):
    49             self.assert_(elem not in asm)
     48            self.assertNotIn(elem, asm)
    5049        for elem in ('LOAD_CONST', '(None)'):
    51             self.assert_(elem in asm)
     50            self.assertIn(elem, asm)
    5251        def f():
    5352            'Adding a docstring made this test fail in Py2.5.0'
    5453            return None
    55         self.assert_('LOAD_CONST' in disassemble(f))
    56         self.assert_('LOAD_GLOBAL' not in disassemble(f))
     54        self.assertIn('LOAD_CONST', disassemble(f))
     55        self.assertNotIn('LOAD_GLOBAL', disassemble(f))
    5756
    5857    def test_while_one(self):
    59         # Skip over:  LOAD_CONST trueconst  JUMP_IF_FALSE xx  POP_TOP
     58        # Skip over:  LOAD_CONST trueconst  POP_JUMP_IF_FALSE xx
    6059        def f():
    6160            while 1:
     
    6362            return list
    6463        asm = disassemble(f)
    65         for elem in ('LOAD_CONST', 'JUMP_IF_FALSE'):
    66             self.assert_(elem not in asm)
     64        for elem in ('LOAD_CONST', 'POP_JUMP_IF_FALSE'):
     65            self.assertNotIn(elem, asm)
    6766        for elem in ('JUMP_ABSOLUTE',):
    68             self.assert_(elem in asm)
     67            self.assertIn(elem, asm)
    6968
    7069    def test_pack_unpack(self):
     
    7574            ):
    7675            asm = dis_single(line)
    77             self.assert_(elem in asm)
    78             self.assert_('BUILD_TUPLE' not in asm)
    79             self.assert_('UNPACK_TUPLE' not in asm)
     76            self.assertIn(elem, asm)
     77            self.assertNotIn('BUILD_TUPLE', asm)
     78            self.assertNotIn('UNPACK_TUPLE', asm)
    8079
    8180    def test_folding_of_tuples_of_constants(self):
     
    8887            ):
    8988            asm = dis_single(line)
    90             self.assert_(elem in asm)
    91             self.assert_('BUILD_TUPLE' not in asm)
     89            self.assertIn(elem, asm)
     90            self.assertNotIn('BUILD_TUPLE', asm)
    9291
    9392        # Bug 1053819:  Tuple of constants misidentified when presented with:
     
    127126            ):
    128127            asm = dis_single(line)
    129             self.assert_(elem in asm, asm)
    130             self.assert_('BINARY_' not in asm)
     128            self.assertIn(elem, asm, asm)
     129            self.assertNotIn('BINARY_', asm)
    131130
    132131        # Verify that unfoldables are skipped
    133132        asm = dis_single('a=2+"b"')
    134         self.assert_('(2)' in asm)
    135         self.assert_("('b')" in asm)
     133        self.assertIn('(2)', asm)
     134        self.assertIn("('b')", asm)
    136135
    137136        # Verify that large sequences do not result from folding
    138137        asm = dis_single('a="x"*1000')
    139         self.assert_('(1000)' in asm)
     138        self.assertIn('(1000)', asm)
     139
     140    def test_binary_subscr_on_unicode(self):
     141        # unicode strings don't get optimized
     142        asm = dis_single('u"foo"[0]')
     143        self.assertNotIn("(u'f')", asm)
     144        self.assertIn('BINARY_SUBSCR', asm)
     145        asm = dis_single('u"\u0061\uffff"[1]')
     146        self.assertNotIn("(u'\\uffff')", asm)
     147        self.assertIn('BINARY_SUBSCR', asm)
     148
     149        # out of range
     150        asm = dis_single('u"fuu"[10]')
     151        self.assertIn('BINARY_SUBSCR', asm)
     152        # non-BMP char (see #5057)
     153        asm = dis_single('u"\U00012345"[0]')
     154        self.assertIn('BINARY_SUBSCR', asm)
     155        asm = dis_single('u"\U00012345abcdef"[3]')
     156        self.assertIn('BINARY_SUBSCR', asm)
     157
    140158
    141159    def test_folding_of_unaryops_on_constants(self):
     
    146164        ):
    147165            asm = dis_single(line)
    148             self.assert_(elem in asm, asm)
    149             self.assert_('UNARY_' not in asm)
     166            self.assertIn(elem, asm, asm)
     167            self.assertNotIn('UNARY_', asm)
    150168
    151169        # Verify that unfoldables are skipped
     
    155173        ):
    156174            asm = dis_single(line)
    157             self.assert_(elem in asm, asm)
    158             self.assert_('UNARY_' in asm)
     175            self.assertIn(elem, asm, asm)
     176            self.assertIn('UNARY_', asm)
    159177
    160178    def test_elim_extra_return(self):
     
    163181            return x
    164182        asm = disassemble(f)
    165         self.assert_('LOAD_CONST' not in asm)
    166         self.assert_('(None)' not in asm)
     183        self.assertNotIn('LOAD_CONST', asm)
     184        self.assertNotIn('(None)', asm)
    167185        self.assertEqual(asm.split().count('RETURN_VALUE'), 1)
    168186
     
    172190            return true_value if cond else false_value
    173191        asm = disassemble(f)
    174         self.assert_('JUMP_FORWARD' not in asm)
    175         self.assert_('JUMP_ABSOLUTE' not in asm)
     192        self.assertNotIn('JUMP_FORWARD', asm)
     193        self.assertNotIn('JUMP_ABSOLUTE', asm)
    176194        self.assertEqual(asm.split().count('RETURN_VALUE'), 2)
    177195
     
    188206            return 6
    189207        asm = disassemble(f)
    190         self.assert_('JUMP_FORWARD' not in asm)
    191         self.assert_('JUMP_ABSOLUTE' not in asm)
     208        self.assertNotIn('JUMP_FORWARD', asm)
     209        self.assertNotIn('JUMP_ABSOLUTE', asm)
    192210        self.assertEqual(asm.split().count('RETURN_VALUE'), 6)
    193211
     
    198216                if cond1: return 4
    199217        asm = disassemble(f)
    200         self.assert_('JUMP_FORWARD' not in asm)
     218        self.assertNotIn('JUMP_FORWARD', asm)
    201219        # There should be one jump for the while loop.
    202220        self.assertEqual(asm.split().count('JUMP_ABSOLUTE'), 1)
     
    208226    from test import test_support
    209227    test_classes = (TestTranforms,)
    210     test_support.run_unittest(*test_classes)
    211 
    212     # verify reference counting
    213     if verbose and hasattr(sys, "gettotalrefcount"):
    214         import gc
    215         counts = [None] * 5
    216         for i in xrange(len(counts)):
    217             test_support.run_unittest(*test_classes)
    218             gc.collect()
    219             counts[i] = sys.gettotalrefcount()
    220         print counts
     228
     229    with test_support.check_py3k_warnings(
     230            ("backquote not supported", SyntaxWarning)):
     231        test_support.run_unittest(*test_classes)
     232
     233        # verify reference counting
     234        if verbose and hasattr(sys, "gettotalrefcount"):
     235            import gc
     236            counts = [None] * 5
     237            for i in xrange(len(counts)):
     238                test_support.run_unittest(*test_classes)
     239                gc.collect()
     240                counts[i] = sys.gettotalrefcount()
     241            print counts
    221242
    222243if __name__ == "__main__":
Note: See TracChangeset for help on using the changeset viewer.