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

     1  Interaction between defaults, embedding and disjunctions.
     2  
     3  // TODO: at the moment, using a default will select it.
     4  -- in.cue --
     5  x: {
     6  	// All of these resolve to *2 | 3
     7  	m1: (1 | (*2 | 3)) & (>=2 & <=3)
     8  	m2: (1 | (*2 | 3)) & (2 | 3)
     9  	m3: (*1 | *(*2 | 3)) & (2 | 3)
    10  }
    11  y1: x & {
    12  	{m4: x.m1 + x.m2 + x.m3}
    13  }
    14  y2: {
    15  	x
    16  	{m4: y2.m1 + y2.m2 + y2.m3}
    17  }
    18  Y=y3: {
    19  	x
    20  	{m4: Y.m1 + Y.m2 + Y.m3}
    21  }
    22  y4: x & {
    23  	{m4: y4.m1 + y4.m2 + y4.m3}
    24  }
    25  
    26  // Second disjunct in embedding is not possible because of previous declaration
    27  // of `b`, so it should be resolved to {a: 1}.
    28  z: {
    29  	b: (*"a" | "b") | "c"
    30  	{a: b} | {b: int}
    31  }
    32  -- out/eval/stats --
    33  Leaks:  0
    34  Freed:  163
    35  Reused: 155
    36  Allocs: 8
    37  Retain: 0
    38  
    39  Unifications: 29
    40  Conjuncts:    198
    41  Disjuncts:    163
    42  -- out/eval --
    43  (struct){
    44    x: (struct){
    45      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    46      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    47      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    48    }
    49    y1: (struct){
    50      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    51      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    52      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    53      m4: (int){ 6 }
    54    }
    55    y2: (struct){
    56      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    57      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    58      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    59      m4: (int){ 6 }
    60    }
    61    y3: (struct){
    62      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    63      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    64      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    65      m4: (int){ 6 }
    66    }
    67    y4: (struct){
    68      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    69      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    70      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    71      m4: (int){ 6 }
    72    }
    73    z: (struct){
    74      b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
    75      a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
    76    }
    77  }
    78  -- out/evalalpha --
    79  (struct){
    80    x: (struct){
    81      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    82      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    83      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    84    }
    85    y1: (struct){
    86      m4: (int){ 6 }
    87      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    88      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    89      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    90    }
    91    y2: (struct){
    92      m4: (int){ 6 }
    93      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
    94      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
    95      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
    96    }
    97    y3: (struct){
    98      m4: (int){ 6 }
    99      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   100      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   101      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   102    }
   103    y4: (struct){
   104      m4: (int){ 6 }
   105      m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   106      m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   107      m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   108    }
   109    z: (struct){
   110      b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
   111      a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
   112    }
   113  }
   114  -- diff/-out/evalalpha<==>+out/eval --
   115  diff old new
   116  --- old
   117  +++ new
   118  @@ -5,28 +5,28 @@
   119       m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   120     }
   121     y1: (struct){
   122  -    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   123  -    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   124  -    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   125  -    m4: (int){ 6 }
   126  +    m4: (int){ 6 }
   127  +    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   128  +    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   129  +    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   130     }
   131     y2: (struct){
   132  -    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   133  -    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   134  -    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   135  -    m4: (int){ 6 }
   136  +    m4: (int){ 6 }
   137  +    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   138  +    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   139  +    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   140     }
   141     y3: (struct){
   142  -    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   143  -    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   144  -    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   145  -    m4: (int){ 6 }
   146  +    m4: (int){ 6 }
   147  +    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   148  +    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   149  +    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   150     }
   151     y4: (struct){
   152  -    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   153  -    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   154  -    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   155  -    m4: (int){ 6 }
   156  +    m4: (int){ 6 }
   157  +    m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
   158  +    m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
   159  +    m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
   160     }
   161     z: (struct){
   162       b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
   163  -- diff/todo/p3 --
   164  Reordering.
   165  -- out/compile --
   166  --- in.cue
   167  {
   168    x: {
   169      m1: ((1|(*2|3)) & (>=2 & <=3))
   170      m2: ((1|(*2|3)) & (2|3))
   171      m3: ((*1|*(*2|3)) & (2|3))
   172    }
   173    y1: (〈0;x〉 & {
   174      {
   175        m4: ((〈2;x〉.m1 + 〈2;x〉.m2) + 〈2;x〉.m3)
   176      }
   177    })
   178    y2: {
   179      〈1;x〉
   180      {
   181        m4: ((〈2;y2〉.m1 + 〈2;y2〉.m2) + 〈2;y2〉.m3)
   182      }
   183    }
   184    y3: {
   185      〈1;x〉
   186      {
   187        m4: ((〈2;y3〉.m1 + 〈2;y3〉.m2) + 〈2;y3〉.m3)
   188      }
   189    }
   190    y4: (〈0;x〉 & {
   191      {
   192        m4: ((〈2;y4〉.m1 + 〈2;y4〉.m2) + 〈2;y4〉.m3)
   193      }
   194    })
   195    z: {
   196      b: ((*"a"|"b")|"c")
   197      ({
   198        a: 〈1;b〉
   199      }|{
   200        b: int
   201      })
   202    }
   203  }