Skip to content

Commit cccdaf1

Browse files
committed
Add basic tests
1 parent 8c7fff5 commit cccdaf1

File tree

1 file changed

+212
-0
lines changed

1 file changed

+212
-0
lines changed

test_pythagorean_tuples.py

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
import math
2+
import unittest
3+
from random import randint
4+
5+
from pythagorean_tuples import pythagorean_triples
6+
7+
8+
class TestExceptions(unittest.TestCase):
9+
def test_not_integer(self):
10+
self.assertRaises(TypeError, pythagorean_triples, 3.14, "TypeError has not been raised")
11+
12+
def test_not_positive(self):
13+
self.assertRaises(ValueError, pythagorean_triples, 0, "ValueError has not been raised")
14+
15+
16+
class TestAPrimitive(unittest.TestCase):
17+
def test_2(self):
18+
self.assertEqual(set(), pythagorean_triples(2, True))
19+
20+
def test_4(self):
21+
self.assertEqual({(4, 3, 5)}, pythagorean_triples(4, True))
22+
23+
def test_32(self):
24+
self.assertEqual({(32, 255, 257)}, pythagorean_triples(32, True))
25+
26+
def test_random(self):
27+
res = pythagorean_triples(2 ** randint(10, 20), True)
28+
for t in res:
29+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
30+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
31+
for n in t:
32+
self.assertIs(int, type(n))
33+
34+
def test_random_huge(self):
35+
res = pythagorean_triples(2 ** randint(100, 200), True)
36+
for t in res:
37+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
38+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
39+
for n in t:
40+
self.assertIs(int, type(n))
41+
42+
43+
class TestA(unittest.TestCase):
44+
def test_2(self):
45+
self.assertEqual(set(), pythagorean_triples(2, False))
46+
47+
def test_4(self):
48+
self.assertEqual({(4, 3, 5)}, pythagorean_triples(4, False))
49+
50+
def test_32(self):
51+
self.assertEqual({(32, 24, 40), (32, 60, 68), (32, 126, 130), (32, 255, 257)}, pythagorean_triples(32, False))
52+
53+
def test_random(self):
54+
res = pythagorean_triples(2 ** randint(10, 20), False)
55+
for t in res:
56+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
57+
for n in t:
58+
self.assertIs(int, type(n))
59+
60+
def test_random_huge(self):
61+
res = pythagorean_triples(2 ** randint(100, 200), False)
62+
for t in res:
63+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
64+
for n in t:
65+
self.assertIs(int, type(n))
66+
67+
68+
class TestBPrimitive(unittest.TestCase):
69+
def test_3(self):
70+
self.assertEqual({(3, 4, 5)}, pythagorean_triples(3, True))
71+
72+
def test_13(self):
73+
self.assertEqual({(13, 84, 85)}, pythagorean_triples(13, True))
74+
75+
def test_271(self):
76+
self.assertEqual({(271, 36720, 36721)}, pythagorean_triples(271, True))
77+
78+
def test_121(self):
79+
self.assertEqual({(121, 7320, 7321)}, pythagorean_triples(121, True))
80+
81+
def test_153(self):
82+
self.assertEqual({(153, 104, 185), (153, 11704, 11705)}, pythagorean_triples(153, True))
83+
84+
def test_235(self):
85+
self.assertEqual({(235, 1092, 1117), (235, 27612, 27613)}, pythagorean_triples(235, True))
86+
87+
def test_random(self):
88+
r = randint(10, 1000)
89+
while r % 2 == 0:
90+
r //= 2
91+
res = pythagorean_triples(r, True)
92+
for t in res:
93+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
94+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
95+
for n in t:
96+
self.assertIs(int, type(n))
97+
98+
def test_random_huge(self):
99+
r = randint(100, 1000000)
100+
while r % 2 == 0:
101+
r //= 2
102+
res = pythagorean_triples(r, True)
103+
for t in res:
104+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
105+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
106+
for n in t:
107+
self.assertIs(int, type(n))
108+
109+
110+
class TestB(unittest.TestCase):
111+
def test_3(self):
112+
self.assertEqual({(3, 4, 5)}, pythagorean_triples(3, False))
113+
114+
def test_13(self):
115+
self.assertEqual({(13, 84, 85)}, pythagorean_triples(13, False))
116+
117+
def test_271(self):
118+
self.assertEqual({(271, 36720, 36721)}, pythagorean_triples(271, False))
119+
120+
def test_121(self):
121+
self.assertEqual({(121, 660, 671), (121, 7320, 7321)}, pythagorean_triples(121, False))
122+
123+
def test_153(self):
124+
self.assertEqual({(153, 104, 185), (153, 204, 255), (153, 420, 447), (153, 680, 697), (153, 1296, 1305),
125+
(153, 3900, 3903), (153, 11704, 11705)}, pythagorean_triples(153, False))
126+
127+
def test_235(self):
128+
self.assertEqual({(235, 564, 611), (235, 1092, 1117), (235, 5520, 5525), (235, 27612, 27613)},
129+
pythagorean_triples(235, False))
130+
131+
def test_random(self):
132+
r = randint(10, 1000)
133+
while r % 2 == 0:
134+
r //= 2
135+
res = pythagorean_triples(r, False)
136+
for t in res:
137+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
138+
for n in t:
139+
self.assertIs(int, type(n))
140+
141+
def test_random_huge(self):
142+
r = randint(100, 1000000)
143+
while r % 2 == 0:
144+
r //= 2
145+
res = pythagorean_triples(r, False)
146+
for t in res:
147+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
148+
for n in t:
149+
self.assertIs(int, type(n))
150+
151+
152+
class TestCPrimitive(unittest.TestCase):
153+
def test_12(self):
154+
self.assertEqual({(12, 5, 13), (12, 35, 37)}, pythagorean_triples(12, True))
155+
156+
def test_14(self):
157+
self.assertEqual(set(), pythagorean_triples(14, True))
158+
159+
def test_34(self):
160+
self.assertEqual(set(), pythagorean_triples(34, True))
161+
162+
def test_56(self):
163+
self.assertEqual({(56, 33, 65), (56, 783, 785)}, pythagorean_triples(56, True))
164+
165+
def test_random(self):
166+
res = pythagorean_triples(randint(10, 100) * 2, True)
167+
for t in res:
168+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
169+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
170+
for n in t:
171+
self.assertIs(int, type(n))
172+
173+
def test_random_huge(self):
174+
res = pythagorean_triples(randint(100, 100000) * 2, True)
175+
for t in res:
176+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
177+
self.assertEqual(1, math.gcd(*t), f"{t} is not primitive")
178+
for n in t:
179+
self.assertIs(int, type(n))
180+
181+
182+
class TestC(unittest.TestCase):
183+
def test_12(self):
184+
self.assertEqual({(12, 5, 13), (12, 35, 37)}, pythagorean_triples(12, False))
185+
186+
def test_14(self):
187+
self.assertEqual({(14, 48, 50)}, pythagorean_triples(14, False))
188+
189+
def test_34(self):
190+
self.assertEqual({(34, 288, 290)}, pythagorean_triples(34, False))
191+
192+
def test_56(self):
193+
self.assertEqual({(56, 33, 65), (56, 42, 70), (56, 90, 106), (56, 105, 119), (56, 192, 200), (56, 390, 394),
194+
(56, 783, 785)}, pythagorean_triples(56, False))
195+
196+
def test_random(self):
197+
res = pythagorean_triples(randint(10, 100) * 2, False)
198+
for t in res:
199+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
200+
for n in t:
201+
self.assertIs(int, type(n))
202+
203+
def test_random_huge(self):
204+
res = pythagorean_triples(randint(100, 100000) * 2, False)
205+
for t in res:
206+
self.assertEqual(t[2] ** 2, t[0] ** 2 + t[1] ** 2, f"{t} is not Pythagorean triple")
207+
for n in t:
208+
self.assertIs(int, type(n))
209+
210+
211+
if __name__ == '__main__':
212+
unittest.main()

0 commit comments

Comments
 (0)