17db96d56Sopenharmony_ci"""Test compiler changes for unary ops (+, -, ~) introduced in Python 2.2"""
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport unittest
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciclass UnaryOpTestCase(unittest.TestCase):
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci    def test_negative(self):
87db96d56Sopenharmony_ci        self.assertTrue(-2 == 0 - 2)
97db96d56Sopenharmony_ci        self.assertEqual(-0, 0)
107db96d56Sopenharmony_ci        self.assertEqual(--2, 2)
117db96d56Sopenharmony_ci        self.assertTrue(-2 == 0 - 2)
127db96d56Sopenharmony_ci        self.assertTrue(-2.0 == 0 - 2.0)
137db96d56Sopenharmony_ci        self.assertTrue(-2j == 0 - 2j)
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci    def test_positive(self):
167db96d56Sopenharmony_ci        self.assertEqual(+2, 2)
177db96d56Sopenharmony_ci        self.assertEqual(+0, 0)
187db96d56Sopenharmony_ci        self.assertEqual(++2, 2)
197db96d56Sopenharmony_ci        self.assertEqual(+2, 2)
207db96d56Sopenharmony_ci        self.assertEqual(+2.0, 2.0)
217db96d56Sopenharmony_ci        self.assertEqual(+2j, 2j)
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci    def test_invert(self):
247db96d56Sopenharmony_ci        self.assertTrue(-2 == 0 - 2)
257db96d56Sopenharmony_ci        self.assertEqual(-0, 0)
267db96d56Sopenharmony_ci        self.assertEqual(--2, 2)
277db96d56Sopenharmony_ci        self.assertTrue(-2 == 0 - 2)
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci    def test_no_overflow(self):
307db96d56Sopenharmony_ci        nines = "9" * 32
317db96d56Sopenharmony_ci        self.assertTrue(eval("+" + nines) == 10**32-1)
327db96d56Sopenharmony_ci        self.assertTrue(eval("-" + nines) == -(10**32-1))
337db96d56Sopenharmony_ci        self.assertTrue(eval("~" + nines) == ~(10**32-1))
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci    def test_negation_of_exponentiation(self):
367db96d56Sopenharmony_ci        # Make sure '**' does the right thing; these form a
377db96d56Sopenharmony_ci        # regression test for SourceForge bug #456756.
387db96d56Sopenharmony_ci        self.assertEqual(-2 ** 3, -8)
397db96d56Sopenharmony_ci        self.assertEqual((-2) ** 3, -8)
407db96d56Sopenharmony_ci        self.assertEqual(-2 ** 4, -16)
417db96d56Sopenharmony_ci        self.assertEqual((-2) ** 4, 16)
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci    def test_bad_types(self):
447db96d56Sopenharmony_ci        for op in '+', '-', '~':
457db96d56Sopenharmony_ci            self.assertRaises(TypeError, eval, op + "b'a'")
467db96d56Sopenharmony_ci            self.assertRaises(TypeError, eval, op + "'a'")
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci        self.assertRaises(TypeError, eval, "~2j")
497db96d56Sopenharmony_ci        self.assertRaises(TypeError, eval, "~2.0")
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ciif __name__ == "__main__":
537db96d56Sopenharmony_ci    unittest.main()
54