cuelang.org/go@v0.10.1/cue/testdata/benchmarks/mergeddisjunction.txtar (about)

     1  // Here one comprehension creates a number of distinct values, each of which
     2  // with a disjunction, then another comprehension maps them back to the
     3  // same value, creating a large number of disjunctions.
     4  //
     5  // The disjunctions cannot be identified as equal in the general case. If no
     6  // care is taken, disjunction elimination will be exponential, causing over
     7  // a billion disjuncts to process in the below example. With the proper
     8  // optimizations, there is a small, constant number of disjunction ops per
     9  // disjunct.
    10  //
    11  // Issue #651
    12  -- stats.txt --
    13  Leaks:  0
    14  Freed:  283
    15  Reused: 275
    16  Allocs: 8
    17  Retain: 0
    18  
    19  Unifications: 99
    20  Conjuncts:    530
    21  Disjuncts:    283
    22  
    23  -- in.cue --
    24  list: [
    25  	0, 1, 2, 3, 4, 5, 6, 7, 8,
    26  	9, 10, 11, 12, 13, 14, 15, 16,
    27  	17, 18, 19, 20, 21, 22, 23, 24,
    28  	25, 26, 27, 28, 29, 30,
    29  ]
    30  a: [X=string]: text: *"default" | string
    31  
    32  a: {
    33  	for i in list {
    34  		"\(i)": text: string
    35  	}
    36  }
    37  
    38  b: {
    39  	for x in a {
    40  		"\(x.text)": {text: x.text}
    41  	}
    42  }
    43  -- out/eval/stats --
    44  Leaks:  0
    45  Freed:  283
    46  Reused: 275
    47  Allocs: 8
    48  Retain: 0
    49  
    50  Unifications: 99
    51  Conjuncts:    530
    52  Disjuncts:    283
    53  -- out/eval --
    54  (struct){
    55    list: (#list){
    56      0: (int){ 0 }
    57      1: (int){ 1 }
    58      2: (int){ 2 }
    59      3: (int){ 3 }
    60      4: (int){ 4 }
    61      5: (int){ 5 }
    62      6: (int){ 6 }
    63      7: (int){ 7 }
    64      8: (int){ 8 }
    65      9: (int){ 9 }
    66      10: (int){ 10 }
    67      11: (int){ 11 }
    68      12: (int){ 12 }
    69      13: (int){ 13 }
    70      14: (int){ 14 }
    71      15: (int){ 15 }
    72      16: (int){ 16 }
    73      17: (int){ 17 }
    74      18: (int){ 18 }
    75      19: (int){ 19 }
    76      20: (int){ 20 }
    77      21: (int){ 21 }
    78      22: (int){ 22 }
    79      23: (int){ 23 }
    80      24: (int){ 24 }
    81      25: (int){ 25 }
    82      26: (int){ 26 }
    83      27: (int){ 27 }
    84      28: (int){ 28 }
    85      29: (int){ 29 }
    86      30: (int){ 30 }
    87    }
    88    a: (struct){
    89      "0": (struct){
    90        text: (string){ |(*(string){ "default" }, (string){ string }) }
    91      }
    92      "1": (struct){
    93        text: (string){ |(*(string){ "default" }, (string){ string }) }
    94      }
    95      "2": (struct){
    96        text: (string){ |(*(string){ "default" }, (string){ string }) }
    97      }
    98      "3": (struct){
    99        text: (string){ |(*(string){ "default" }, (string){ string }) }
   100      }
   101      "4": (struct){
   102        text: (string){ |(*(string){ "default" }, (string){ string }) }
   103      }
   104      "5": (struct){
   105        text: (string){ |(*(string){ "default" }, (string){ string }) }
   106      }
   107      "6": (struct){
   108        text: (string){ |(*(string){ "default" }, (string){ string }) }
   109      }
   110      "7": (struct){
   111        text: (string){ |(*(string){ "default" }, (string){ string }) }
   112      }
   113      "8": (struct){
   114        text: (string){ |(*(string){ "default" }, (string){ string }) }
   115      }
   116      "9": (struct){
   117        text: (string){ |(*(string){ "default" }, (string){ string }) }
   118      }
   119      "10": (struct){
   120        text: (string){ |(*(string){ "default" }, (string){ string }) }
   121      }
   122      "11": (struct){
   123        text: (string){ |(*(string){ "default" }, (string){ string }) }
   124      }
   125      "12": (struct){
   126        text: (string){ |(*(string){ "default" }, (string){ string }) }
   127      }
   128      "13": (struct){
   129        text: (string){ |(*(string){ "default" }, (string){ string }) }
   130      }
   131      "14": (struct){
   132        text: (string){ |(*(string){ "default" }, (string){ string }) }
   133      }
   134      "15": (struct){
   135        text: (string){ |(*(string){ "default" }, (string){ string }) }
   136      }
   137      "16": (struct){
   138        text: (string){ |(*(string){ "default" }, (string){ string }) }
   139      }
   140      "17": (struct){
   141        text: (string){ |(*(string){ "default" }, (string){ string }) }
   142      }
   143      "18": (struct){
   144        text: (string){ |(*(string){ "default" }, (string){ string }) }
   145      }
   146      "19": (struct){
   147        text: (string){ |(*(string){ "default" }, (string){ string }) }
   148      }
   149      "20": (struct){
   150        text: (string){ |(*(string){ "default" }, (string){ string }) }
   151      }
   152      "21": (struct){
   153        text: (string){ |(*(string){ "default" }, (string){ string }) }
   154      }
   155      "22": (struct){
   156        text: (string){ |(*(string){ "default" }, (string){ string }) }
   157      }
   158      "23": (struct){
   159        text: (string){ |(*(string){ "default" }, (string){ string }) }
   160      }
   161      "24": (struct){
   162        text: (string){ |(*(string){ "default" }, (string){ string }) }
   163      }
   164      "25": (struct){
   165        text: (string){ |(*(string){ "default" }, (string){ string }) }
   166      }
   167      "26": (struct){
   168        text: (string){ |(*(string){ "default" }, (string){ string }) }
   169      }
   170      "27": (struct){
   171        text: (string){ |(*(string){ "default" }, (string){ string }) }
   172      }
   173      "28": (struct){
   174        text: (string){ |(*(string){ "default" }, (string){ string }) }
   175      }
   176      "29": (struct){
   177        text: (string){ |(*(string){ "default" }, (string){ string }) }
   178      }
   179      "30": (struct){
   180        text: (string){ |(*(string){ "default" }, (string){ string }) }
   181      }
   182    }
   183    b: (struct){
   184      default: (struct){
   185        text: (string){ |(*(string){ "default" }, (string){ string }) }
   186      }
   187    }
   188  }
   189  -- out/compile --
   190  --- in.cue
   191  {
   192    list: [
   193      0,
   194      1,
   195      2,
   196      3,
   197      4,
   198      5,
   199      6,
   200      7,
   201      8,
   202      9,
   203      10,
   204      11,
   205      12,
   206      13,
   207      14,
   208      15,
   209      16,
   210      17,
   211      18,
   212      19,
   213      20,
   214      21,
   215      22,
   216      23,
   217      24,
   218      25,
   219      26,
   220      27,
   221      28,
   222      29,
   223      30,
   224    ]
   225    a: {
   226      [string]: {
   227        text: (*"default"|string)
   228      }
   229    }
   230    a: {
   231      for _, i in 〈1;list〉 {
   232        "\(〈1;i〉)": {
   233          text: string
   234        }
   235      }
   236    }
   237    b: {
   238      for _, x in 〈1;a〉 {
   239        "\(〈1;x〉.text)": {
   240          text: 〈2;x〉.text
   241        }
   242      }
   243    }
   244  }