diff --git a/boolean/boolean.py b/boolean/boolean.py index eeffbc4..5515fb5 100644 --- a/boolean/boolean.py +++ b/boolean/boolean.py @@ -1491,7 +1491,12 @@ def absorb(self, args): i -= 1 continue else: - args[j] = b + if b in args: + del args[j] + if j < i: + i -= 1 + else: + args[j] = b j += 1 continue diff --git a/boolean/test_boolean.py b/boolean/test_boolean.py index f1c254f..93be548 100644 --- a/boolean/test_boolean.py +++ b/boolean/test_boolean.py @@ -760,6 +760,28 @@ def test_simplify(self): ) assert result.pretty() == expected.pretty() + def test_absorption_invariant_to_order(self): + algebra = BooleanAlgebra() + + a, b = algebra.symbols("a", "b") + + e = (~a | ~b) & b & ~a + args = [ + ~a | ~b, + ~a, + b, + ] + + result_original = e.absorb(args) + + args[1], args[2] = args[2], args[1] + result_swapped = e.absorb(args) + + assert len(result_original) == 2 + assert len(result_swapped) == 2 + assert result_original[0] == result_swapped[1] + assert result_original[1] == result_swapped[0] + @expectedFailure def test_parse_complex_expression_should_create_same_expression_as_python(self): algebra = BooleanAlgebra()