diff --git a/tests/test_dagset.py b/tests/test_dagset.py index cf53177..43798bc 100644 --- a/tests/test_dagset.py +++ b/tests/test_dagset.py @@ -89,32 +89,59 @@ class TestDAGSetBasicOps: class TestDAGSetCallbacks: """Test callback mechanisms.""" - def test_on_add_callback(self) -> None: - added: list[int] = [] - s = DAGSetView({1, 2}) - s.on_add = lambda v: added.append(v) - s.add(3) - assert 3 in added - assert len(added) == 1 + class TestBasicOps: + def test_on_add_callback(self) -> None: + added: list[int] = [] + s = DAGSetView({1, 2}) + s.on_add = lambda v: added.append(v) + s.add(3) + assert 3 in added + assert len(added) == 1 - def test_on_remove_callback(self) -> None: - removed: list[int] = [] - s = DAGSetView({1, 2, 3}) - s.on_remove = lambda v: removed.append(v) - s.discard(2) - assert 2 in removed - assert len(removed) == 1 + def test_on_remove_callback(self) -> None: + removed: list[int] = [] + s = DAGSetView({1, 2, 3}) + s.on_remove = lambda v: removed.append(v) + s.discard(2) + assert 2 in removed + assert len(removed) == 1 + + def test_callbacks_none_by_default(self) -> None: + s = DAGSetView() + assert s.on_add is None + assert s.on_remove is None + + class TestInPlaceOperators: + def test_ior_triggers_callbacks(self) -> None: + added: list[int] = [] + s = DAGSetView({1}) + s.on_add = lambda v: added.append(v) + s |= {2, 3} + assert 2 in added + assert 3 in added + + def test_iadd_triggers_callbacks(self) -> None: + added: list[int] = [] + s = DAGSetView({1}) + s.on_add = lambda v: added.append(v) + s += [2, 3] + assert 2 in added + assert 3 in added + + def test_isub_triggers_callbacks(self) -> None: + removed: list[int] = [] + s = DAGSetView({1, 2, 3}) + s.on_remove = lambda v: removed.append(v) + s -= {2, 3} + assert 2 in removed + assert 3 in removed - def test_callbacks_none_by_default(self) -> None: - s = DAGSetView() - assert s.on_add is None - assert s.on_remove is None class TestDAGSetInPlaceOperators: """Test in-place set operators.""" - class TestDAGSetIOR: + class TestIOR: def test_set(self) -> None: s = DAGSetView({1, 2}) s |= {3, 4} @@ -130,86 +157,56 @@ class TestDAGSetInPlaceOperators: s |= "xyz" assert "xyz" in s - class TestDAGSetIAdd: - pass + class TestIAdd: + def test_set(self) -> None: + s = DAGSetView({1, 2}) + s += {3, 4} + assert set(s) == {1, 2, 3, 4} - class TestDAGSetISub: - pass + def test_list(self) -> None: + s = DAGSetView({1}) + s += [2, 3] + assert set(s) == {1, 2, 3} - def test_iadd_with_set(self) -> None: - s = DAGSetView({1, 2}) - s += {3, 4} - assert set(s) == {1, 2, 3, 4} + def test_string(self) -> None: + s = DAGSetView({"a"}) + s += "b" + assert "b" in s - def test_iadd_with_list(self) -> None: - s = DAGSetView({1}) - s += [2, 3] - assert set(s) == {1, 2, 3} + class TestISub: + def test_set(self) -> None: + s = DAGSetView({1, 2, 3, 4}) + s -= {2, 3} + assert set(s) == {1, 4} - def test_iadd_with_string(self) -> None: - s = DAGSetView({"a"}) - s += "b" - assert "b" in s + def test_list(self) -> None: + s = DAGSetView({1, 2, 3}) + s -= [2] + assert set(s) == {1, 3} - def test_isub_with_set(self) -> None: - s = DAGSetView({1, 2, 3, 4}) - s -= {2, 3} - assert set(s) == {1, 4} + def test_string(self) -> None: + s = DAGSetView({"a", "b", "c"}) + s -= "b" + assert set(s) == {"a", "c"} - def test_isub_with_list(self) -> None: - s = DAGSetView({1, 2, 3}) - s -= [2] - assert set(s) == {1, 3} + class TestIAnd: + def test_set(self) -> None: + s = DAGSetView({1, 2, 3}) + s &= {2, 3, 4} + assert set(s) == {2, 3} - def test_isub_with_string(self) -> None: - s = DAGSetView({"a", "b", "c"}) - s -= "b" - assert set(s) == {"a", "c"} + def test_list(self) -> None: + s = DAGSetView({1, 2, 3}) + s &= [2, 3] + assert set(s) == {2, 3} - def test_iand_with_set(self) -> None: - s = DAGSetView({1, 2, 3}) - s &= {2, 3, 4} - assert set(s) == {2, 3} + class TestIXor: + def test_set(self) -> None: + s = DAGSetView({1, 2, 3}) + s ^= {3, 4, 5} + assert set(s) == {1, 2, 4, 5} - def test_iand_with_list(self) -> None: - s = DAGSetView({1, 2, 3}) - s &= [2, 3] - assert set(s) == {2, 3} - - def test_ixor_with_set(self) -> None: - s = DAGSetView({1, 2, 3}) - s ^= {3, 4, 5} - assert set(s) == {1, 2, 4, 5} - - def test_ixor_with_list(self) -> None: - s = DAGSetView({1, 2}) - s ^= [2, 3] - assert set(s) == {1, 3} - - -class TestDAGSetCallbacksWithOperators: - """Test that callbacks fire with in-place operators.""" - - def test_ior_triggers_callbacks(self) -> None: - added: list[int] = [] - s = DAGSetView({1}) - s.on_add = lambda v: added.append(v) - s |= {2, 3} - assert 2 in added - assert 3 in added - - def test_iadd_triggers_callbacks(self) -> None: - added: list[int] = [] - s = DAGSetView({1}) - s.on_add = lambda v: added.append(v) - s += [2, 3] - assert 2 in added - assert 3 in added - - def test_isub_triggers_callbacks(self) -> None: - removed: list[int] = [] - s = DAGSetView({1, 2, 3}) - s.on_remove = lambda v: removed.append(v) - s -= {2, 3} - assert 2 in removed - assert 3 in removed + def test_list(self) -> None: + s = DAGSetView({1, 2}) + s ^= [2, 3] + assert set(s) == {1, 3}