class TestAddingRuleWithCrowdingStrategy(TestAddingRuleStrategyCommon): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.sut = AddingRuleWithCrowdingStrategy() def test_should_know_if_strategy_is_applicable(self): assert_that( self.sut.is_applicable(AddingRuleStrategyHint.expand_population), is_(False)) assert_that( self.sut.is_applicable(AddingRuleStrategyHint.control_population_size), is_(True)) assert_that( self.sut.is_applicable(AddingRuleStrategyHint.control_population_size_with_elitism), is_(False)) def fitness_get_keyfunc_dummy(self, _): return lambda r: 0 \ if r == self.mk_rule('A', 'G', 'C') \ else 1000 def test_should_be_able_to_apply_strategy_for_non_terminal_production(self): # Given: rule_to_be_replaced = self.mk_rule('A', 'G', 'C') self.rule_population_mock.get_random_rules.side_effect = [ [rule_to_be_replaced, self.mk_rule('T', 'E', 'C'), self.mk_rule('A', 'E', 'W')], [self.mk_rule('A', 'W', 'H'), self.mk_rule('T', 'B', 'W'), self.mk_rule('G', 'W', 'C')] ] self.fitness_mock.get_keyfunc_getter.side_effect = self.fitness_get_keyfunc_dummy # When: self.sut.apply(self.rule_supervisor_mock, self.statistics_mock, self.rule, self.rule_population_mock) # Then: assert_that(self.rule_population_mock.get_random_rules.call_count, is_(equal_to(2))) self.rule_population_mock.remove_rule.assert_called_once_with(rule_to_be_replaced) self.statistics_mock.on_rule_removed.\ assert_called_once_with(rule_to_be_replaced) self.rule_population_mock.add_rule.assert_called_once_with(self.rule, self.randomizer_mock) self.statistics_mock.on_added_new_rule.\ assert_called_once_with(self.rule) def test_should_add_rule_only_if_it_doesnt_exist(self): # Given: self.rule_population_mock.has_rule.return_value = True # When: self.sut.apply(self.rule_supervisor_mock, self.statistics_mock, self.rule, self.rule_population_mock) # Then: assert_that(self.rule_population_mock.get_random_rules.call_count, is_(equal_to(0))) assert_that(not_(self.rule_population_mock.called)) assert_that(not_(self.statistics_mock.on_rule_removed.called)) assert_that(not_(self.rule_population_mock.add_rule.called)) assert_that(not_(self.statistics_mock.on_added_new_rule.called))
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.sut = AddingRuleWithCrowdingStrategy()