From 52daac402a6d47253f9e13d5a955c990c4f171a8 Mon Sep 17 00:00:00 2001 From: natsuoto <279971144+natsuoto@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:01:51 +0530 Subject: feat!: __eq__ and __hash__ value equality on the builder --- tests/builder/equality.test.py | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/builder/equality.test.py (limited to 'tests/builder/equality.test.py') diff --git a/tests/builder/equality.test.py b/tests/builder/equality.test.py new file mode 100644 index 0000000..6c6fce5 --- /dev/null +++ b/tests/builder/equality.test.py @@ -0,0 +1,50 @@ +"""Tests for value-based ``__eq__`` and ``__hash__`` on :class:`BuilderCore`.""" + +from edify import Pattern, RegexBuilder + + +def test_two_builders_with_the_same_chain_are_equal(): + assert RegexBuilder().digit() == RegexBuilder().digit() + + +def test_two_patterns_with_the_same_chain_are_equal(): + assert Pattern().digit() == Pattern().digit() + + +def test_builders_with_different_chains_are_not_equal(): + assert RegexBuilder().digit() != RegexBuilder().word() + + +def test_equal_builders_produce_equal_hashes(): + assert hash(RegexBuilder().digit()) == hash(RegexBuilder().digit()) + + +def test_a_builder_is_usable_as_a_dict_key(): + lookup = {RegexBuilder().digit(): "digit-key"} + assert lookup[RegexBuilder().digit()] == "digit-key" + + +def test_a_builder_can_be_deduplicated_in_a_set(): + dedup = {RegexBuilder().digit(), RegexBuilder().digit(), RegexBuilder().word()} + assert len(dedup) == 2 + + +def test_a_pattern_and_a_regex_builder_with_the_same_state_compare_equal(): + assert Pattern().digit() == RegexBuilder().digit() + + +def test_a_builder_compared_to_a_non_builder_is_not_equal(): + assert (RegexBuilder().digit() == "foo") is False + assert (RegexBuilder().digit() == 42) is False + + +def test_a_builder_compared_to_a_non_builder_returns_not_implemented_from_the_dunder(): + result = RegexBuilder().digit().__eq__("foo") + assert result is NotImplemented + + +def test_hash_of_two_flags_that_differ_are_distinct(): + a = RegexBuilder().ignore_case().digit() + b = RegexBuilder().digit() + assert a != b + assert hash(a) != hash(b) \ No newline at end of file -- cgit v1.2.3 From dab26fa6193af03b5b132f6d7fe60b60d884ba86 Mon Sep 17 00:00:00 2001 From: natsuoto <279971144+natsuoto@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:04:28 +0530 Subject: feat: .fork() and .copy() explicit aliases for branch construction --- tests/builder/equality.test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/builder/equality.test.py') diff --git a/tests/builder/equality.test.py b/tests/builder/equality.test.py index 6c6fce5..717d1ae 100644 --- a/tests/builder/equality.test.py +++ b/tests/builder/equality.test.py @@ -47,4 +47,4 @@ def test_hash_of_two_flags_that_differ_are_distinct(): a = RegexBuilder().ignore_case().digit() b = RegexBuilder().digit() assert a != b - assert hash(a) != hash(b) \ No newline at end of file + assert hash(a) != hash(b) -- cgit v1.2.3