#name: dont convert incomplete errors to non-incomplete
#evalFull
-- in.cue --
import "strings"

n1: {min: <max, max: >min}
n2: -num
n3: +num
n4: num + num
n5: num - num
n6: num * num
n7: num / num

b1: !is

s1: "\(str)"
s2: strings.ContainsAny("dd")
s3: strings.ContainsAny(str, "dd")

str: string
num: <4
is:  bool
-- out/def --
import "strings"

n1: {
	min: <max
	max: >min
}
n2:  -num
num: <4
n3:  +num
n4:  num + num
n5:  num - num
n6:  num * num
n7:  num / num
b1:  !is
is:  bool
s1:  "\(str)"
str: string
s2:  strings.ContainsAny("dd")
s3:  strings.ContainsAny(str, "dd")
-- out/legacy-debug --
<0>{n1: <1>{min: <<2>.max, max: ><2>.min}, n2: -<3>.num, num: <4, n3: +<3>.num, n4: (<3>.num + <3>.num), n5: (<3>.num - <3>.num), n6: (<3>.num * <3>.num), n7: (<3>.num / <3>.num), b1: !<3>.is, is: bool, s1: ""+<3>.str+"", str: string, s2: strings.ContainsAny ("dd"), s3: <4>.ContainsAny (<3>.str,"dd")}
-- out/evalalpha/stats --
Leaks:  17
Freed:  0
Reused: 0
Allocs: 17
Retain: 0

Unifications: 17
Conjuncts:    17
Disjuncts:    0
-- diff/-out/evalalpha/stats<==>+out/eval/stats --
diff old new
--- old
+++ new
@@ -1,9 +1,9 @@
-Leaks:  0
-Freed:  17
-Reused: 12
-Allocs: 5
-Retain: 75
+Leaks:  17
+Freed:  0
+Reused: 0
+Allocs: 17
+Retain: 0
 
 Unifications: 17
-Conjuncts:    71
-Disjuncts:    82
+Conjuncts:    17
+Disjuncts:    0
-- out/eval/stats --
Leaks:  0
Freed:  17
Reused: 12
Allocs: 5
Retain: 75

Unifications: 17
Conjuncts:    71
Disjuncts:    82
-- out/evalalpha --
(struct){
  n1: (struct){
    min: (_|_){
      // [cycle] n1.min: cycle with field: max:
      //     ./in.cue:3:12
      // n1.max: cycle with field: min:
      //     ./in.cue:3:23
    }
    max: (_|_){
      // [cycle] n1.min: cycle with field: max:
      //     ./in.cue:3:12
      // n1.max: cycle with field: min:
      //     ./in.cue:3:23
    }
  }
  n2: (_|_){
    // [incomplete] n2: operand num of '-' not concrete (was number):
    //     ./in.cue:4:6
  }
  n3: (_|_){
    // [incomplete] n3: operand num of '+' not concrete (was number):
    //     ./in.cue:5:6
  }
  n4: (_|_){
    // [incomplete] n4: non-concrete value <4 in operand to +:
    //     ./in.cue:6:5
    //     ./in.cue:18:6
  }
  n5: (_|_){
    // [incomplete] n5: non-concrete value <4 in operand to -:
    //     ./in.cue:7:5
    //     ./in.cue:18:6
  }
  n6: (_|_){
    // [incomplete] n6: non-concrete value <4 in operand to *:
    //     ./in.cue:8:5
    //     ./in.cue:18:6
  }
  n7: (_|_){
    // [incomplete] n7: non-concrete value <4 in operand to /:
    //     ./in.cue:9:5
    //     ./in.cue:18:6
  }
  b1: (_|_){
    // [incomplete] b1: operand is of '!' not concrete (was bool):
    //     ./in.cue:11:6
  }
  s1: (_|_){
    // [incomplete] s1: invalid interpolation: non-concrete value string (type string):
    //     ./in.cue:13:5
    //     ./in.cue:17:6
  }
  s2: (string){ strings.ContainsAny("dd") }
  s3: (_|_){
    // [incomplete] s3: error in call to strings.ContainsAny: non-concrete value string:
    //     ./in.cue:15:5
    //     ./in.cue:17:6
  }
  str: (string){ string }
  num: (number){ <4 }
  is: (bool){ bool }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -1,12 +1,16 @@
 (struct){
   n1: (struct){
     min: (_|_){
-      // [cycle] cycle error
+      // [cycle] n1.min: cycle with field: max:
+      //     ./in.cue:3:12
+      // n1.max: cycle with field: min:
+      //     ./in.cue:3:23
     }
     max: (_|_){
-      // [cycle] cycle error
-      // cycle error:
-      //     ./in.cue:3:22
+      // [cycle] n1.min: cycle with field: max:
+      //     ./in.cue:3:12
+      // n1.max: cycle with field: min:
+      //     ./in.cue:3:23
     }
   }
   n2: (_|_){
-- out/eval --
(struct){
  n1: (struct){
    min: (_|_){
      // [cycle] cycle error
    }
    max: (_|_){
      // [cycle] cycle error
      // cycle error:
      //     ./in.cue:3:22
    }
  }
  n2: (_|_){
    // [incomplete] n2: operand num of '-' not concrete (was number):
    //     ./in.cue:4:6
  }
  n3: (_|_){
    // [incomplete] n3: operand num of '+' not concrete (was number):
    //     ./in.cue:5:6
  }
  n4: (_|_){
    // [incomplete] n4: non-concrete value <4 in operand to +:
    //     ./in.cue:6:5
    //     ./in.cue:18:6
  }
  n5: (_|_){
    // [incomplete] n5: non-concrete value <4 in operand to -:
    //     ./in.cue:7:5
    //     ./in.cue:18:6
  }
  n6: (_|_){
    // [incomplete] n6: non-concrete value <4 in operand to *:
    //     ./in.cue:8:5
    //     ./in.cue:18:6
  }
  n7: (_|_){
    // [incomplete] n7: non-concrete value <4 in operand to /:
    //     ./in.cue:9:5
    //     ./in.cue:18:6
  }
  b1: (_|_){
    // [incomplete] b1: operand is of '!' not concrete (was bool):
    //     ./in.cue:11:6
  }
  s1: (_|_){
    // [incomplete] s1: invalid interpolation: non-concrete value string (type string):
    //     ./in.cue:13:5
    //     ./in.cue:17:6
  }
  s2: (string){ strings.ContainsAny("dd") }
  s3: (_|_){
    // [incomplete] s3: error in call to strings.ContainsAny: non-concrete value string:
    //     ./in.cue:15:5
    //     ./in.cue:17:6
  }
  str: (string){ string }
  num: (number){ <4 }
  is: (bool){ bool }
}
-- out/compile --
--- in.cue
{
  n1: {
    min: <〈0;max〉
    max: >〈0;min〉
  }
  n2: -〈0;num〉
  n3: +〈0;num〉
  n4: (〈0;num〉 + 〈0;num〉)
  n5: (〈0;num〉 - 〈0;num〉)
  n6: (〈0;num〉 * 〈0;num〉)
  n7: (〈0;num〉 / 〈0;num〉)
  b1: !〈0;is〉
  s1: "\(〈0;str〉)"
  s2: 〈import;strings〉.ContainsAny("dd")
  s3: 〈import;strings〉.ContainsAny(〈0;str〉, "dd")
  str: string
  num: <4
  is: bool
}
