"""Test compiler changes for unary ops (+, -, ~) introduced in Python 2.2"""

import unittest
from test.test_support import run_unittest, have_unicode

class UnaryOpTestCase(unittest.TestCase):

    def test_negative(self):
        self.assertTrue(-2 == 0 - 2)
        self.assertTrue(-0 == 0)
        self.assertTrue(--2 == 2)
        self.assertTrue(-2L == 0 - 2L)
        self.assertTrue(-2.0 == 0 - 2.0)
        self.assertTrue(-2j == 0 - 2j)

    def test_positive(self):
        self.assertTrue(+2 == 2)
        self.assertTrue(+0 == 0)
        self.assertTrue(++2 == 2)
        self.assertTrue(+2L == 2L)
        self.assertTrue(+2.0 == 2.0)
        self.assertTrue(+2j == 2j)

    def test_invert(self):
        self.assertTrue(-2 == 0 - 2)
        self.assertTrue(-0 == 0)
        self.assertTrue(--2 == 2)
        self.assertTrue(-2L == 0 - 2L)

    def test_no_overflow(self):
        nines = "9" * 32
        self.assertTrue(eval("+" + nines) == eval("+" + nines + "L"))
        self.assertTrue(eval("-" + nines) == eval("-" + nines + "L"))
        self.assertTrue(eval("~" + nines) == eval("~" + nines + "L"))

    def test_negation_of_exponentiation(self):
        # Make sure '**' does the right thing; these form a
        # regression test for SourceForge bug #456756.
        self.assertEqual(-2 ** 3, -8)
        self.assertEqual((-2) ** 3, -8)
        self.assertEqual(-2 ** 4, -16)
        self.assertEqual((-2) ** 4, 16)

    def test_bad_types(self):
        for op in '+', '-', '~':
            self.assertRaises(TypeError, eval, op + "'a'")
            if have_unicode:
                self.assertRaises(TypeError, eval, op + "u'a'")

        self.assertRaises(TypeError, eval, "~2j")
        self.assertRaises(TypeError, eval, "~2.0")


def test_main():
    run_unittest(UnaryOpTestCase)


if __name__ == "__main__":
    test_main()
