Files
python/exercises/collatz-conjecture/collatz_conjecture_test.py

36 lines
934 B
Python
Raw Normal View History

import unittest
from collatz_conjecture import steps
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.1
class CollatzConjectureTest(unittest.TestCase):
def test_zero_steps_for_one(self):
self.assertEqual(steps(1), 0)
def test_divide_if_even(self):
self.assertEqual(steps(16), 4)
def test_even_and_odd_steps(self):
self.assertEqual(steps(12), 9)
def test_large_number_of_even_and_odd_steps(self):
self.assertEqual(steps(1000000), 152)
def test_zero_is_an_error(self):
with self.assertRaisesWithMessage(ValueError):
steps(0)
def test_negative_value_is_an_error(self):
with self.assertRaisesWithMessage(ValueError):
steps(-15)
# Utility functions
def assertRaisesWithMessage(self, exception):
return self.assertRaisesRegex(exception, r".+")
if __name__ == "__main__":
unittest.main()