2015-11-26 15:05:58 +01:00
|
|
|
import unittest
|
|
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
from perfect_numbers import classify
|
|
|
|
|
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2018-02-21 22:37:47 +08:00
|
|
|
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
|
2015-11-26 15:05:58 +01:00
|
|
|
|
|
|
|
|
class PerfectNumbersTest(unittest.TestCase):
|
2017-11-14 15:31:34 -05:00
|
|
|
def test_smallest_perfect_number(self):
|
|
|
|
|
self.assertIs(classify(6), "perfect")
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
def test_medium_perfect_number(self):
|
|
|
|
|
self.assertIs(classify(28), "perfect")
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
def test_large_perfect_number(self):
|
|
|
|
|
self.assertIs(classify(33550336), "perfect")
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
|
|
|
|
|
class AbundantNumbersTest(unittest.TestCase):
|
|
|
|
|
def test_smallest_abundant_number(self):
|
|
|
|
|
self.assertIs(classify(12), "abundant")
|
|
|
|
|
|
|
|
|
|
def test_medium_abundant_number(self):
|
|
|
|
|
self.assertIs(classify(30), "abundant")
|
|
|
|
|
|
|
|
|
|
def test_large_abundant_number(self):
|
|
|
|
|
self.assertIs(classify(33550335), "abundant")
|
|
|
|
|
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
class DeficientNumbersTest(unittest.TestCase):
|
|
|
|
|
def test_smallest_prime_deficient_number(self):
|
|
|
|
|
self.assertIs(classify(2), "deficient")
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-11-14 15:31:34 -05:00
|
|
|
def test_smallest_nonprime_deficient_number(self):
|
|
|
|
|
self.assertIs(classify(4), "deficient")
|
|
|
|
|
|
|
|
|
|
def test_medium_deficient_number(self):
|
|
|
|
|
self.assertIs(classify(32), "deficient")
|
|
|
|
|
|
|
|
|
|
def test_large_deficient_number(self):
|
|
|
|
|
self.assertIs(classify(33550337), "deficient")
|
|
|
|
|
|
|
|
|
|
def test_edge_case(self):
|
|
|
|
|
self.assertIs(classify(1), "deficient")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InvalidInputsTest(unittest.TestCase):
|
|
|
|
|
def test_zero(self):
|
2017-12-12 18:11:43 +00:00
|
|
|
with self.assertRaisesWithMessage(ValueError):
|
2017-11-14 15:31:34 -05:00
|
|
|
classify(0)
|
|
|
|
|
|
|
|
|
|
def test_negative(self):
|
2017-12-12 18:11:43 +00:00
|
|
|
with self.assertRaisesWithMessage(ValueError):
|
2017-11-14 15:31:34 -05:00
|
|
|
classify(-1)
|
2015-11-26 15:05:58 +01:00
|
|
|
|
2017-12-12 18:11:43 +00:00
|
|
|
# Utility functions
|
|
|
|
|
def setUp(self):
|
|
|
|
|
try:
|
2018-01-18 10:47:11 -06:00
|
|
|
self.assertRaisesRegex
|
2017-12-12 18:11:43 +00:00
|
|
|
except AttributeError:
|
2018-01-18 10:47:11 -06:00
|
|
|
self.assertRaisesRegex = self.assertRaisesRegexp
|
2017-12-12 18:11:43 +00:00
|
|
|
|
|
|
|
|
def assertRaisesWithMessage(self, exception):
|
|
|
|
|
return self.assertRaisesRegex(exception, r".+")
|
|
|
|
|
|
2016-11-29 09:44:47 +01:00
|
|
|
|
2015-11-26 15:05:58 +01:00
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|