forked from exercism/python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathperfect_numbers_test.py
More file actions
71 lines (51 loc) · 2.58 KB
/
perfect_numbers_test.py
File metadata and controls
71 lines (51 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# These tests are auto-generated with test data from:
# https://github.com/exercism/problem-specifications/tree/main/exercises/perfect-numbers/canonical-data.json
# File last updated on 2026-02-25
import unittest
from perfect_numbers import (
classify,
)
class PerfectNumbersTest(unittest.TestCase):
def test_smallest_perfect_number_is_classified_correctly(self):
self.assertEqual(classify(6), "perfect")
def test_medium_perfect_number_is_classified_correctly(self):
self.assertEqual(classify(28), "perfect")
def test_large_perfect_number_is_classified_correctly(self):
self.assertEqual(classify(33550336), "perfect")
class AbundantNumbersTest(unittest.TestCase):
def test_smallest_abundant_number_is_classified_correctly(self):
self.assertEqual(classify(12), "abundant")
def test_medium_abundant_number_is_classified_correctly(self):
self.assertEqual(classify(30), "abundant")
def test_large_abundant_number_is_classified_correctly(self):
self.assertEqual(classify(33550335), "abundant")
def test_perfect_square_abundant_number_is_classified_correctly(self):
self.assertEqual(classify(196), "abundant")
class DeficientNumbersTest(unittest.TestCase):
def test_smallest_prime_deficient_number_is_classified_correctly(self):
self.assertEqual(classify(2), "deficient")
def test_smallest_non_prime_deficient_number_is_classified_correctly(self):
self.assertEqual(classify(4), "deficient")
def test_medium_deficient_number_is_classified_correctly(self):
self.assertEqual(classify(32), "deficient")
def test_large_deficient_number_is_classified_correctly(self):
self.assertEqual(classify(33550337), "deficient")
def test_edge_case_no_factors_other_than_itself_is_classified_correctly(self):
self.assertEqual(classify(1), "deficient")
class InvalidInputsTest(unittest.TestCase):
def test_zero_is_rejected_as_it_is_not_a_positive_integer(self):
with self.assertRaises(ValueError) as err:
classify(0)
self.assertEqual(type(err.exception), ValueError)
self.assertEqual(
err.exception.args[0],
"Classification is only possible for positive integers.",
)
def test_negative_integer_is_rejected_as_it_is_not_a_positive_integer(self):
with self.assertRaises(ValueError) as err:
classify(-1)
self.assertEqual(type(err.exception), ValueError)
self.assertEqual(
err.exception.args[0],
"Classification is only possible for positive integers.",
)