Skip to content

Commit f1f7683

Browse files
committed
Added unit tests for stochastic hill climbing.
1 parent 90d2292 commit f1f7683

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#! usr/bin/env python3
2+
3+
import re
4+
5+
import stochastic_hill_climbing as shc
6+
7+
import unittest
8+
9+
class StochasticHillClimbingTests(unittest.TestCase):
10+
"""
11+
Unit tests for functions in stochastic_hill_climbing.py .
12+
Has some additional tests compared to Ruby version.
13+
14+
@author Chad Estioco
15+
"""
16+
17+
def test_onemax(self):
18+
self.assertEqual(4, shc.onemax("1111"))
19+
self.assertEqual(2, shc.onemax("0101"))
20+
self.assertEqual(0, shc.onemax("0000"))
21+
22+
def test_random_bitstring(self):
23+
"""
24+
Tests the string generated as well as it's size.
25+
"""
26+
27+
bit10 = re.compile("[01]{10}")
28+
29+
for i in range(100):
30+
self.assertTrue(bit10.match(shc.random_bitstring(10)))
31+
32+
bit8 = re.compile("[01]{8}")
33+
34+
for i in range(100):
35+
self.assertTrue(bit8.match(shc.random_bitstring(8)))
36+
37+
# TODO: test_random_bitstring_ratio
38+
39+
def test_random_neighbor(self):
40+
parent = "00000000"
41+
42+
for i in range(100):
43+
random_neighbor = shc.random_neighbor(parent)
44+
self.assertEqual(len(random_neighbor), len(parent))
45+
self.assertNotEqual(random_neighbor, parent)
46+
self.assertFalse(random_neighbor is parent)
47+
48+
diffs = 0
49+
50+
for i in range(len(random_neighbor)):
51+
if parent[i] != random_neighbor[i]:
52+
diffs += 1
53+
54+
self.assertEqual(1, diffs)
55+
56+
if __name__ == "__main__":
57+
tests = unittest.TestLoader().loadTestsFromTestCase(StochasticHillClimbingTests)
58+
unittest.TextTestRunner(verbosity=2).run(tests)

0 commit comments

Comments
 (0)