class ChromosomeTestCase(unittest.TestCase): chromosome = None def setUp(self): self.chromosome_manager = ChromosomeManager(42) self.chromosome = Chromosome(self.chromosome_manager) def test_str(self): self.chromosome.binary_string = '010111000011101100101010011111010100' self.assertEqual(str(self.chromosome), '010111000011101100101010011111010100') def test_evaluation_with_correct_data(self): self.chromosome.binary_string = '010111000011101100101010011111010100' self.chromosome.evaluate(5) self.assertEqual(self.chromosome.result, 5) self.assertEqual(self.chromosome.score, 1e18) def test_evaluation_with_incorrect_data(self): self.chromosome.binary_string = '111111111111111111111111111111111111' self.chromosome.evaluate(20) self.assertEqual(self.chromosome.result, 0) self.assertEqual(self.chromosome.score, 0.05) def test_evaluation_with_correct_and_incorrect_data(self): self.chromosome.binary_string = '011011100001101010110101100110111100' self.chromosome.evaluate(10) self.assertEqual(self.chromosome.result, 11) self.assertEqual(self.chromosome.score, 1) def test_evaluation_with_zero_division(self): self.chromosome.binary_string = '001011111111111111111111110111110000' self.chromosome.evaluate(5) self.assertEqual(self.chromosome.result, 2) self.assertEqual(self.chromosome.score, 1 / 3) def test_fill_with_random_values(self): self.chromosome.fill_with_random_values() self.assertEqual(len(self.chromosome.binary_string), 36) for char in self.chromosome.binary_string: self.assertTrue(0 <= int(char) <= 1) def test_mutate(self): original_binary_string = '010111000011101100101010011111010100' self.chromosome.binary_string = original_binary_string mutated_chars = self.chromosome.mutate(0.1) levenshtein_distance = self._get_levenshtein_distance(original_binary_string, self.chromosome.binary_string) self.assertEqual(mutated_chars, levenshtein_distance) def test_mutate_full(self): original_binary_string = '010111000011101100101010011111010100' reversed_string = '101000111100010011010101100000101011' self.chromosome.binary_string = original_binary_string mutated_chars = self.chromosome.mutate(1) self.assertEqual(mutated_chars, 36) self.assertEqual(self.chromosome.binary_string, reversed_string) def _get_levenshtein_distance(self, string1, string2): self.assertEqual(len(string1), len(string2)) length = len(string1) different_chars_count = 0 for i in range(0, length): if string1[i] != string2[i]: different_chars_count += 1 return different_chars_count