import unittest

from wordy import calculate


class WordyTest(unittest.TestCase):
    def test_simple_add_1(self):
        self.assertEqual(calculate("What is 5 plus 13?"), 18)

    def test_simple_add_2(self):
        self.assertEqual(calculate("What is 5 plus -13?"), -8)

    def test_simple_sub_1(self):
        self.assertEqual(calculate("What is 103 minus 97?"), 6)

    def test_simple_sub_2(self):
        self.assertEqual(calculate("What is 97 minus 103?"), -6)

    def test_simple_mult(self):
        self.assertEqual(calculate("What is 7 multiplied by 3?"), 21)

    def test_simple_div(self):
        self.assertEqual(calculate("What is 45 divided by 5?"), 9)

    def test_add_negative_numbers(self):
        self.assertEqual(calculate("What is -1 plus -10?"), -11)

    def test_add_more_digits(self):
        self.assertEqual(calculate("What is 123 plus 45678?"), 45801)

    def test_add_twice(self):
        self.assertEqual(calculate("What is 1 plus 2 plus 1?"), 4)

    def test_add_then_subtract(self):
        self.assertEqual(calculate("What is 1 plus 5 minus -8?"), 14)

    def test_subtract_twice(self):
        self.assertEqual(calculate("What is 20 minus 14 minus 13?"), -7)

    def test_multiply_twice(self):
        self.assertEqual(
            calculate("What is 2 multiplied by -2 multiplied by 3?"), -12)

    def test_add_then_multiply(self):
        self.assertEqual(calculate("What is -3 plus 7 multiplied by -2?"), -8)

    def test_divide_twice(self):
        self.assertEqual(
            calculate("What is -12000 divided by 25 divided by -30?"), 16)

    def test_invalid_operation(self):
        with self.assertRaises(ValueError):
            calculate("What is 4 xor 7?")

    def test_missing_operation(self):
        with self.assertRaises(ValueError):
            calculate("What is 2 2 minus 3?")

    def test_missing_number(self):
        with self.assertRaises(ValueError):
            calculate("What is 7 plus multiplied by -2?")

    def test_irrelevant_question(self):
        with self.assertRaises(ValueError):
            calculate("Which is greater, 3 or 2?")


if __name__ == '__main__':
    unittest.main()

import unittest

from wordy import calculate


# Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0

class WordyTest(unittest.TestCase):
    def test_addition(self):
        self.assertEqual(calculate("What is 1 plus 1?"), 2)

    def test_more_addition(self):
        self.assertEqual(calculate("What is 53 plus 2?"), 55)

    def test_addition_with_negative_numbers(self):
        self.assertEqual(calculate("What is -1 plus -10?"), -11)

    def test_large_addition(self):
        self.assertEqual(calculate("What is 123 plus 45678?"), 45801)

    def test_subtraction(self):
        self.assertEqual(calculate("What is 4 minus -12?"), 16)

    def test_multiplication(self):
        self.assertEqual(calculate("What is -3 multiplied by 25?"), -75)

    def test_division(self):
        self.assertEqual(calculate("What is 33 divided by -3?"), -11)

    def test_multiple_addition(self):
        self.assertEqual(calculate("What is 1 plus 1 plus 1?"), 3)

    def test_addition_then_subtraction(self):
        self.assertEqual(calculate("What is 1 plus 5 minus -2?"), 8)

    def test_multiple_subtraction(self):
        self.assertEqual(calculate("What is 20 minus 4 minus 13?"), 3)

    def test_subtraction_then_addition(self):
        self.assertEqual(calculate("What is 17 minus 6 plus 3?"), 14)

    def test_multiple_multiplication(self):
        self.assertEqual(
            calculate("What is 2 multiplied by -2 multiplied by 3?"), -12)

    def test_addition_then_multiplication(self):
        self.assertEqual(calculate("What is -3 plus 7 multiplied by -2?"), -8)

    def test_multiple_division(self):
        self.assertEqual(
            calculate("What is -12 divided by 2 divided by -3?"), 2)

    def test_unknown_operation(self):
        with self.assertRaises(ValueError):
            calculate("What is 52 cubed?")

    def test_non_math_question(self):
        with self.assertRaises(ValueError):
            calculate("Who is the President of the United States?")

    # Additional tests for this track

    def test_missing_operation(self):
        with self.assertRaises(ValueError):
            calculate("What is 2 2 minus 3?")

    def test_missing_number(self):
        with self.assertRaises(ValueError):
            calculate("What is 7 plus multiplied by -2?")


if __name__ == '__main__':
    unittest.main()

add test version and updated tests to match canonical data