#!/usr/bin/env python3 """deterministic safe/invalid neighbors for ownership and projection analysis.""" import argparse import random import subprocess parser = argparse.ArgumentParser() parser.add_argument('host') parser.add_argument('--cases', type=int, default=32) args = parser.parse_args() rng = random.Random(0xB0770) for i in range(args.cases): n = rng.randrange(1, 12); at = rng.randrange(n) prefix = f'include rt; int* saved; fn main() {{ let p = rt.new(int, {n}); p[{at}] = {i}; ' variants = [ (f'return p[{at}]; }}', True), (f'saved = p; return saved[{at}]; }}', True), (f'saved = p; return p[{at}]; }}', False), (f'rt.free(p); return p[{at}]; }}', False), (f'int* q = p; rt.free(p); return q[{at}]; }}', False), ] for tail, accepted in variants: src = prefix + tail r = subprocess.run([args.host], input=src.encode(), capture_output=True, timeout=5) text = (r.stdout + r.stderr).decode(errors='replace') error = 'zc:' in text or r.returncode != 0 assert r.returncode >= 0 and (not error) == accepted, (i, accepted, src, text) print(f'ok {args.cases * 5} generated ownership accept/reject neighbors (seed 0xB0770)')