-- in.cue --
a: _|_ == _|_                       @test(eq, true)
b: err == 1 & 2 @test(err, code=eval, contains="conflicting values", args=[2, 1], pos=[in.cue:12:6, in.cue:12:10]) // not a literal error, so not allowed
c: err == _|_   @test(eq, true)  // allowed
d: err != _|_   @test(eq, false) // allowed
e: err != 1 & 3 @test(err, code=eval, contains="conflicting values", args=[2, 1], pos=[in.cue:12:6, in.cue:12:10])
// z: err == err // TODO: should infer to be true?
f: ({a:        1} & {a: 2}) == _|_ @test(eq, true)
g: ({a:        1} & {b: 2}) == _|_ @test(eq, false)
h: _|_ == ({a: 1} & {a: 2})        @test(eq, true)
i: _|_ == ({a: 1} & {b: 2})        @test(eq, false)

err: 1 & 2 @test(err, code=eval, contains="conflicting values 2 and 1", pos=[in.cue:12:6, in.cue:12:10])
-- out/errors.txt --
[eval] err: conflicting values 2 and 1:
    ./in.cue:12:6
    ./in.cue:12:10
[eval] err: conflicting values 2 and 1:
    ./in.cue:12:6
    ./in.cue:12:10
[eval] err: conflicting values 2 and 1:
    ./in.cue:12:6
    ./in.cue:12:10
-- out/todo.txt --
Our aim is to disallow comparisons against errors and replace them with more
precise functions.
-- out/eval/stats --
Leaks:  0
Freed:  21
Reused: 16
Allocs: 5
Retain: 4

Unifications: 21
Conjuncts:    28
Disjuncts:    21
