cuelang.org/go@v0.10.1/cue/testdata/disjunctions/embed.txtar (about)

     1  -- in.cue --
     2  // Given the existence of this field, embedDefault is a struct. This
     3  // means that embedding this conjunction into `embedDefault` itself should
     4  // make it resolve to `{a: 2}`.
     5  
     6  default: {
     7  	y: *1 | {a: 2}
     8  	y
     9  }
    10  
    11  unambiguous: {
    12  	y: 1 | {a: 2}
    13  	y
    14  }
    15  
    16  forDefault: {
    17  	y: *1 | {a: 2}
    18  	for x in [1] {y}
    19  }
    20  
    21  // Carry over default to first disjunct.
    22  openDefault: {
    23  	#y: *1 | {a: 2}
    24  	#y
    25  }
    26  
    27  openAmbiguous: {
    28  	#y: 1 | {a: 2}
    29  	#y
    30  }
    31  
    32  forceStruct: {
    33  	#y: 1 | {a: 2}
    34  	#y
    35  	{}
    36  }
    37  
    38  defaultsMulti: {
    39  	a: {
    40  		#def: {
    41  			*{} | {a: string} | {b: string}
    42  			*{} | {c: string} | {d: string}
    43  		}
    44  
    45  		a: #def & {a: "foo"}
    46  	}
    47  
    48  	b: {
    49  		#def: {
    50  			*{} | {a: string} | {b: string}
    51  			*{} | {c: string} | {d: string}
    52  			*{} | {d: string} | {e: string}
    53  		}
    54  
    55  		a: #def & {a: "foo", e: "bar"}
    56  	}
    57  }
    58  
    59  nested: {
    60  	a: 1 | 2 | *(
    61  		(3 | 4 | *( 5 | 6 | *7)) & ( 3 | 4 | ( *7 | 8 )))
    62  }
    63  -- out/eval/stats --
    64  Leaks:  1
    65  Freed:  416
    66  Reused: 381
    67  Allocs: 36
    68  Retain: 1
    69  
    70  Unifications: 257
    71  Conjuncts:    478
    72  Disjuncts:    417
    73  -- out/evalalpha --
    74  (struct){
    75    default: (struct){
    76      y: ((int|struct)){ |(*(int){ 1 }, (struct){
    77          a: (int){ 2 }
    78        }) }
    79      a: (int){ 2 }
    80    }
    81    unambiguous: (struct){
    82      y: ((int|struct)){ |((int){ 1 }, (struct){
    83          a: (int){ 2 }
    84        }) }
    85      a: (int){ 2 }
    86    }
    87    forDefault: (struct){
    88      y: ((int|struct)){ |(*(int){ 1 }, (struct){
    89          a: (int){ 2 }
    90        }) }
    91      a: (int){ 2 }
    92    }
    93    openDefault: ((int|struct)){ |(*(int){
    94        1
    95        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
    96            a: (int){ 2 }
    97          }) }
    98      }, (#struct){
    99        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
   100            a: (int){ 2 }
   101          }) }
   102        a: (int){ 2 }
   103      }) }
   104    openAmbiguous: ((int|struct)){ |((int){
   105        1
   106        #y: ((int|struct)){ |((int){ 1 }, (#struct){
   107            a: (int){ 2 }
   108          }) }
   109      }, (#struct){
   110        #y: ((int|struct)){ |((int){ 1 }, (#struct){
   111            a: (int){ 2 }
   112          }) }
   113        a: (int){ 2 }
   114      }) }
   115    forceStruct: (#struct){
   116      #y: ((int|struct)){ |((int){ 1 }, (#struct){
   117          a: (int){ 2 }
   118        }) }
   119      a: (int){ 2 }
   120    }
   121    defaultsMulti: (struct){
   122      a: (struct){
   123        #def: (#struct){ |(*(#struct){
   124          }, (#struct){
   125            c: (string){ string }
   126          }, (#struct){
   127            d: (string){ string }
   128          }, (#struct){
   129            a: (string){ string }
   130          }, (#struct){
   131            a: (string){ string }
   132            c: (string){ string }
   133          }, (#struct){
   134            a: (string){ string }
   135            d: (string){ string }
   136          }, (#struct){
   137            b: (string){ string }
   138          }, (#struct){
   139            b: (string){ string }
   140            c: (string){ string }
   141          }, (#struct){
   142            b: (string){ string }
   143            d: (string){ string }
   144          }) }
   145        a: (#struct){ |((#struct){
   146            a: (string){ "foo" }
   147          }, (#struct){
   148            a: (string){ "foo" }
   149            c: (string){ string }
   150          }, (#struct){
   151            a: (string){ "foo" }
   152            d: (string){ string }
   153          }) }
   154      }
   155      b: (struct){
   156        #def: (#struct){ |(*(#struct){
   157          }, (#struct){
   158            d: (string){ string }
   159          }, (#struct){
   160            e: (string){ string }
   161          }, (#struct){
   162            c: (string){ string }
   163          }, (#struct){
   164            c: (string){ string }
   165            d: (string){ string }
   166          }, (#struct){
   167            c: (string){ string }
   168            e: (string){ string }
   169          }, (#struct){
   170            d: (string){ string }
   171            e: (string){ string }
   172          }, (#struct){
   173            a: (string){ string }
   174          }, (#struct){
   175            a: (string){ string }
   176            d: (string){ string }
   177          }, (#struct){
   178            a: (string){ string }
   179            e: (string){ string }
   180          }, (#struct){
   181            a: (string){ string }
   182            c: (string){ string }
   183          }, (#struct){
   184            a: (string){ string }
   185            c: (string){ string }
   186            d: (string){ string }
   187          }, (#struct){
   188            a: (string){ string }
   189            c: (string){ string }
   190            e: (string){ string }
   191          }, (#struct){
   192            a: (string){ string }
   193            d: (string){ string }
   194            e: (string){ string }
   195          }, (#struct){
   196            b: (string){ string }
   197          }, (#struct){
   198            b: (string){ string }
   199            d: (string){ string }
   200          }, (#struct){
   201            b: (string){ string }
   202            e: (string){ string }
   203          }, (#struct){
   204            b: (string){ string }
   205            c: (string){ string }
   206          }, (#struct){
   207            b: (string){ string }
   208            c: (string){ string }
   209            d: (string){ string }
   210          }, (#struct){
   211            b: (string){ string }
   212            c: (string){ string }
   213            e: (string){ string }
   214          }, (#struct){
   215            b: (string){ string }
   216            d: (string){ string }
   217            e: (string){ string }
   218          }) }
   219        a: (#struct){ |((#struct){
   220            a: (string){ "foo" }
   221            e: (string){ "bar" }
   222          }, (#struct){
   223            a: (string){ "foo" }
   224            e: (string){ "bar" }
   225            c: (string){ string }
   226          }, (#struct){
   227            a: (string){ "foo" }
   228            e: (string){ "bar" }
   229            d: (string){ string }
   230          }) }
   231      }
   232    }
   233    nested: (struct){
   234      a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) }
   235    }
   236  }
   237  -- diff/-out/evalalpha<==>+out/eval --
   238  diff old new
   239  --- old
   240  +++ new
   241  @@ -69,7 +69,7 @@
   242             b: (string){ string }
   243             d: (string){ string }
   244           }) }
   245  -      a: (#struct){ |(*(#struct){
   246  +      a: (#struct){ |((#struct){
   247             a: (string){ "foo" }
   248           }, (#struct){
   249             a: (string){ "foo" }
   250  @@ -143,7 +143,7 @@
   251             d: (string){ string }
   252             e: (string){ string }
   253           }) }
   254  -      a: (#struct){ |(*(#struct){
   255  +      a: (#struct){ |((#struct){
   256             a: (string){ "foo" }
   257             e: (string){ "bar" }
   258           }, (#struct){
   259  -- diff/explanation --
   260  The old algorithm was incorrect: the default value should not be carried:
   261  only {b: string} of the first disjunction can be part of the result. As it
   262  is not a default, the result of the disjunction cross product cannot be a
   263  default either.
   264  -- out/eval --
   265  (struct){
   266    default: (struct){
   267      y: ((int|struct)){ |(*(int){ 1 }, (struct){
   268          a: (int){ 2 }
   269        }) }
   270      a: (int){ 2 }
   271    }
   272    unambiguous: (struct){
   273      y: ((int|struct)){ |((int){ 1 }, (struct){
   274          a: (int){ 2 }
   275        }) }
   276      a: (int){ 2 }
   277    }
   278    forDefault: (struct){
   279      y: ((int|struct)){ |(*(int){ 1 }, (struct){
   280          a: (int){ 2 }
   281        }) }
   282      a: (int){ 2 }
   283    }
   284    openDefault: ((int|struct)){ |(*(int){
   285        1
   286        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
   287            a: (int){ 2 }
   288          }) }
   289      }, (#struct){
   290        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
   291            a: (int){ 2 }
   292          }) }
   293        a: (int){ 2 }
   294      }) }
   295    openAmbiguous: ((int|struct)){ |((int){
   296        1
   297        #y: ((int|struct)){ |((int){ 1 }, (#struct){
   298            a: (int){ 2 }
   299          }) }
   300      }, (#struct){
   301        #y: ((int|struct)){ |((int){ 1 }, (#struct){
   302            a: (int){ 2 }
   303          }) }
   304        a: (int){ 2 }
   305      }) }
   306    forceStruct: (#struct){
   307      #y: ((int|struct)){ |((int){ 1 }, (#struct){
   308          a: (int){ 2 }
   309        }) }
   310      a: (int){ 2 }
   311    }
   312    defaultsMulti: (struct){
   313      a: (struct){
   314        #def: (#struct){ |(*(#struct){
   315          }, (#struct){
   316            c: (string){ string }
   317          }, (#struct){
   318            d: (string){ string }
   319          }, (#struct){
   320            a: (string){ string }
   321          }, (#struct){
   322            a: (string){ string }
   323            c: (string){ string }
   324          }, (#struct){
   325            a: (string){ string }
   326            d: (string){ string }
   327          }, (#struct){
   328            b: (string){ string }
   329          }, (#struct){
   330            b: (string){ string }
   331            c: (string){ string }
   332          }, (#struct){
   333            b: (string){ string }
   334            d: (string){ string }
   335          }) }
   336        a: (#struct){ |(*(#struct){
   337            a: (string){ "foo" }
   338          }, (#struct){
   339            a: (string){ "foo" }
   340            c: (string){ string }
   341          }, (#struct){
   342            a: (string){ "foo" }
   343            d: (string){ string }
   344          }) }
   345      }
   346      b: (struct){
   347        #def: (#struct){ |(*(#struct){
   348          }, (#struct){
   349            d: (string){ string }
   350          }, (#struct){
   351            e: (string){ string }
   352          }, (#struct){
   353            c: (string){ string }
   354          }, (#struct){
   355            c: (string){ string }
   356            d: (string){ string }
   357          }, (#struct){
   358            c: (string){ string }
   359            e: (string){ string }
   360          }, (#struct){
   361            d: (string){ string }
   362            e: (string){ string }
   363          }, (#struct){
   364            a: (string){ string }
   365          }, (#struct){
   366            a: (string){ string }
   367            d: (string){ string }
   368          }, (#struct){
   369            a: (string){ string }
   370            e: (string){ string }
   371          }, (#struct){
   372            a: (string){ string }
   373            c: (string){ string }
   374          }, (#struct){
   375            a: (string){ string }
   376            c: (string){ string }
   377            d: (string){ string }
   378          }, (#struct){
   379            a: (string){ string }
   380            c: (string){ string }
   381            e: (string){ string }
   382          }, (#struct){
   383            a: (string){ string }
   384            d: (string){ string }
   385            e: (string){ string }
   386          }, (#struct){
   387            b: (string){ string }
   388          }, (#struct){
   389            b: (string){ string }
   390            d: (string){ string }
   391          }, (#struct){
   392            b: (string){ string }
   393            e: (string){ string }
   394          }, (#struct){
   395            b: (string){ string }
   396            c: (string){ string }
   397          }, (#struct){
   398            b: (string){ string }
   399            c: (string){ string }
   400            d: (string){ string }
   401          }, (#struct){
   402            b: (string){ string }
   403            c: (string){ string }
   404            e: (string){ string }
   405          }, (#struct){
   406            b: (string){ string }
   407            d: (string){ string }
   408            e: (string){ string }
   409          }) }
   410        a: (#struct){ |(*(#struct){
   411            a: (string){ "foo" }
   412            e: (string){ "bar" }
   413          }, (#struct){
   414            a: (string){ "foo" }
   415            e: (string){ "bar" }
   416            c: (string){ string }
   417          }, (#struct){
   418            a: (string){ "foo" }
   419            e: (string){ "bar" }
   420            d: (string){ string }
   421          }) }
   422      }
   423    }
   424    nested: (struct){
   425      a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) }
   426    }
   427  }
   428  -- out/compile --
   429  --- in.cue
   430  {
   431    default: {
   432      y: (*1|{
   433        a: 2
   434      })
   435      〈0;y〉
   436    }
   437    unambiguous: {
   438      y: (1|{
   439        a: 2
   440      })
   441      〈0;y〉
   442    }
   443    forDefault: {
   444      y: (*1|{
   445        a: 2
   446      })
   447      for _, x in [
   448        1,
   449      ] {
   450        〈2;y〉
   451      }
   452    }
   453    openDefault: {
   454      #y: (*1|{
   455        a: 2
   456      })
   457      〈0;#y〉
   458    }
   459    openAmbiguous: {
   460      #y: (1|{
   461        a: 2
   462      })
   463      〈0;#y〉
   464    }
   465    forceStruct: {
   466      #y: (1|{
   467        a: 2
   468      })
   469      〈0;#y〉
   470      {}
   471    }
   472    defaultsMulti: {
   473      a: {
   474        #def: {
   475          (*{}|{
   476            a: string
   477          }|{
   478            b: string
   479          })
   480          (*{}|{
   481            c: string
   482          }|{
   483            d: string
   484          })
   485        }
   486        a: (〈0;#def〉 & {
   487          a: "foo"
   488        })
   489      }
   490      b: {
   491        #def: {
   492          (*{}|{
   493            a: string
   494          }|{
   495            b: string
   496          })
   497          (*{}|{
   498            c: string
   499          }|{
   500            d: string
   501          })
   502          (*{}|{
   503            d: string
   504          }|{
   505            e: string
   506          })
   507        }
   508        a: (〈0;#def〉 & {
   509          a: "foo"
   510          e: "bar"
   511        })
   512      }
   513    }
   514    nested: {
   515      a: (1|2|*((3|4|*(5|6|*7)) & (3|4|(*7|8))))
   516    }
   517  }