cuelang.org/go@v0.13.0/cue/testdata/builtins/validators.txtar (about)

     1  -- in.cue --
     2  import (
     3  	"encoding/json"
     4  	"list"
     5  	"struct"
     6  )
     7  
     8  // non-monotonic builtins must fail with an "incomplete" error if there
     9  // is a possibility the constraint can get resolved by becoming more specific.
    10  incompleteError1: {
    11  	MyType: {
    12  		kv: struct.MinFields(1)
    13  	}
    14  
    15  	foo: MyType & {
    16  		kv: joel: "testing"
    17  	}
    18  }
    19  
    20  incompleteError2: {
    21  	MyType: {
    22  		kv: [string]: string
    23  		kv: struct.MinFields(1)
    24  	}
    25  
    26  	foo: MyType & {
    27  		kv: joel: "testing"
    28  	}
    29  }
    30  
    31  incompleteError3: {
    32  	t: string
    33  	t: json.Validate(string)
    34  }
    35  
    36  uniqueConstrains1: {
    37  	t: string
    38  	t: json.Validate(string)
    39  	t: json.Validate(string)
    40  }
    41  
    42  uniqueConstrains2: {
    43  	t: struct.MaxFields(1)
    44  	t: struct.MaxFields(1)
    45  }
    46  
    47  violation: {
    48  	#MyType: {
    49  		kv: [string]: string
    50  		kv: struct.MinFields(1)
    51  	}
    52  
    53  	foo: #MyType & {
    54  		kv: joel: "testing"
    55  		kv: tony: "testing"
    56  	}
    57  }
    58  
    59  conjuncts: {
    60  	kv: struct.MinFields(1)
    61  	kv: struct.MaxFields(3)
    62  }
    63  
    64  // TODO: stripe off conflicting pairs
    65  // conflicting: {
    66  //     kv: struct.MinFields(3)
    67  //     kv: struct.MaxFields(1)
    68  // }
    69  
    70  // Builtins with bool return that can be used as validator.
    71  
    72  bareBuiltin: {
    73  	a: json.Valid
    74  	a: json.Valid
    75  }
    76  
    77  bareBuiltinCheck: {
    78  	a: json.Valid
    79  	a: "3"
    80  }
    81  
    82  builtinValidator: {
    83  	a: json.Valid()
    84  	a: json.Valid()
    85  }
    86  
    87  builtinValidatorCheck: {
    88  	a: json.Valid()
    89  	a: "3"
    90  }
    91  
    92  callOfCallToValidator: {
    93  	a: json.Valid
    94  	b: a()
    95  	e: b() // not allowed
    96  	e: "5"
    97  }
    98  
    99  validatorAsFunction: {
   100  	a: json.Valid
   101  	b: a("3")
   102  	c: json.Valid("3")
   103  }
   104  
   105  issue2098: ok1: {
   106  	_a: [1, ...]
   107  	_a: list.MinItems(1)
   108  	_a[0]
   109  }
   110  
   111  issue2098: incomplete1: {
   112  	_a: [...]
   113  	_a: list.MinItems(1)
   114  	_a[0]
   115  }
   116  
   117  -- issue3418.cue --
   118  issue3418: t1: "foo" & matchN(1, [1&2]) & matchN(1, [_])
   119  issue3418: t2: "foo" & matchN(1, [_]) & matchN(1, [1&2])
   120  issue3418: t3: {
   121  	x: "foo"
   122  	x: matchN(1, [_])
   123  	x: matchN(1, [1&2])
   124  }
   125  issue3418: t4: {
   126  	x: "foo"
   127  	x: matchN(1, [1&2])
   128  	x: matchN(1, [_])
   129  }
   130  
   131  -- issue3474.cue --
   132  import "struct"
   133  
   134  issue3474: structValidator: ok: {
   135  	// Passes only after the comprehension is evaluated.
   136  	A: struct.MinFields(1)
   137  	A: {
   138  		if true {B: true}
   139  	}
   140  }
   141  issue3474: structValidator: failAfter: {
   142  	// Passes only before the comprehension is evaluated.
   143  	A: struct.MaxFields(1)
   144  	A: {
   145  		C: true
   146  		if true {B: true}
   147  	}
   148  }
   149  issue3474: structValidator: incomplete: {
   150  	// Passes neither before nor after the comprehension is evaluated.
   151  	A: struct.MinFields(1)
   152  	A: {
   153  		if true {}
   154  	}
   155  }
   156  issue3474: structValidator: failClosed: {
   157  	// Passes neither before nor after the comprehension is evaluated.
   158  	#A: struct.MinFields(1)
   159  	#A: {
   160  		if true {}
   161  	}
   162  }
   163  
   164  
   165  issue3474: topValidator: ok: {
   166  	A: matchN(1, [>10])
   167  	A: {
   168  		if true {100}
   169  	}
   170  }
   171  issue3474: topValidator: fail: {
   172  	A: matchN(1, [>10])
   173  	A: {
   174  		if true {1}
   175  	}
   176  }
   177  issue3474: topValidator: incomplete: {
   178  	A: matchN(1, [>10])
   179  	A: {
   180  		if true {int}
   181  	}
   182  }
   183  issue3474: topValidator: failType: {
   184  	A: matchN(1, [>10])
   185  	A: {
   186  		if true {C: 1}
   187  	}
   188  }
   189  -- validator_is_top.cue --
   190  issue3639: {
   191  	a: {#X} & #X
   192  	a: b: 1
   193  	#X: matchN(1, [{b: int}])
   194  }
   195  issue3661: {
   196  	#X: matchN(1, [{ b!: int }])
   197  	a: b: 1
   198  	a: #X
   199  	["a"]: #X
   200  }
   201  issue3678: {
   202  	#X: matchN(1, [{
   203  		a!: string
   204  	}, {
   205  		c!: string
   206  	}])
   207  
   208  	x: c: "c"
   209  	
   210  	y: #X
   211  	y: x
   212  	x: #X
   213  }
   214  -- out/eval/stats --
   215  Leaks:  4
   216  Freed:  177
   217  Reused: 170
   218  Allocs: 11
   219  Retain: 23
   220  
   221  Unifications: 181
   222  Conjuncts:    327
   223  Disjuncts:    202
   224  -- out/evalalpha --
   225  Errors:
   226  issue3474.topValidator.failType.A: conflicting values >10 and {C:1} (mismatched types number and struct):
   227      ./issue3474.cue:53:5
   228      ./issue3474.cue:53:16
   229      ./issue3474.cue:54:5
   230  callOfCallToValidator.e: cannot call previously called validator b:
   231      ./in.cue:94:5
   232  issue3418.t1: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   233      ./issue3418.cue:1:24
   234      ./issue3418.cue:1:16
   235      ./issue3418.cue:1:31
   236      ./issue3418.cue:1:35
   237      ./issue3418.cue:1:37
   238  issue3418.t2: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   239      ./issue3418.cue:2:41
   240      ./issue3418.cue:2:16
   241      ./issue3418.cue:2:48
   242      ./issue3418.cue:2:52
   243      ./issue3418.cue:2:54
   244  issue3418.t3.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   245      ./issue3418.cue:6:5
   246      ./issue3418.cue:4:5
   247      ./issue3418.cue:5:5
   248      ./issue3418.cue:6:12
   249      ./issue3418.cue:6:16
   250      ./issue3418.cue:6:18
   251  issue3418.t4.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   252      ./issue3418.cue:10:5
   253      ./issue3418.cue:9:5
   254      ./issue3418.cue:10:12
   255      ./issue3418.cue:10:16
   256      ./issue3418.cue:10:18
   257      ./issue3418.cue:11:5
   258  issue3474.structValidator.failAfter.A: invalid value {C:true,B:true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   259      ./issue3474.cue:12:5
   260      ./issue3474.cue:12:22
   261      ./issue3474.cue:13:5
   262  issue3474.structValidator.failClosed.#A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   263      ./issue3474.cue:27:6
   264      ./issue3474.cue:27:23
   265      ./issue3474.cue:28:6
   266  issue3474.topValidator.fail.A: invalid value 1 (does not satisfy matchN): 0 matched, expected 1:
   267      ./issue3474.cue:41:5
   268      ./issue3474.cue:41:12
   269      ./issue3474.cue:42:5
   270      ./issue3474.cue:43:12
   271  issue3474.topValidator.fail.A: invalid value 1 (out of bound >10):
   272      ./issue3474.cue:41:16
   273      ./issue3474.cue:43:12
   274  issue3474.topValidator.failType.A: invalid value {C:1} (does not satisfy matchN): 0 matched, expected 1:
   275      ./issue3474.cue:53:5
   276      ./issue3474.cue:53:12
   277      ./issue3474.cue:54:5
   278  issue3474.topValidator.failType.A: invalid operands {C:1} and 10 to '>' (type _|_ and int):
   279      ./issue3474.cue:53:16
   280      ./issue3474.cue:53:5
   281      ./issue3474.cue:53:17
   282      ./issue3474.cue:54:5
   283  
   284  Result:
   285  (_|_){
   286    // [eval]
   287    incompleteError1: (struct){
   288      MyType: (struct){
   289        kv: (struct){ struct.MinFields(1) }
   290      }
   291      foo: (struct){
   292        kv: (struct){
   293          joel: (string){ "testing" }
   294        }
   295      }
   296    }
   297    incompleteError2: (struct){
   298      MyType: (struct){
   299        kv: (_|_){
   300          // [incomplete] incompleteError2.MyType.kv: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   301          //     ./in.cue:22:7
   302          //     ./in.cue:21:7
   303          //     ./in.cue:22:24
   304        }
   305      }
   306      foo: (struct){
   307        kv: (struct){
   308          joel: (string){ "testing" }
   309        }
   310      }
   311    }
   312    incompleteError3: (struct){
   313      t: (string){ &("encoding/json".Validate(string), string) }
   314    }
   315    uniqueConstrains1: (struct){
   316      t: (string){ &("encoding/json".Validate(string), string) }
   317    }
   318    uniqueConstrains2: (struct){
   319      t: (struct){ struct.MaxFields(1) }
   320    }
   321    violation: (struct){
   322      #MyType: (#struct){
   323        kv: (_|_){
   324          // [incomplete] violation.#MyType.kv: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   325          //     ./in.cue:49:7
   326          //     ./in.cue:48:7
   327          //     ./in.cue:49:24
   328        }
   329      }
   330      foo: (#struct){
   331        kv: (#struct){
   332          joel: (string){ "testing" }
   333          tony: (string){ "testing" }
   334        }
   335      }
   336    }
   337    conjuncts: (struct){
   338      kv: (struct){ &(struct.MinFields(1), struct.MaxFields(3)) }
   339    }
   340    bareBuiltin: (struct){
   341      a: ((string|bytes)){ "encoding/json".Valid() }
   342    }
   343    bareBuiltinCheck: (struct){
   344      a: (string){ "3" }
   345    }
   346    builtinValidator: (struct){
   347      a: ((string|bytes)){ "encoding/json".Valid() }
   348    }
   349    builtinValidatorCheck: (struct){
   350      a: (string){ "3" }
   351    }
   352    callOfCallToValidator: (_|_){
   353      // [eval]
   354      a: ((string|bytes)){ "encoding/json".Valid() }
   355      b: ((string|bytes)){ "encoding/json".Valid() }
   356      e: (_|_){
   357        // [eval] callOfCallToValidator.e: cannot call previously called validator b:
   358        //     ./in.cue:94:5
   359      }
   360    }
   361    validatorAsFunction: (struct){
   362      a: ((string|bytes)){ "encoding/json".Valid() }
   363      b: (bool){ true }
   364      c: (bool){ true }
   365    }
   366    issue2098: (struct){
   367      ok1: (int){
   368        1
   369        _a: (list){
   370          0: (int){ 1 }
   371        }
   372      }
   373      incomplete1: (_|_){
   374        // [incomplete] issue2098.incomplete1: index out of range [0] with length 1:
   375        //     ./in.cue:113:5
   376        _a: (_|_){
   377          // [incomplete] issue2098.incomplete1._a: invalid value [] (does not satisfy list.MinItems(1)): len(list) < MinItems(1) (0 < 1):
   378          //     ./in.cue:112:6
   379          //     ./in.cue:111:6
   380          //     ./in.cue:112:20
   381        }
   382      }
   383    }
   384    issue3418: (_|_){
   385      // [eval]
   386      t1: (_|_){
   387        // [eval] issue3418.t1: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   388        //     ./issue3418.cue:1:24
   389        //     ./issue3418.cue:1:16
   390        //     ./issue3418.cue:1:31
   391        //     ./issue3418.cue:1:35
   392        //     ./issue3418.cue:1:37
   393      }
   394      t2: (_|_){
   395        // [eval] issue3418.t2: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   396        //     ./issue3418.cue:2:41
   397        //     ./issue3418.cue:2:16
   398        //     ./issue3418.cue:2:48
   399        //     ./issue3418.cue:2:52
   400        //     ./issue3418.cue:2:54
   401      }
   402      t3: (_|_){
   403        // [eval]
   404        x: (_|_){
   405          // [eval] issue3418.t3.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   406          //     ./issue3418.cue:6:5
   407          //     ./issue3418.cue:4:5
   408          //     ./issue3418.cue:5:5
   409          //     ./issue3418.cue:6:12
   410          //     ./issue3418.cue:6:16
   411          //     ./issue3418.cue:6:18
   412        }
   413      }
   414      t4: (_|_){
   415        // [eval]
   416        x: (_|_){
   417          // [eval] issue3418.t4.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   418          //     ./issue3418.cue:10:5
   419          //     ./issue3418.cue:9:5
   420          //     ./issue3418.cue:10:12
   421          //     ./issue3418.cue:10:16
   422          //     ./issue3418.cue:10:18
   423          //     ./issue3418.cue:11:5
   424        }
   425      }
   426    }
   427    issue3474: (_|_){
   428      // [eval]
   429      structValidator: (_|_){
   430        // [eval]
   431        ok: (struct){
   432          A: (struct){
   433            B: (bool){ true }
   434          }
   435        }
   436        failAfter: (_|_){
   437          // [eval]
   438          A: (_|_){
   439            // [eval] issue3474.structValidator.failAfter.A: invalid value {C:true,B:true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   440            //     ./issue3474.cue:12:5
   441            //     ./issue3474.cue:12:22
   442            //     ./issue3474.cue:13:5
   443            C: (bool){ true }
   444            B: (bool){ true }
   445          }
   446        }
   447        incomplete: (struct){
   448          A: (_|_){
   449            // [incomplete] issue3474.structValidator.incomplete.A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   450            //     ./issue3474.cue:20:5
   451            //     ./issue3474.cue:20:22
   452            //     ./issue3474.cue:21:5
   453          }
   454        }
   455        failClosed: (_|_){
   456          // [eval]
   457          #A: (_|_){
   458            // [eval] issue3474.structValidator.failClosed.#A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   459            //     ./issue3474.cue:27:6
   460            //     ./issue3474.cue:27:23
   461            //     ./issue3474.cue:28:6
   462          }
   463        }
   464      }
   465      topValidator: (_|_){
   466        // [eval]
   467        ok: (struct){
   468          A: (int){ 100 }
   469        }
   470        fail: (_|_){
   471          // [eval]
   472          A: (_|_){
   473            // [eval] issue3474.topValidator.fail.A: invalid value 1 (does not satisfy matchN): 0 matched, expected 1:
   474            //     ./issue3474.cue:41:5
   475            //     ./issue3474.cue:41:12
   476            //     ./issue3474.cue:42:5
   477            //     ./issue3474.cue:43:12
   478            // issue3474.topValidator.fail.A: invalid value 1 (out of bound >10):
   479            //     ./issue3474.cue:41:16
   480            //     ./issue3474.cue:43:12
   481          }
   482        }
   483        incomplete: (struct){
   484          A: (int){ &(matchN(1, (#list){
   485              0: (_|_){// >10
   486              }
   487            }), int) }
   488        }
   489        failType: (_|_){
   490          // [eval]
   491          A: (_|_){
   492            // [eval] issue3474.topValidator.failType.A: conflicting values >10 and {C:1} (mismatched types number and struct):
   493            //     ./issue3474.cue:53:5
   494            //     ./issue3474.cue:53:16
   495            //     ./issue3474.cue:54:5
   496            // issue3474.topValidator.failType.A: invalid value {C:1} (does not satisfy matchN): 0 matched, expected 1:
   497            //     ./issue3474.cue:53:5
   498            //     ./issue3474.cue:53:12
   499            //     ./issue3474.cue:54:5
   500            // issue3474.topValidator.failType.A: invalid operands {C:1} and 10 to '>' (type _|_ and int):
   501            //     ./issue3474.cue:53:16
   502            //     ./issue3474.cue:53:5
   503            //     ./issue3474.cue:53:17
   504            //     ./issue3474.cue:54:5
   505            C: (int){ 1 }
   506          }
   507        }
   508      }
   509    }
   510    issue3639: (struct){
   511      a: (#struct){
   512        b: (int){ 1 }
   513      }
   514      #X: (_){ matchN(1, (#list){
   515          0: (_|_){// {
   516            //   b: int
   517            // }
   518          }
   519        }) }
   520    }
   521    issue3661: (struct){
   522      #X: (_){ matchN(1, (#list){
   523          0: (_|_){// {
   524            //   b!: int
   525            // }
   526          }
   527        }) }
   528      a: (#struct){
   529        b: (int){ 1 }
   530      }
   531    }
   532    issue3678: (struct){
   533      #X: (_){ matchN(1, (#list){
   534          0: (_|_){// {
   535            //   a!: string
   536            // }
   537          }
   538          1: (_|_){// {
   539            //   c!: string
   540            // }
   541          }
   542        }) }
   543      x: (#struct){
   544        c: (string){ "c" }
   545      }
   546      y: (#struct){
   547        c: (string){ "c" }
   548      }
   549    }
   550  }
   551  -- diff/-out/evalalpha<==>+out/eval --
   552  diff old new
   553  --- old
   554  +++ new
   555  @@ -31,7 +31,7 @@
   556       ./issue3418.cue:10:16
   557       ./issue3418.cue:10:18
   558       ./issue3418.cue:11:5
   559  -issue3474.structValidator.failAfter.A: invalid value {C:true,B*:if true true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   560  +issue3474.structValidator.failAfter.A: invalid value {C:true,B:true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   561       ./issue3474.cue:12:5
   562       ./issue3474.cue:12:22
   563       ./issue3474.cue:13:5
   564  @@ -51,6 +51,11 @@
   565       ./issue3474.cue:53:5
   566       ./issue3474.cue:53:12
   567       ./issue3474.cue:54:5
   568  +issue3474.topValidator.failType.A: invalid operands {C:1} and 10 to '>' (type _|_ and int):
   569  +    ./issue3474.cue:53:16
   570  +    ./issue3474.cue:53:5
   571  +    ./issue3474.cue:53:17
   572  +    ./issue3474.cue:54:5
   573   
   574   Result:
   575   (_|_){
   576  @@ -142,10 +147,8 @@
   577         }
   578       }
   579       incomplete1: (_|_){
   580  -      // [incomplete] issue2098.incomplete1._a: invalid value [] (does not satisfy list.MinItems(1)): len(list) < MinItems(1) (0 < 1):
   581  -      //     ./in.cue:112:6
   582  -      //     ./in.cue:111:6
   583  -      //     ./in.cue:112:20
   584  +      // [incomplete] issue2098.incomplete1: index out of range [0] with length 1:
   585  +      //     ./in.cue:113:5
   586         _a: (_|_){
   587           // [incomplete] issue2098.incomplete1._a: invalid value [] (does not satisfy list.MinItems(1)): len(list) < MinItems(1) (0 < 1):
   588           //     ./in.cue:112:6
   589  @@ -209,7 +212,7 @@
   590         failAfter: (_|_){
   591           // [eval]
   592           A: (_|_){
   593  -          // [eval] issue3474.structValidator.failAfter.A: invalid value {C:true,B*:if true true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   594  +          // [eval] issue3474.structValidator.failAfter.A: invalid value {C:true,B:true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   595             //     ./issue3474.cue:12:5
   596             //     ./issue3474.cue:12:22
   597             //     ./issue3474.cue:13:5
   598  @@ -270,6 +273,11 @@
   599             //     ./issue3474.cue:53:5
   600             //     ./issue3474.cue:53:12
   601             //     ./issue3474.cue:54:5
   602  +          // issue3474.topValidator.failType.A: invalid operands {C:1} and 10 to '>' (type _|_ and int):
   603  +          //     ./issue3474.cue:53:16
   604  +          //     ./issue3474.cue:53:5
   605  +          //     ./issue3474.cue:53:17
   606  +          //     ./issue3474.cue:54:5
   607             C: (int){ 1 }
   608           }
   609         }
   610  @@ -276,7 +284,7 @@
   611       }
   612     }
   613     issue3639: (struct){
   614  -    a: (struct){
   615  +    a: (#struct){
   616         b: (int){ 1 }
   617       }
   618       #X: (_){ matchN(1, (#list){
   619  @@ -293,7 +301,7 @@
   620             // }
   621           }
   622         }) }
   623  -    a: (struct){
   624  +    a: (#struct){
   625         b: (int){ 1 }
   626       }
   627     }
   628  @@ -308,10 +316,10 @@
   629             // }
   630           }
   631         }) }
   632  -    x: (struct){
   633  -      c: (string){ "c" }
   634  -    }
   635  -    y: (struct){
   636  +    x: (#struct){
   637  +      c: (string){ "c" }
   638  +    }
   639  +    y: (#struct){
   640         c: (string){ "c" }
   641       }
   642     }
   643  -- out/eval --
   644  Errors:
   645  issue3474.topValidator.failType.A: conflicting values >10 and {C:1} (mismatched types number and struct):
   646      ./issue3474.cue:53:5
   647      ./issue3474.cue:53:16
   648      ./issue3474.cue:54:5
   649  callOfCallToValidator.e: cannot call previously called validator b:
   650      ./in.cue:94:5
   651  issue3418.t1: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   652      ./issue3418.cue:1:24
   653      ./issue3418.cue:1:16
   654      ./issue3418.cue:1:31
   655      ./issue3418.cue:1:35
   656      ./issue3418.cue:1:37
   657  issue3418.t2: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   658      ./issue3418.cue:2:41
   659      ./issue3418.cue:2:16
   660      ./issue3418.cue:2:48
   661      ./issue3418.cue:2:52
   662      ./issue3418.cue:2:54
   663  issue3418.t3.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   664      ./issue3418.cue:6:5
   665      ./issue3418.cue:4:5
   666      ./issue3418.cue:5:5
   667      ./issue3418.cue:6:12
   668      ./issue3418.cue:6:16
   669      ./issue3418.cue:6:18
   670  issue3418.t4.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   671      ./issue3418.cue:10:5
   672      ./issue3418.cue:9:5
   673      ./issue3418.cue:10:12
   674      ./issue3418.cue:10:16
   675      ./issue3418.cue:10:18
   676      ./issue3418.cue:11:5
   677  issue3474.structValidator.failAfter.A: invalid value {C:true,B*:if true true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   678      ./issue3474.cue:12:5
   679      ./issue3474.cue:12:22
   680      ./issue3474.cue:13:5
   681  issue3474.structValidator.failClosed.#A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   682      ./issue3474.cue:27:6
   683      ./issue3474.cue:27:23
   684      ./issue3474.cue:28:6
   685  issue3474.topValidator.fail.A: invalid value 1 (does not satisfy matchN): 0 matched, expected 1:
   686      ./issue3474.cue:41:5
   687      ./issue3474.cue:41:12
   688      ./issue3474.cue:42:5
   689      ./issue3474.cue:43:12
   690  issue3474.topValidator.fail.A: invalid value 1 (out of bound >10):
   691      ./issue3474.cue:41:16
   692      ./issue3474.cue:43:12
   693  issue3474.topValidator.failType.A: invalid value {C:1} (does not satisfy matchN): 0 matched, expected 1:
   694      ./issue3474.cue:53:5
   695      ./issue3474.cue:53:12
   696      ./issue3474.cue:54:5
   697  
   698  Result:
   699  (_|_){
   700    // [eval]
   701    incompleteError1: (struct){
   702      MyType: (struct){
   703        kv: (struct){ struct.MinFields(1) }
   704      }
   705      foo: (struct){
   706        kv: (struct){
   707          joel: (string){ "testing" }
   708        }
   709      }
   710    }
   711    incompleteError2: (struct){
   712      MyType: (struct){
   713        kv: (_|_){
   714          // [incomplete] incompleteError2.MyType.kv: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   715          //     ./in.cue:22:7
   716          //     ./in.cue:21:7
   717          //     ./in.cue:22:24
   718        }
   719      }
   720      foo: (struct){
   721        kv: (struct){
   722          joel: (string){ "testing" }
   723        }
   724      }
   725    }
   726    incompleteError3: (struct){
   727      t: (string){ &("encoding/json".Validate(string), string) }
   728    }
   729    uniqueConstrains1: (struct){
   730      t: (string){ &("encoding/json".Validate(string), string) }
   731    }
   732    uniqueConstrains2: (struct){
   733      t: (struct){ struct.MaxFields(1) }
   734    }
   735    violation: (struct){
   736      #MyType: (#struct){
   737        kv: (_|_){
   738          // [incomplete] violation.#MyType.kv: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   739          //     ./in.cue:49:7
   740          //     ./in.cue:48:7
   741          //     ./in.cue:49:24
   742        }
   743      }
   744      foo: (#struct){
   745        kv: (#struct){
   746          joel: (string){ "testing" }
   747          tony: (string){ "testing" }
   748        }
   749      }
   750    }
   751    conjuncts: (struct){
   752      kv: (struct){ &(struct.MinFields(1), struct.MaxFields(3)) }
   753    }
   754    bareBuiltin: (struct){
   755      a: ((string|bytes)){ "encoding/json".Valid() }
   756    }
   757    bareBuiltinCheck: (struct){
   758      a: (string){ "3" }
   759    }
   760    builtinValidator: (struct){
   761      a: ((string|bytes)){ "encoding/json".Valid() }
   762    }
   763    builtinValidatorCheck: (struct){
   764      a: (string){ "3" }
   765    }
   766    callOfCallToValidator: (_|_){
   767      // [eval]
   768      a: ((string|bytes)){ "encoding/json".Valid() }
   769      b: ((string|bytes)){ "encoding/json".Valid() }
   770      e: (_|_){
   771        // [eval] callOfCallToValidator.e: cannot call previously called validator b:
   772        //     ./in.cue:94:5
   773      }
   774    }
   775    validatorAsFunction: (struct){
   776      a: ((string|bytes)){ "encoding/json".Valid() }
   777      b: (bool){ true }
   778      c: (bool){ true }
   779    }
   780    issue2098: (struct){
   781      ok1: (int){
   782        1
   783        _a: (list){
   784          0: (int){ 1 }
   785        }
   786      }
   787      incomplete1: (_|_){
   788        // [incomplete] issue2098.incomplete1._a: invalid value [] (does not satisfy list.MinItems(1)): len(list) < MinItems(1) (0 < 1):
   789        //     ./in.cue:112:6
   790        //     ./in.cue:111:6
   791        //     ./in.cue:112:20
   792        _a: (_|_){
   793          // [incomplete] issue2098.incomplete1._a: invalid value [] (does not satisfy list.MinItems(1)): len(list) < MinItems(1) (0 < 1):
   794          //     ./in.cue:112:6
   795          //     ./in.cue:111:6
   796          //     ./in.cue:112:20
   797        }
   798      }
   799    }
   800    issue3418: (_|_){
   801      // [eval]
   802      t1: (_|_){
   803        // [eval] issue3418.t1: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   804        //     ./issue3418.cue:1:24
   805        //     ./issue3418.cue:1:16
   806        //     ./issue3418.cue:1:31
   807        //     ./issue3418.cue:1:35
   808        //     ./issue3418.cue:1:37
   809      }
   810      t2: (_|_){
   811        // [eval] issue3418.t2: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   812        //     ./issue3418.cue:2:41
   813        //     ./issue3418.cue:2:16
   814        //     ./issue3418.cue:2:48
   815        //     ./issue3418.cue:2:52
   816        //     ./issue3418.cue:2:54
   817      }
   818      t3: (_|_){
   819        // [eval]
   820        x: (_|_){
   821          // [eval] issue3418.t3.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   822          //     ./issue3418.cue:6:5
   823          //     ./issue3418.cue:4:5
   824          //     ./issue3418.cue:5:5
   825          //     ./issue3418.cue:6:12
   826          //     ./issue3418.cue:6:16
   827          //     ./issue3418.cue:6:18
   828        }
   829      }
   830      t4: (_|_){
   831        // [eval]
   832        x: (_|_){
   833          // [eval] issue3418.t4.x: invalid value "foo" (does not satisfy matchN): conflicting values 2 and 1:
   834          //     ./issue3418.cue:10:5
   835          //     ./issue3418.cue:9:5
   836          //     ./issue3418.cue:10:12
   837          //     ./issue3418.cue:10:16
   838          //     ./issue3418.cue:10:18
   839          //     ./issue3418.cue:11:5
   840        }
   841      }
   842    }
   843    issue3474: (_|_){
   844      // [eval]
   845      structValidator: (_|_){
   846        // [eval]
   847        ok: (struct){
   848          A: (struct){
   849            B: (bool){ true }
   850          }
   851        }
   852        failAfter: (_|_){
   853          // [eval]
   854          A: (_|_){
   855            // [eval] issue3474.structValidator.failAfter.A: invalid value {C:true,B*:if true true} (does not satisfy struct.MaxFields(1)): len(fields) > MaxFields(1) (2 > 1):
   856            //     ./issue3474.cue:12:5
   857            //     ./issue3474.cue:12:22
   858            //     ./issue3474.cue:13:5
   859            C: (bool){ true }
   860            B: (bool){ true }
   861          }
   862        }
   863        incomplete: (struct){
   864          A: (_|_){
   865            // [incomplete] issue3474.structValidator.incomplete.A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   866            //     ./issue3474.cue:20:5
   867            //     ./issue3474.cue:20:22
   868            //     ./issue3474.cue:21:5
   869          }
   870        }
   871        failClosed: (_|_){
   872          // [eval]
   873          #A: (_|_){
   874            // [eval] issue3474.structValidator.failClosed.#A: invalid value {} (does not satisfy struct.MinFields(1)): len(fields) < MinFields(1) (0 < 1):
   875            //     ./issue3474.cue:27:6
   876            //     ./issue3474.cue:27:23
   877            //     ./issue3474.cue:28:6
   878          }
   879        }
   880      }
   881      topValidator: (_|_){
   882        // [eval]
   883        ok: (struct){
   884          A: (int){ 100 }
   885        }
   886        fail: (_|_){
   887          // [eval]
   888          A: (_|_){
   889            // [eval] issue3474.topValidator.fail.A: invalid value 1 (does not satisfy matchN): 0 matched, expected 1:
   890            //     ./issue3474.cue:41:5
   891            //     ./issue3474.cue:41:12
   892            //     ./issue3474.cue:42:5
   893            //     ./issue3474.cue:43:12
   894            // issue3474.topValidator.fail.A: invalid value 1 (out of bound >10):
   895            //     ./issue3474.cue:41:16
   896            //     ./issue3474.cue:43:12
   897          }
   898        }
   899        incomplete: (struct){
   900          A: (int){ &(matchN(1, (#list){
   901              0: (_|_){// >10
   902              }
   903            }), int) }
   904        }
   905        failType: (_|_){
   906          // [eval]
   907          A: (_|_){
   908            // [eval] issue3474.topValidator.failType.A: conflicting values >10 and {C:1} (mismatched types number and struct):
   909            //     ./issue3474.cue:53:5
   910            //     ./issue3474.cue:53:16
   911            //     ./issue3474.cue:54:5
   912            // issue3474.topValidator.failType.A: invalid value {C:1} (does not satisfy matchN): 0 matched, expected 1:
   913            //     ./issue3474.cue:53:5
   914            //     ./issue3474.cue:53:12
   915            //     ./issue3474.cue:54:5
   916            C: (int){ 1 }
   917          }
   918        }
   919      }
   920    }
   921    issue3639: (struct){
   922      a: (struct){
   923        b: (int){ 1 }
   924      }
   925      #X: (_){ matchN(1, (#list){
   926          0: (_|_){// {
   927            //   b: int
   928            // }
   929          }
   930        }) }
   931    }
   932    issue3661: (struct){
   933      #X: (_){ matchN(1, (#list){
   934          0: (_|_){// {
   935            //   b!: int
   936            // }
   937          }
   938        }) }
   939      a: (struct){
   940        b: (int){ 1 }
   941      }
   942    }
   943    issue3678: (struct){
   944      #X: (_){ matchN(1, (#list){
   945          0: (_|_){// {
   946            //   a!: string
   947            // }
   948          }
   949          1: (_|_){// {
   950            //   c!: string
   951            // }
   952          }
   953        }) }
   954      x: (struct){
   955        c: (string){ "c" }
   956      }
   957      y: (struct){
   958        c: (string){ "c" }
   959      }
   960    }
   961  }
   962  -- out/compile --
   963  --- in.cue
   964  {
   965    incompleteError1: {
   966      MyType: {
   967        kv: 〈import;struct〉.MinFields(1)
   968      }
   969      foo: (〈0;MyType〉 & {
   970        kv: {
   971          joel: "testing"
   972        }
   973      })
   974    }
   975    incompleteError2: {
   976      MyType: {
   977        kv: {
   978          [string]: string
   979        }
   980        kv: 〈import;struct〉.MinFields(1)
   981      }
   982      foo: (〈0;MyType〉 & {
   983        kv: {
   984          joel: "testing"
   985        }
   986      })
   987    }
   988    incompleteError3: {
   989      t: string
   990      t: 〈import;"encoding/json"〉.Validate(string)
   991    }
   992    uniqueConstrains1: {
   993      t: string
   994      t: 〈import;"encoding/json"〉.Validate(string)
   995      t: 〈import;"encoding/json"〉.Validate(string)
   996    }
   997    uniqueConstrains2: {
   998      t: 〈import;struct〉.MaxFields(1)
   999      t: 〈import;struct〉.MaxFields(1)
  1000    }
  1001    violation: {
  1002      #MyType: {
  1003        kv: {
  1004          [string]: string
  1005        }
  1006        kv: 〈import;struct〉.MinFields(1)
  1007      }
  1008      foo: (〈0;#MyType〉 & {
  1009        kv: {
  1010          joel: "testing"
  1011        }
  1012        kv: {
  1013          tony: "testing"
  1014        }
  1015      })
  1016    }
  1017    conjuncts: {
  1018      kv: 〈import;struct〉.MinFields(1)
  1019      kv: 〈import;struct〉.MaxFields(3)
  1020    }
  1021    bareBuiltin: {
  1022      a: 〈import;"encoding/json"〉.Valid
  1023      a: 〈import;"encoding/json"〉.Valid
  1024    }
  1025    bareBuiltinCheck: {
  1026      a: 〈import;"encoding/json"〉.Valid
  1027      a: "3"
  1028    }
  1029    builtinValidator: {
  1030      a: 〈import;"encoding/json"〉.Valid()
  1031      a: 〈import;"encoding/json"〉.Valid()
  1032    }
  1033    builtinValidatorCheck: {
  1034      a: 〈import;"encoding/json"〉.Valid()
  1035      a: "3"
  1036    }
  1037    callOfCallToValidator: {
  1038      a: 〈import;"encoding/json"〉.Valid
  1039      b: 〈0;a〉()
  1040      e: 〈0;b〉()
  1041      e: "5"
  1042    }
  1043    validatorAsFunction: {
  1044      a: 〈import;"encoding/json"〉.Valid
  1045      b: 〈0;a〉("3")
  1046      c: 〈import;"encoding/json"〉.Valid("3")
  1047    }
  1048    issue2098: {
  1049      ok1: {
  1050        _a: [
  1051          1,
  1052          ...,
  1053        ]
  1054        _a: 〈import;list〉.MinItems(1)
  1055        〈0;_a〉[0]
  1056      }
  1057    }
  1058    issue2098: {
  1059      incomplete1: {
  1060        _a: [
  1061          ...,
  1062        ]
  1063        _a: 〈import;list〉.MinItems(1)
  1064        〈0;_a〉[0]
  1065      }
  1066    }
  1067  }
  1068  --- issue3418.cue
  1069  {
  1070    issue3418: {
  1071      t1: (("foo" & matchN(1, [
  1072        (1 & 2),
  1073      ])) & matchN(1, [
  1074        _,
  1075      ]))
  1076    }
  1077    issue3418: {
  1078      t2: (("foo" & matchN(1, [
  1079        _,
  1080      ])) & matchN(1, [
  1081        (1 & 2),
  1082      ]))
  1083    }
  1084    issue3418: {
  1085      t3: {
  1086        x: "foo"
  1087        x: matchN(1, [
  1088          _,
  1089        ])
  1090        x: matchN(1, [
  1091          (1 & 2),
  1092        ])
  1093      }
  1094    }
  1095    issue3418: {
  1096      t4: {
  1097        x: "foo"
  1098        x: matchN(1, [
  1099          (1 & 2),
  1100        ])
  1101        x: matchN(1, [
  1102          _,
  1103        ])
  1104      }
  1105    }
  1106  }
  1107  --- issue3474.cue
  1108  {
  1109    issue3474: {
  1110      structValidator: {
  1111        ok: {
  1112          A: 〈import;struct〉.MinFields(1)
  1113          A: {
  1114            if true {
  1115              B: true
  1116            }
  1117          }
  1118        }
  1119      }
  1120    }
  1121    issue3474: {
  1122      structValidator: {
  1123        failAfter: {
  1124          A: 〈import;struct〉.MaxFields(1)
  1125          A: {
  1126            C: true
  1127            if true {
  1128              B: true
  1129            }
  1130          }
  1131        }
  1132      }
  1133    }
  1134    issue3474: {
  1135      structValidator: {
  1136        incomplete: {
  1137          A: 〈import;struct〉.MinFields(1)
  1138          A: {
  1139            if true {}
  1140          }
  1141        }
  1142      }
  1143    }
  1144    issue3474: {
  1145      structValidator: {
  1146        failClosed: {
  1147          #A: 〈import;struct〉.MinFields(1)
  1148          #A: {
  1149            if true {}
  1150          }
  1151        }
  1152      }
  1153    }
  1154    issue3474: {
  1155      topValidator: {
  1156        ok: {
  1157          A: matchN(1, [
  1158            >10,
  1159          ])
  1160          A: {
  1161            if true {
  1162              100
  1163            }
  1164          }
  1165        }
  1166      }
  1167    }
  1168    issue3474: {
  1169      topValidator: {
  1170        fail: {
  1171          A: matchN(1, [
  1172            >10,
  1173          ])
  1174          A: {
  1175            if true {
  1176              1
  1177            }
  1178          }
  1179        }
  1180      }
  1181    }
  1182    issue3474: {
  1183      topValidator: {
  1184        incomplete: {
  1185          A: matchN(1, [
  1186            >10,
  1187          ])
  1188          A: {
  1189            if true {
  1190              int
  1191            }
  1192          }
  1193        }
  1194      }
  1195    }
  1196    issue3474: {
  1197      topValidator: {
  1198        failType: {
  1199          A: matchN(1, [
  1200            >10,
  1201          ])
  1202          A: {
  1203            if true {
  1204              C: 1
  1205            }
  1206          }
  1207        }
  1208      }
  1209    }
  1210  }
  1211  --- validator_is_top.cue
  1212  {
  1213    issue3639: {
  1214      a: ({
  1215        〈1;#X〉
  1216      } & 〈0;#X〉)
  1217      a: {
  1218        b: 1
  1219      }
  1220      #X: matchN(1, [
  1221        {
  1222          b: int
  1223        },
  1224      ])
  1225    }
  1226    issue3661: {
  1227      #X: matchN(1, [
  1228        {
  1229          b!: int
  1230        },
  1231      ])
  1232      a: {
  1233        b: 1
  1234      }
  1235      a: 〈0;#X〉
  1236      ["a"]: 〈0;#X〉
  1237    }
  1238    issue3678: {
  1239      #X: matchN(1, [
  1240        {
  1241          a!: string
  1242        },
  1243        {
  1244          c!: string
  1245        },
  1246      ])
  1247      x: {
  1248        c: "c"
  1249      }
  1250      y: 〈0;#X〉
  1251      y: 〈0;x〉
  1252      x: 〈0;#X〉
  1253    }
  1254  }