...

Text file src/cuelang.org/go/cue/testdata/benchmarks/mergeddisjunction.txtar

Documentation: cuelang.org/go/cue/testdata/benchmarks

     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 --
    13Leaks:  0
    14Freed:  283
    15Reused: 275
    16Allocs: 8
    17Retain: 0
    18
    19Unifications: 99
    20Conjuncts:    530
    21Disjuncts:    283
    22
    23-- in.cue --
    24list: [
    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]
    30a: [X=string]: text: *"default" | string
    31
    32a: {
    33	for i in list {
    34		"\(i)": text: string
    35	}
    36}
    37
    38b: {
    39	for x in a {
    40		"\(x.text)": {text: x.text}
    41	}
    42}
    43-- out/eval/stats --
    44Leaks:  0
    45Freed:  283
    46Reused: 275
    47Allocs: 8
    48Retain: 0
    49
    50Unifications: 99
    51Conjuncts:    530
    52Disjuncts:    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}

View as plain text