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