Research source · python

check_banded_interval_independent.py

tools/research/check_banded_interval_independent.py

69 lines. Source is displayed for inspection; it is not executed by this page.

File fingerprint

SHA-256: 738f9e2a45ae2854a022430e913caed59238022f82211da9e6e84b147f7c8dee

#!/usr/bin/env python3
"""Independent adversarial semantic checks for the banded interval worker.

Exhaust every eight-leaf coverage pattern and interval, then interrupt each
phase of one boundary insertion with two additional releases. Integer and
whole-state inspections belong only to the oracle. Imported worker operations
retain the primary checker's persistent-primitive modeling scope; this script
does not establish native running time.
"""
import json

import check_banded_interval_reuse as model


def coverage_tree(bits):
    if len(bits) == 1:
        return bool(bits[0])
    middle = len(bits) // 2
    return model.join(coverage_tree(bits[:middle]), coverage_tree(bits[middle:]))


def main():
    insertions = forks = work_checks = 0
    for mask in range(256):
        old_bits = [bool((mask >> i) & 1) for i in range(8)]
        old_tree = coverage_tree(old_bits)
        for lower in range(8, 16):
            for upper in range(lower, 16):
                insertion = model.start_insert(
                    old_tree, model.units(3), model.digits(lower),
                    model.digits(upper))
                steps = 0
                while insertion.phase != 'done':
                    insertion = model.insert_step(insertion)
                    steps += 1
                assert steps <= 16 * 4 + 16
                expected = [covered or lower <= i + 8 <= upper
                            for i, covered in enumerate(old_bits)]
                assert model.tree_bits(insertion.result, 3) == expected
                assert model.tree_bits(old_tree, 3) == old_bits
                insertions += 1

    worker = model.release(model.Worker(), model.digits(11), model.digits(14))
    while worker.suffix:
        if worker.suffix[0].insertion is not None:
            for lower, upper in [(8, 8), (15, 15), (9, 12), (1, 2), (32, 45)]:
                fork = model.release(worker, model.digits(lower), model.digits(upper))
                fork = model.release(fork, model.digits(10), model.digits(10))
                intervals = [(11, 14), (lower, upper), (10, 10)]
                expected = [any(a <= n <= b for a, b in intervals)
                            for n in range(1, 65)]
                assert model.query(fork, 64) == expected
                for cutoff in range(1, 8):
                    _, before = model.drain_to(worker, cutoff)
                    _, after = model.drain_to(fork, cutoff)
                    assert after <= before + 512 * cutoff
                    work_checks += 1
                forks += 1
        worker = model.service(worker)

    print(json.dumps({
        'arbitrary_coverage_insertions': insertions,
        'same_band_and_nested_forks': forks,
        'residual_work_checks': work_checks,
    }))


if __name__ == '__main__':
    main()