示例#1
0
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