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