2"""Check recursive pattern coverage, state and arm bounds under eval."""
3from pathlib import Path
10root = Path(__file__).resolve().parent.parent
11parser = argparse.ArgumentParser(description=__doc__)
12parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13parser.add_argument('--update', action='store_true')
14args = parser.parse_args()
15fixture = root / 'tests/type-generic-pattern'
16shared = root / 'tests/type-generic-construction'
17source = (root / 'tests/lib/jibb-generic-pattern.hoon').read_text()
18source = source[source.index('\n|%\n') + 1:]
19reused = ['tree', 'alias', 'tree-no-event']
20names = ['client', 'no-event', 'values', 'poly-values', 'owner', 'owner-bad']
21cords = [item for name in reused
22 for item in ('--cord', f'{name}-text={shared / (name + ".txt")}')]
23cords += [item for name in names
24 for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
25cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
26 '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
27bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n'
28 for name in reused + names)
29program = ("=/ jibb .\n=/ real-prelude=@t prelude\n"
30 "=/ real-internal=@t internal\n" + bindings +
31 "=/ expected=wain ~\n=/ suite\n" + source +
32 "\n^- @t\n(pattern-output:suite prelude internal " +
33 ' '.join(name + '-text' for name in reused + names) + ")\n")
34with tempfile.TemporaryDirectory(prefix='jibb-generic-pattern-') as tmp:
35 path = Path(tmp) / 'test.hoon'
36 path.write_text(program)
37 result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
38 '-f', str(path), *cords], stdout=subprocess.PIPE)
40 sys.exit(result.returncode)
41expected_path = fixture / 'expected.txt'
43 expected_path.write_bytes(result.stdout)
45 expected = expected_path.read_bytes()
46 if result.stdout != expected:
47 sys.stderr.writelines(difflib.unified_diff(
48 expected.decode().splitlines(keepends=True),
49 result.stdout.decode().splitlines(keepends=True),
50 fromfile='expected.txt', tofile='actual'))
52print('source-backed generic pattern guards passed')
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list