test_unary.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """Test compiler changes for unary ops (+, -, ~) introduced in Python 2.2"""
  2. import unittest
  3. class UnaryOpTestCase(unittest.TestCase):
  4. def test_negative(self):
  5. self.assertTrue(-2 == 0 - 2)
  6. self.assertEqual(-0, 0)
  7. self.assertEqual(--2, 2)
  8. self.assertTrue(-2 == 0 - 2)
  9. self.assertTrue(-2.0 == 0 - 2.0)
  10. self.assertTrue(-2j == 0 - 2j)
  11. def test_positive(self):
  12. self.assertEqual(+2, 2)
  13. self.assertEqual(+0, 0)
  14. self.assertEqual(++2, 2)
  15. self.assertEqual(+2, 2)
  16. self.assertEqual(+2.0, 2.0)
  17. self.assertEqual(+2j, 2j)
  18. def test_invert(self):
  19. self.assertTrue(-2 == 0 - 2)
  20. self.assertEqual(-0, 0)
  21. self.assertEqual(--2, 2)
  22. self.assertTrue(-2 == 0 - 2)
  23. def test_no_overflow(self):
  24. nines = "9" * 32
  25. self.assertTrue(eval("+" + nines) == 10**32-1)
  26. self.assertTrue(eval("-" + nines) == -(10**32-1))
  27. self.assertTrue(eval("~" + nines) == ~(10**32-1))
  28. def test_negation_of_exponentiation(self):
  29. # Make sure '**' does the right thing; these form a
  30. # regression test for SourceForge bug #456756.
  31. self.assertEqual(-2 ** 3, -8)
  32. self.assertEqual((-2) ** 3, -8)
  33. self.assertEqual(-2 ** 4, -16)
  34. self.assertEqual((-2) ** 4, 16)
  35. def test_bad_types(self):
  36. for op in '+', '-', '~':
  37. self.assertRaises(TypeError, eval, op + "b'a'")
  38. self.assertRaises(TypeError, eval, op + "'a'")
  39. self.assertRaises(TypeError, eval, "~2j")
  40. self.assertRaises(TypeError, eval, "~2.0")
  41. if __name__ == "__main__":
  42. unittest.main()