# `!=` applied to a disjunction before structural cycle is concrete:
# CUE incorrectly reports an empty disjunction error instead of handling
# the abstract `!=` constraint between fields sharing a disjunction type.
# https://cuelang.org/issue/241
-- in.cue --
#Value: 0 | 1

foo: #Value
foo: !=bar
bar: #Value
bar: !=foo

#Value: 0 | 1

Foo: #Value
Foo: !=Bar
Bar: #Value
Bar: !=Foo
Bar: 0

cell: a: 0 | 1
cell: a: !=cell.b
cell: b: 0 | 1
cell: b: !=cell.a
cell: a: 0
cell: b: _

a: cell.a
b: cell.b
-- out/compile --
--- in.cue
{
  #Value: (0|1)
  foo: 〈0;#Value〉
  foo: !=〈0;bar〉
  bar: 〈0;#Value〉
  bar: !=〈0;foo〉
  #Value: (0|1)
  Foo: 〈0;#Value〉
  Foo: !=〈0;Bar〉
  Bar: 〈0;#Value〉
  Bar: !=〈0;Foo〉
  Bar: 0
  cell: {
    a: (0|1)
  }
  cell: {
    a: !=〈1;cell〉.b
  }
  cell: {
    b: (0|1)
  }
  cell: {
    b: !=〈1;cell〉.a
  }
  cell: {
    a: 0
  }
  cell: {
    b: _
  }
  a: 〈0;cell〉.a
  b: 〈0;cell〉.b
}
