def test_transducer_union_mimics_set_union(items1, items2):
    assume(items1)
    assume(items2)
    wrapper1 = PyniniWrapper.fromPairs(items1)
    wrapper2 = PyniniWrapper.fromPairs(items2)
    result = set(wrapper1.union(wrapper2).pathIterator(side=None))
    manualResult = set(items1) | set(items2)
    assert result == manualResult
def test_acceptor_subtraction_mimics_set_subtraction(items1, items2):
    assume(items1)
    assume(items2)
    wrapper1 = PyniniWrapper.fromPairs(items1)
    wrapper2 = PyniniWrapper.fromPairs(items2)
    result = set(wrapper1.subtract(wrapper2).pathIterator(side=None))
    manualResult = set(items1) - set(items2)
    assert result == manualResult
def test_concatenation(items1, items2):
    assume(items1)
    assume(items2)
    wrapper1 = PyniniWrapper.fromPairs(items1)
    wrapper2 = PyniniWrapper.fromPairs(items2)
    result = wrapper1.concatenate(wrapper2)
    paths = result.pathIterator(side=None)
    manualResult = []
    for i1 in items1:
        for i2 in items2:
            manualResult += [(i1[0] + i2[0], i1[1] + i2[1])]
    assert set(manualResult) == set(paths)
def test_pathIterator_sidedness(items):
    keys = [item[0] for item in items]
    values = [item[1] for item in items]
    wrapper = PyniniWrapper.fromPairs(items)
    assert set(keys) == set(wrapper.pathIterator(side="top"))
    assert set(values) == set(wrapper.pathIterator(side="bottom"))
    assert set(items) == set(wrapper.pathIterator(side=None))
def test_noninput_items_are_not_accepted(items, redHerrings):
    assume(items)
    tops, bottoms = zip(*items)
    wrapper = PyniniWrapper.fromPairs(items)
    for rh in redHerrings:
        if rh[0] in tops and rh[1] in bottoms:
            reject()
        if rh[0] not in tops:
            assert not wrapper.accepts(rh[0], side="top")
        if rh[1] not in bottoms:
            assert not wrapper.accepts(rh[1], side="bottom")
def test_projection(items):
    assume(items)
    tops, bottoms = zip(*items)
    wrapper = PyniniWrapper.fromPairs(items)
    topwrapper = wrapper.project(side="top")
    bottomwrapper = wrapper.project(side="bottom")
    for i in tops:
        assert topwrapper.accepts(i)
        if i not in bottoms:
            assert not bottomwrapper.accepts(i)
    for i in bottoms:
        assert bottomwrapper.accepts(i)
        if i not in bottoms:
            assert not bottomwrapper.accepts(i)
def test_star(items, n):
    assume(items)
    wrapper = PyniniWrapper.fromPairs(items).star()
    for i in items:
        assert wrapper.accepts(i[0] * n, side="top")
        assert wrapper.accepts(i[1] * n, side="bottom")
def test_input_items_are_accepted(items):
    assume(items)
    wrapper = PyniniWrapper.fromPairs(items)
    for item in items:
        assert wrapper.accepts(item[0], side="top")
        assert wrapper.accepts(item[1], side="bottom")
def test_item_order_is_unimportant(items):
    assume(items)
    wrapper1 = PyniniWrapper.fromPairs(items)
    shuffle(items)
    wrapper2 = PyniniWrapper.fromPairs(items)
    assert wrapper1 == wrapper2
def test_wrapper_from_pairs(items):
    assume(items)
    wrapper = PyniniWrapper.fromPairs(items)
    assert wrapper
def transducers(draw):
    pairs = draw(transducertext())
    transducer = PyniniWrapper.fromPairs(pairs)
    return transducer