Example #1
0
def _collect(continuations, nonlinear):
    PROFILE_COUNTERS[_collect, '...'] += 1

    # Collect unique samples.
    samples = set()
    for continuation in continuations:
        sample = _close(continuation, nonlinear)
        if sample is TOP:
            return TOP
        samples.add(sample)
    if not samples:
        return BOT

    # Filter out dominated samples.
    # FIXME If x [= y and y [= x, this filters out both.
    filtered_samples = []
    for sample in samples:
        if not any(oracle.try_decide_less(sample, other)
                   for other in samples
                   if other is not sample):
            filtered_samples.append(sample)
    filtered_samples.sort(key=lambda code: (complexity(code), code))

    # Construct a join term.
    result = filtered_samples[0]
    for sample in filtered_samples[1:]:
        result = JOIN(result, sample)
    return result
Example #2
0
def test_try_decide_less(x, y, less_xy, less_yx):
    assert oracle.try_decide_less(x, y) == less_xy
    assert oracle.try_decide_less(y, x) == less_yx