2"""Check indexed recursive source identity, aliases and cache 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-recursion'
16source = (root / 'tests/lib/jibb-generic-recursion.hoon').read_text()
17source = source[source.index('\n|%\n') + 1:]
18names = ['tree', 'changed', 'alias', 'client', 'bad-mold', 'bad-constructor',
19 'bad-parameter', 'local-shadow', 'local-distinct', 'local-only',
20 'list-shadow', 'chain', 'bad-match']
21files = ['tree', 'tree-changed', 'alias', 'client', 'bad-mold', 'bad-constructor',
22 'bad-parameter', 'local-shadow', 'local-distinct', 'local-only',
23 'list-shadow', 'chain', 'bad-match']
24cords = [item for name, file in zip(names, files)
25 for item in ('--cord', f'{name}-text={fixture / (file + ".txt")}')]
26cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
27 '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
28bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n'
30program = ("=/ jibb .\n=/ real-prelude=@t prelude\n"
31 "=/ real-internal=@t internal\n" + bindings +
32 "=/ expected=wain ~\n=/ suite\n" + source +
33 "\n^- @t\n=/ invalid=(list [label=@t src=@t])\n"
34 " :~ ['unused mold hole declined' bad-mold-text]\n"
35 " ['invalid constructor declined' bad-constructor-text]\n"
36 " ['invalid matching declined' bad-match-text]\n"
37 " ['nonuniform recursion declined' bad-parameter-text]\n"
38 " ['identical local shadow declined' local-shadow-text]\n"
39 " ['different local shadow declined' local-distinct-text]\n"
40 " ['local recursion declined' local-only-text]\n"
42 "(generic-output:suite prelude internal tree-text changed-text alias-text client-text invalid list-shadow-text chain-text)\n")
43with tempfile.TemporaryDirectory(prefix='jibb-generic-recursion-') as tmp:
44 path = Path(tmp) / 'test.hoon'
45 path.write_text(program)
46 result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
47 '-f', str(path), *cords], stdout=subprocess.PIPE)
49 sys.exit(result.returncode)
50expected_path = fixture / 'expected.txt'
52 expected_path.write_bytes(result.stdout)
54 expected = expected_path.read_bytes()
55 if result.stdout != expected:
56 sys.stderr.writelines(difflib.unified_diff(
57 expected.decode().splitlines(keepends=True),
58 result.stdout.decode().splitlines(keepends=True),
59 fromfile='expected.txt', tofile='actual'))
61print('source-backed generic recursion 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