@@ -11,6 +11,9 @@
1111/* child %txt /tests/type-full-overlap/child/txt
1212/* generic %txt /tests/type-full-overlap/generic/txt
1313/* duplicate-generic %txt /tests/type-full-overlap/duplicate-generic/txt
14+/* atoms %txt /tests/type-full-overlap/atoms/txt
15+/* flag %txt /tests/type-full-overlap/flag/txt
16+/* nested %txt /tests/type-full-overlap/nested/txt
1417/* expected %txt /tests/type-full-overlap/expected-basic/txt
1518|%
1619+$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
@@ -46,8 +49,9 @@
4649 |= [file=path source=@t modules=jbundle:jibb]
4750 ^- detailed-result
4851 (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
52+:: The first two cases overlap, written on consecutive lines from .line.
4953++ expected-overlap
50− |= [file=path source=@t name=term]
54+ |= [file=path source=@t name=term line=@ud]
5155 ^- ?
5256 =/ expected=(unit upair:jibb) (source-pair file source name)
5357 ?~ expected |
@@ -61,9 +65,9 @@
6165 =(name.ev name)
6266 =(cases.ev u.expected)
6367 =(%overlap relation.cases.ev)
64− =(3 line.beg.first.cases.ev)
68+ =(line line.beg.first.cases.ev)
6569 =(3 col.beg.first.cases.ev)
66− =(4 line.beg.second.cases.ev)
70+ =(+(line) line.beg.second.cases.ev)
6771 =(3 col.beg.second.cases.ev)
6872 ==
6973++ plain-failure
@@ -75,7 +79,7 @@
7579 ?: ?=(%& -.result) |
7680 &(!=(0 message.p.result) ?=(~ overlap.p.result))
7781++ run
78− |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
82+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t atoms=@t flag=@t nested=@t]
7983 ^- (list [@t ?])
8084 =/ root=path /ui/root/jibb
8185 =/ names256=(list @t) (turn (gulf 0 255) |=(n=@ud (scot %ud n)))
@@ -94,6 +98,11 @@
9498 ?: ?=(%& -.legacy) |
9599 =/ lines=wain (to-wain:format p.legacy)
96100 &((lien lines |=(line=@t =(line '/ui/root.jibb:3:3: first union case'))) (lien lines |=(line=@t =(line '/ui/root.jibb:4:3: overlapping case'))))
101+ :: A projected overlap renders the same error as a source witness.
102+ =/ legacy-atoms=jfile-result:jibb (infer-jibb-file:jibb root atoms ~ ~ ~ ~[root] ~ ~ ~ ~)
103+ =/ legacy-projected=?
104+ ?: ?=(%& -.legacy-atoms) |
105+ =((to-wain:format p.legacy-atoms) ~['module mold bad has overlapping cases' '/ui/root.jibb:2:3: first union case' ' @t' ' ^' '/ui/root.jibb:3:3: overlapping case' ' @ud' ' ^'])
97106 =/ imported=detailed-result (detailed root parent ~[[child-file child]])
98107 =/ child-pair=(unit upair:jibb) (source-pair child-file child %child-bad)
99108 =/ import-valid=?
@@ -110,9 +119,12 @@
110119 :~ ['256 generic parameters accepted by scan' (module-mold-params-valid:jibb names256 *(set @t) 256)]
111120 ['257 generic parameters exhaust scan' !(module-mold-params-valid:jibb names257 *(set @t) 256)]
112121 ['duplicate generic parameters fail scan' !(module-mold-params-valid:jibb ~['A' 'A'] *(set @t) 256)]
113− ['same head has source-bound overlap' (expected-overlap root same %bad)]
114− ['zero spelling has source-bound overlap' (expected-overlap root zero %bad)]
115− ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad)]
122+ ['same head has source-bound overlap' (expected-overlap root same %bad 3)]
123+ ['zero spelling has source-bound overlap' (expected-overlap root zero %bad 3)]
124+ ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad 3)]
125+ ['two auras have source-bound overlap' (expected-overlap root atoms %bad 2)]
126+ ['flag and yes have source-bound overlap' (expected-overlap root flag %bad 2)]
127+ ['nested equal tags have source-bound overlap' (expected-overlap root nested %bad 2)]
116128 ['duplicate generic parameters remain unstructured' (plain-failure root duplicate-generic)]
117129 ['unsupported remains unstructured' (plain-failure root unsupported)]
118130 ['later overlap exists in precedence source' (source-witness root precedence %bad)]
@@ -122,6 +134,7 @@
122134 ['distinct alias source parses and checks' &(?=(%& -.good-parsed) ?=(%& -.good-result))]
123135 ['parent itself has different positive overlap' (source-witness root parent %parent-bad)]
124136 ['legacy full-module error contains both excerpts' legacy-excerpts]
137+ ['legacy projected overlap error is exact' legacy-projected]
125138 ['import overlap retains exact child source' import-valid]
126139 ==
127140++ text
@@ -129,14 +142,14 @@
129142 ^- @t
130143 (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
131144++ output
132− |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
145+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t atoms=@t flag=@t nested=@t]
133146 ^- @t
134− =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic)
147+ =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic atoms flag nested)
135148 (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
136149++ test-full-overlap-basic
137150 ^- tang
138151 ?~ expected ~[leaf+"expected output missing"]
139− =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic))
152+ =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic) (text atoms) (text flag) (text nested))
140153 ?. =((to-wain:format (cat 3 actual '\0a')) expected)
141154 ~[leaf+"full-module overlap output differs"]
142155 ~