class TestInversion(TestOperatorCommon):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.sut = InversionOperator()

    def test_inversion_should_behave_like_evolution_operator(self):
        self.operator_executes_with_some_chance_scenario(
            self.configuration.operators.inversion.chance, [self.rule_1])
        self.operator_raises_exception_on_invalid_arity_scenario(0, 2)

    def test_inversion_changes_order_of_right_side_of_the_rule(self):
        # Given:
        self.randomizer_mock.perform_with_chance.return_value = True

        # When/Then:
        rule_new, = self.sut.apply(self.service_mock, self.rule_population_mock, self.rule_1)
        assert_that(rule_new, is_(equal_to(Rule(Symbol('A'), Symbol('C'), Symbol('B')))))

        self.randomizer_mock.perform_with_chance.assert_called_once_with(
            self.configuration.operators.inversion.chance)
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.sut = InversionOperator()