import pytest
import pattern_core
def test_subject_combination_merge_strategy():
subject1 = pattern_core.Subject(
identity="alice",
labels={"Person"},
properties={"name": pattern_core.Value.string("Alice")}
)
subject2 = pattern_core.Subject(
identity="bob",
labels={"Employee"},
properties={"role": pattern_core.Value.string("Engineer")}
)
p1 = pattern_core.Pattern.point(subject1)
p2 = pattern_core.Pattern.point(subject2)
merged = p1.combine(p2)
result_subject = merged.value
assert result_subject.identity == "alice" assert "Person" in result_subject.get_labels() assert "Employee" in result_subject.get_labels()
assert "name" in result_subject.get_properties() assert "role" in result_subject.get_properties()
@pytest.mark.skip(reason="Strategy parameter not yet implemented for generic Pattern.combine()")
def test_subject_combination_first_strategy():
pass
@pytest.mark.skip(reason="Strategy parameter not yet implemented for generic Pattern.combine()")
def test_subject_combination_last_strategy():
pass
@pytest.mark.skip(reason="Strategy parameter not yet implemented for generic Pattern.combine()")
def test_subject_combination_empty_strategy():
pass
@pytest.mark.skip(reason="Custom function parameter not yet implemented for generic Pattern.combine()")
def test_subject_combination_custom_function():
pass
def test_subject_combination_with_elements():
subject1 = pattern_core.Subject(identity="s1", labels=set(), properties={})
subject2 = pattern_core.Subject(identity="s2", labels=set(), properties={})
subject3 = pattern_core.Subject(identity="s3", labels=set(), properties={})
subject4 = pattern_core.Subject(identity="s4", labels=set(), properties={})
p1 = pattern_core.Pattern.pattern(
subject1,
[pattern_core.Pattern.point(subject2)]
)
p2 = pattern_core.Pattern.pattern(
subject3,
[pattern_core.Pattern.point(subject4)]
)
merged = p1.combine(p2)
assert merged.length() == 2
elements = merged.elements
assert elements[0].value.identity == "s2"
assert elements[1].value.identity == "s4"
def test_subject_combination_associativity():
s1 = pattern_core.Subject(identity="a", labels={"L1"}, properties={})
s2 = pattern_core.Subject(identity="b", labels={"L2"}, properties={})
s3 = pattern_core.Subject(identity="c", labels={"L3"}, properties={})
p1 = pattern_core.Pattern.point(s1)
p2 = pattern_core.Pattern.point(s2)
p3 = pattern_core.Pattern.point(s3)
left = p1.combine(p2).combine(p3)
right = p1.combine(p2.combine(p3))
assert left.value.identity == right.value.identity
assert left.value.get_labels() == right.value.get_labels()
@pytest.mark.skip(reason="Strategy parameter not yet implemented for generic Pattern.combine()")
def test_subject_combination_invalid_strategy():
pass