github.com/solo-io/cue@v0.4.7/cue/testdata/disjunctions/elimination.txtar (about)

     1  // Ensure that disjunction elimination is not done prematurely.
     2  
     3  // Issue #651
     4  
     5  -- in.cue --
     6  import "struct"
     7  
     8  // Closedness checks should not be triggered too early, or with an improper
     9  // subset of StructInfos. Blindly finalizing partial disjuncts will end up
    10  // doing a closedness check with not all embeddings present, which can lead to
    11  // a field being rejected prematurely.
    12  //
    13  // It should be recursively disabled.
    14  disambiguateClosed: {
    15      b: #Def & a
    16      a: #Def
    17      #Def: { {x: true} | {y: true} }
    18  }
    19  
    20  // Checks should never be disabled for field matching.
    21  alwaysCheckMatchers1: {
    22      b: {[=~"^xxxx$"]: int} | null
    23      b: {c:            string} | null
    24      b: c: "yyyyy"
    25  }
    26  
    27  alwaysCheckPatterns2: {
    28      a: #X
    29      a: b
    30  
    31      b: #X
    32      b: c: "yyyyy"
    33  
    34      #X: string | {
    35          c: string
    36          {[=~"^xxxx$"]: int}
    37      }
    38  }
    39  
    40  nestedNonMonotonic: resolved: n1: {
    41      x: { a: struct.MinFields(2) } | null
    42      x: { a: c: 1 } | null
    43      x: { a: d: 1 } | null
    44  }
    45  
    46  nestedNonMonotonic: resolved: n2: {
    47      x: { a: b: struct.MinFields(2) } | null
    48      x: { a: b: c: 1 } | null
    49      x: { a: b: d: 1 } | null
    50  }
    51  
    52  nestedNonMonotonic: eliminated: n1: p1: {
    53      x: { a: struct.MaxFields(1) } | null
    54      x: { a: c: 1 } | null
    55      x: { a: d: 1 } | null
    56  }
    57  
    58  nestedNonMonotonic: eliminated: n1: p2: {
    59      x: { a: c: 1 } | null
    60      x: { a: struct.MaxFields(1) } | null
    61      x: { a: d: 1 } | null
    62  }
    63  
    64  nestedNonMonotonic: eliminated: n1: p2: {
    65      x: { a: c: 1 } | null
    66      x: { a: d: 1 } | null
    67      x: { a: struct.MaxFields(1) } | null
    68  }
    69  
    70  nestedNonMonotonic: eliminated: n2: p1: {
    71      x: { a: b: struct.MaxFields(1) } | null
    72      x: { a: b: c: 1 } | null
    73      x: { a: b: d: 1 } | null
    74  }
    75  
    76  nestedNonMonotonic: eliminated: n2: p2: {
    77      x: { a: b: c: 1 } | null
    78      x: { a: b: struct.MaxFields(1) } | null
    79      x: { a: b: d: 1 } | null
    80  }
    81  
    82  nestedNonMonotonic: eliminated: n2: p2: {
    83      x: { a: b: c: 1 } | null
    84      x: { a: b: d: 1 } | null
    85      x: { a: b: struct.MaxFields(1) } | null
    86  }
    87  
    88  nestedNonMonotonic: incomplete: a: n1: p1:  {
    89      x: { a: struct.MinFields(2) } | null
    90      x: { a: c: 1 } | null
    91  }
    92  
    93  nestedNonMonotonic: incomplete: a: n1: p2:  {
    94      x: { a: c: 1 } | null
    95      x: { a: struct.MinFields(2) } | null
    96  }
    97  
    98  nestedNonMonotonic: incomplete: a: n2: p1:  {
    99      x: { a: b: struct.MinFields(2) } | null
   100      x: { a: b: c: 1 } | null
   101  }
   102  
   103  nestedNonMonotonic: incomplete: a: n2: p2:  {
   104      x: { a: b: c: 1 } | null
   105      x: { a: b: struct.MinFields(2) } | null
   106  }
   107  
   108  
   109  nestedNonMonotonic: incomplete: b: n1: p1: {
   110      x: { a: struct.MinFields(3) } | null
   111      x: { a: c: 1 } | null
   112      x: { a: d: 1 } | null
   113  }
   114  
   115  nestedNonMonotonic: incomplete: b: n1: p2: {
   116      x: { a: c: 1 } | null
   117      x: { a: struct.MinFields(3) } | null
   118      x: { a: d: 1 } | null
   119  }
   120  
   121  nestedNonMonotonic: incomplete: b: n1: p3: {
   122      x: { a: c: 1 } | null
   123      x: { a: d: 1 } | null
   124      x: { a: struct.MinFields(3) } | null
   125  }
   126  
   127  nestedNonMonotonic: incomplete: b: n2: p1: {
   128      x: { a: b: struct.MinFields(3) } | null
   129      x: { a: b: c: 1 } | null
   130      x: { a: b: d: 1 } | null
   131  }
   132  
   133  nestedNonMonotonic: incomplete: b: n2: p1: {
   134      x: { a: b: c: 1 } | null
   135      x: { a: b: struct.MinFields(3) } | null
   136      x: { a: b: d: 1 } | null
   137  }
   138  
   139  nestedNonMonotonic: incomplete: b: n2: p1: {
   140      x: { a: b: c: 1 } | null
   141      x: { a: b: d: 1 } | null
   142      x: { a: b: struct.MinFields(3) } | null
   143  }
   144  
   145  preserveClosedness: small: p1: {
   146      #A: #B & {a: string}
   147      #B: {
   148        *{} | {a: string}
   149        *{} | {b: int}
   150      }
   151  }
   152  
   153  preserveClosedness: small: p2: {
   154      #A: #B & {a: string}
   155      #B: {
   156        {a: string} | *{}
   157        *{} | {b: int}
   158      }
   159  }
   160  
   161  preserveClosedness: medium: p1: {
   162      #A: #B & {a: string}
   163      #B: {
   164        *{} | {a: string} | {b: string}
   165        *{} | {c: int} | {d: string}
   166      }
   167  }
   168  
   169  preserveClosedness: medium: p2: {
   170      #A: #B & {a: string}
   171      #B: {
   172        {a: string} | *{} | {b: string}
   173        *{} | {c: int} | {d: string}
   174      }
   175  }
   176  
   177  preserveClosedness: medium: p3: {
   178      #A: #B & {a: string}
   179      #B: {
   180        {a: string} | {b: string} | *{}
   181        *{} | {c: int} | {d: string}
   182      }
   183  }
   184  
   185  -- out/eval --
   186  (struct){
   187    disambiguateClosed: (struct){
   188      b: (#struct){ |((#struct){
   189          x: (bool){ true }
   190        }, (#struct){
   191          y: (bool){ true }
   192        }) }
   193      a: (#struct){ |((#struct){
   194          x: (bool){ true }
   195        }, (#struct){
   196          y: (bool){ true }
   197        }) }
   198      #Def: (#struct){ |((#struct){
   199          x: (bool){ true }
   200        }, (#struct){
   201          y: (bool){ true }
   202        }) }
   203    }
   204    alwaysCheckMatchers1: (struct){
   205      b: (struct){
   206        c: (string){ "yyyyy" }
   207      }
   208    }
   209    alwaysCheckPatterns2: (struct){
   210      a: (#struct){
   211        c: (string){ "yyyyy" }
   212      }
   213      b: (#struct){
   214        c: (string){ "yyyyy" }
   215      }
   216      #X: ((string|struct)){ |((string){ string }, (#struct){
   217          c: (string){ string }
   218        }) }
   219    }
   220    nestedNonMonotonic: (struct){
   221      resolved: (struct){
   222        n1: (struct){
   223          x: ((null|struct)){ |((struct){
   224              a: (struct){
   225                c: (int){ 1 }
   226                d: (int){ 1 }
   227              }
   228            }, (null){ null }) }
   229        }
   230        n2: (struct){
   231          x: ((null|struct)){ |((struct){
   232              a: (struct){
   233                b: (struct){
   234                  c: (int){ 1 }
   235                  d: (int){ 1 }
   236                }
   237              }
   238            }, (null){ null }) }
   239        }
   240      }
   241      eliminated: (struct){
   242        n1: (struct){
   243          p1: (struct){
   244            x: (null){ null }
   245          }
   246          p2: (struct){
   247            x: (null){ null }
   248          }
   249        }
   250        n2: (struct){
   251          p1: (struct){
   252            x: (null){ null }
   253          }
   254          p2: (struct){
   255            x: (null){ null }
   256          }
   257        }
   258      }
   259      incomplete: (struct){
   260        a: (struct){
   261          n1: (struct){
   262            p1: (struct){
   263              x: ((null|struct)){ |((struct){
   264                  a: (_|_){
   265                    // [incomplete] nestedNonMonotonic.incomplete.a.n1.p1.x.a: invalid value {c:1} (does not satisfy struct.MinFields(2)): len(fields) < MinFields(2) (1 < 2):
   266                    //     ./in.cue:84:13
   267                    //     ./in.cue:84:10
   268                    //     ./in.cue:84:30
   269                    //     ./in.cue:85:10
   270                    c: (int){ 1 }
   271                  }
   272                }, (null){ null }) }
   273            }
   274            p2: (struct){
   275              x: ((null|struct)){ |((struct){
   276                  a: (_|_){
   277                    // [incomplete] nestedNonMonotonic.incomplete.a.n1.p2.x.a: invalid value {c:1} (does not satisfy struct.MinFields(2)): len(fields) < MinFields(2) (1 < 2):
   278                    //     ./in.cue:90:13
   279                    //     ./in.cue:89:10
   280                    //     ./in.cue:90:10
   281                    //     ./in.cue:90:30
   282                    c: (int){ 1 }
   283                  }
   284                }, (null){ null }) }
   285            }
   286          }
   287          n2: (struct){
   288            p1: (struct){
   289              x: ((null|struct)){ |((struct){
   290                  a: (struct){
   291                    b: (_|_){
   292                      // [incomplete] nestedNonMonotonic.incomplete.a.n2.p1.x.a.b: invalid value {c:1} (does not satisfy struct.MinFields(2)): len(fields) < MinFields(2) (1 < 2):
   293                      //     ./in.cue:94:16
   294                      //     ./in.cue:94:13
   295                      //     ./in.cue:94:33
   296                      //     ./in.cue:95:13
   297                      c: (int){ 1 }
   298                    }
   299                  }
   300                }, (null){ null }) }
   301            }
   302            p2: (struct){
   303              x: ((null|struct)){ |((struct){
   304                  a: (struct){
   305                    b: (_|_){
   306                      // [incomplete] nestedNonMonotonic.incomplete.a.n2.p2.x.a.b: invalid value {c:1} (does not satisfy struct.MinFields(2)): len(fields) < MinFields(2) (1 < 2):
   307                      //     ./in.cue:100:16
   308                      //     ./in.cue:99:13
   309                      //     ./in.cue:100:13
   310                      //     ./in.cue:100:33
   311                      c: (int){ 1 }
   312                    }
   313                  }
   314                }, (null){ null }) }
   315            }
   316          }
   317        }
   318        b: (struct){
   319          n1: (struct){
   320            p1: (struct){
   321              x: ((null|struct)){ |((struct){
   322                  a: (_|_){
   323                    // [incomplete] nestedNonMonotonic.incomplete.b.n1.p1.x.a: invalid value {c:1,d:1} (does not satisfy struct.MinFields(3)): len(fields) < MinFields(3) (2 < 3):
   324                    //     ./in.cue:105:13
   325                    //     ./in.cue:105:10
   326                    //     ./in.cue:105:30
   327                    //     ./in.cue:106:10
   328                    //     ./in.cue:107:10
   329                    c: (int){ 1 }
   330                    d: (int){ 1 }
   331                  }
   332                }, (null){ null }) }
   333            }
   334            p2: (struct){
   335              x: ((null|struct)){ |((struct){
   336                  a: (_|_){
   337                    // [incomplete] nestedNonMonotonic.incomplete.b.n1.p2.x.a: invalid value {c:1,d:1} (does not satisfy struct.MinFields(3)): len(fields) < MinFields(3) (2 < 3):
   338                    //     ./in.cue:112:13
   339                    //     ./in.cue:111:10
   340                    //     ./in.cue:112:10
   341                    //     ./in.cue:112:30
   342                    //     ./in.cue:113:10
   343                    c: (int){ 1 }
   344                    d: (int){ 1 }
   345                  }
   346                }, (null){ null }) }
   347            }
   348            p3: (struct){
   349              x: ((null|struct)){ |((struct){
   350                  a: (_|_){
   351                    // [incomplete] nestedNonMonotonic.incomplete.b.n1.p3.x.a: invalid value {c:1,d:1} (does not satisfy struct.MinFields(3)): len(fields) < MinFields(3) (2 < 3):
   352                    //     ./in.cue:119:13
   353                    //     ./in.cue:117:10
   354                    //     ./in.cue:118:10
   355                    //     ./in.cue:119:10
   356                    //     ./in.cue:119:30
   357                    c: (int){ 1 }
   358                    d: (int){ 1 }
   359                  }
   360                }, (null){ null }) }
   361            }
   362          }
   363          n2: (struct){
   364            p1: (struct){
   365              x: ((null|struct)){ |((struct){
   366                  a: (struct){
   367                    b: (_|_){
   368                      // [incomplete] nestedNonMonotonic.incomplete.b.n2.p1.x.a.b: invalid value {c:1,d:1} (does not satisfy struct.MinFields(3)): len(fields) < MinFields(3) (2 < 3):
   369                      //     ./in.cue:137:16
   370                      //     ./in.cue:123:13
   371                      //     ./in.cue:124:13
   372                      //     ./in.cue:125:13
   373                      //     ./in.cue:129:13
   374                      //     ./in.cue:130:13
   375                      //     ./in.cue:131:13
   376                      //     ./in.cue:135:13
   377                      //     ./in.cue:136:13
   378                      //     ./in.cue:137:13
   379                      //     ./in.cue:137:33
   380                      c: (int){ 1 }
   381                      d: (int){ 1 }
   382                    }
   383                  }
   384                }, (null){ null }) }
   385            }
   386          }
   387        }
   388      }
   389    }
   390    preserveClosedness: (struct){
   391      small: (struct){
   392        p1: (struct){
   393          #A: (#struct){ |(*(#struct){
   394              a: (string){ string }
   395            }, (#struct){
   396              a: (string){ string }
   397              b: (int){ int }
   398            }) }
   399          #B: (#struct){ |(*(#struct){
   400            }, (#struct){
   401              b: (int){ int }
   402            }, (#struct){
   403              a: (string){ string }
   404            }, (#struct){
   405              a: (string){ string }
   406              b: (int){ int }
   407            }) }
   408        }
   409        p2: (struct){
   410          #A: (#struct){ |(*(#struct){
   411              a: (string){ string }
   412            }, (#struct){
   413              a: (string){ string }
   414              b: (int){ int }
   415            }) }
   416          #B: (#struct){ |(*(#struct){
   417            }, (#struct){
   418              a: (string){ string }
   419              b: (int){ int }
   420            }, (#struct){
   421              a: (string){ string }
   422            }, (#struct){
   423              b: (int){ int }
   424            }) }
   425        }
   426      }
   427      medium: (struct){
   428        p1: (struct){
   429          #A: (#struct){ |(*(#struct){
   430              a: (string){ string }
   431            }, (#struct){
   432              a: (string){ string }
   433              c: (int){ int }
   434            }, (#struct){
   435              a: (string){ string }
   436              d: (string){ string }
   437            }) }
   438          #B: (#struct){ |(*(#struct){
   439            }, (#struct){
   440              c: (int){ int }
   441            }, (#struct){
   442              d: (string){ string }
   443            }, (#struct){
   444              a: (string){ string }
   445            }, (#struct){
   446              a: (string){ string }
   447              c: (int){ int }
   448            }, (#struct){
   449              a: (string){ string }
   450              d: (string){ string }
   451            }, (#struct){
   452              b: (string){ string }
   453            }, (#struct){
   454              b: (string){ string }
   455              c: (int){ int }
   456            }, (#struct){
   457              b: (string){ string }
   458              d: (string){ string }
   459            }) }
   460        }
   461        p2: (struct){
   462          #A: (#struct){ |(*(#struct){
   463              a: (string){ string }
   464            }, (#struct){
   465              a: (string){ string }
   466              c: (int){ int }
   467            }, (#struct){
   468              a: (string){ string }
   469              d: (string){ string }
   470            }) }
   471          #B: (#struct){ |(*(#struct){
   472            }, (#struct){
   473              a: (string){ string }
   474              c: (int){ int }
   475            }, (#struct){
   476              a: (string){ string }
   477              d: (string){ string }
   478            }, (#struct){
   479              a: (string){ string }
   480            }, (#struct){
   481              c: (int){ int }
   482            }, (#struct){
   483              d: (string){ string }
   484            }, (#struct){
   485              b: (string){ string }
   486            }, (#struct){
   487              b: (string){ string }
   488              c: (int){ int }
   489            }, (#struct){
   490              b: (string){ string }
   491              d: (string){ string }
   492            }) }
   493        }
   494        p3: (struct){
   495          #A: (#struct){ |(*(#struct){
   496              a: (string){ string }
   497            }, (#struct){
   498              a: (string){ string }
   499              c: (int){ int }
   500            }, (#struct){
   501              a: (string){ string }
   502              d: (string){ string }
   503            }) }
   504          #B: (#struct){ |(*(#struct){
   505            }, (#struct){
   506              a: (string){ string }
   507              c: (int){ int }
   508            }, (#struct){
   509              a: (string){ string }
   510              d: (string){ string }
   511            }, (#struct){
   512              b: (string){ string }
   513            }, (#struct){
   514              b: (string){ string }
   515              c: (int){ int }
   516            }, (#struct){
   517              b: (string){ string }
   518              d: (string){ string }
   519            }, (#struct){
   520              a: (string){ string }
   521            }, (#struct){
   522              c: (int){ int }
   523            }, (#struct){
   524              d: (string){ string }
   525            }) }
   526        }
   527      }
   528    }
   529  }
   530  -- out/compile --
   531  --- in.cue
   532  {
   533    disambiguateClosed: {
   534      b: (〈0;#Def〉 & 〈0;a〉)
   535      a: 〈0;#Def〉
   536      #Def: {
   537        ({
   538          x: true
   539        }|{
   540          y: true
   541        })
   542      }
   543    }
   544    alwaysCheckMatchers1: {
   545      b: ({
   546        [=~"^xxxx$"]: int
   547      }|null)
   548      b: ({
   549        c: string
   550      }|null)
   551      b: {
   552        c: "yyyyy"
   553      }
   554    }
   555    alwaysCheckPatterns2: {
   556      a: 〈0;#X〉
   557      a: 〈0;b〉
   558      b: 〈0;#X〉
   559      b: {
   560        c: "yyyyy"
   561      }
   562      #X: (string|{
   563        c: string
   564        {
   565          [=~"^xxxx$"]: int
   566        }
   567      })
   568    }
   569    nestedNonMonotonic: {
   570      resolved: {
   571        n1: {
   572          x: ({
   573            a: 〈import;struct〉.MinFields(2)
   574          }|null)
   575          x: ({
   576            a: {
   577              c: 1
   578            }
   579          }|null)
   580          x: ({
   581            a: {
   582              d: 1
   583            }
   584          }|null)
   585        }
   586      }
   587    }
   588    nestedNonMonotonic: {
   589      resolved: {
   590        n2: {
   591          x: ({
   592            a: {
   593              b: 〈import;struct〉.MinFields(2)
   594            }
   595          }|null)
   596          x: ({
   597            a: {
   598              b: {
   599                c: 1
   600              }
   601            }
   602          }|null)
   603          x: ({
   604            a: {
   605              b: {
   606                d: 1
   607              }
   608            }
   609          }|null)
   610        }
   611      }
   612    }
   613    nestedNonMonotonic: {
   614      eliminated: {
   615        n1: {
   616          p1: {
   617            x: ({
   618              a: 〈import;struct〉.MaxFields(1)
   619            }|null)
   620            x: ({
   621              a: {
   622                c: 1
   623              }
   624            }|null)
   625            x: ({
   626              a: {
   627                d: 1
   628              }
   629            }|null)
   630          }
   631        }
   632      }
   633    }
   634    nestedNonMonotonic: {
   635      eliminated: {
   636        n1: {
   637          p2: {
   638            x: ({
   639              a: {
   640                c: 1
   641              }
   642            }|null)
   643            x: ({
   644              a: 〈import;struct〉.MaxFields(1)
   645            }|null)
   646            x: ({
   647              a: {
   648                d: 1
   649              }
   650            }|null)
   651          }
   652        }
   653      }
   654    }
   655    nestedNonMonotonic: {
   656      eliminated: {
   657        n1: {
   658          p2: {
   659            x: ({
   660              a: {
   661                c: 1
   662              }
   663            }|null)
   664            x: ({
   665              a: {
   666                d: 1
   667              }
   668            }|null)
   669            x: ({
   670              a: 〈import;struct〉.MaxFields(1)
   671            }|null)
   672          }
   673        }
   674      }
   675    }
   676    nestedNonMonotonic: {
   677      eliminated: {
   678        n2: {
   679          p1: {
   680            x: ({
   681              a: {
   682                b: 〈import;struct〉.MaxFields(1)
   683              }
   684            }|null)
   685            x: ({
   686              a: {
   687                b: {
   688                  c: 1
   689                }
   690              }
   691            }|null)
   692            x: ({
   693              a: {
   694                b: {
   695                  d: 1
   696                }
   697              }
   698            }|null)
   699          }
   700        }
   701      }
   702    }
   703    nestedNonMonotonic: {
   704      eliminated: {
   705        n2: {
   706          p2: {
   707            x: ({
   708              a: {
   709                b: {
   710                  c: 1
   711                }
   712              }
   713            }|null)
   714            x: ({
   715              a: {
   716                b: 〈import;struct〉.MaxFields(1)
   717              }
   718            }|null)
   719            x: ({
   720              a: {
   721                b: {
   722                  d: 1
   723                }
   724              }
   725            }|null)
   726          }
   727        }
   728      }
   729    }
   730    nestedNonMonotonic: {
   731      eliminated: {
   732        n2: {
   733          p2: {
   734            x: ({
   735              a: {
   736                b: {
   737                  c: 1
   738                }
   739              }
   740            }|null)
   741            x: ({
   742              a: {
   743                b: {
   744                  d: 1
   745                }
   746              }
   747            }|null)
   748            x: ({
   749              a: {
   750                b: 〈import;struct〉.MaxFields(1)
   751              }
   752            }|null)
   753          }
   754        }
   755      }
   756    }
   757    nestedNonMonotonic: {
   758      incomplete: {
   759        a: {
   760          n1: {
   761            p1: {
   762              x: ({
   763                a: 〈import;struct〉.MinFields(2)
   764              }|null)
   765              x: ({
   766                a: {
   767                  c: 1
   768                }
   769              }|null)
   770            }
   771          }
   772        }
   773      }
   774    }
   775    nestedNonMonotonic: {
   776      incomplete: {
   777        a: {
   778          n1: {
   779            p2: {
   780              x: ({
   781                a: {
   782                  c: 1
   783                }
   784              }|null)
   785              x: ({
   786                a: 〈import;struct〉.MinFields(2)
   787              }|null)
   788            }
   789          }
   790        }
   791      }
   792    }
   793    nestedNonMonotonic: {
   794      incomplete: {
   795        a: {
   796          n2: {
   797            p1: {
   798              x: ({
   799                a: {
   800                  b: 〈import;struct〉.MinFields(2)
   801                }
   802              }|null)
   803              x: ({
   804                a: {
   805                  b: {
   806                    c: 1
   807                  }
   808                }
   809              }|null)
   810            }
   811          }
   812        }
   813      }
   814    }
   815    nestedNonMonotonic: {
   816      incomplete: {
   817        a: {
   818          n2: {
   819            p2: {
   820              x: ({
   821                a: {
   822                  b: {
   823                    c: 1
   824                  }
   825                }
   826              }|null)
   827              x: ({
   828                a: {
   829                  b: 〈import;struct〉.MinFields(2)
   830                }
   831              }|null)
   832            }
   833          }
   834        }
   835      }
   836    }
   837    nestedNonMonotonic: {
   838      incomplete: {
   839        b: {
   840          n1: {
   841            p1: {
   842              x: ({
   843                a: 〈import;struct〉.MinFields(3)
   844              }|null)
   845              x: ({
   846                a: {
   847                  c: 1
   848                }
   849              }|null)
   850              x: ({
   851                a: {
   852                  d: 1
   853                }
   854              }|null)
   855            }
   856          }
   857        }
   858      }
   859    }
   860    nestedNonMonotonic: {
   861      incomplete: {
   862        b: {
   863          n1: {
   864            p2: {
   865              x: ({
   866                a: {
   867                  c: 1
   868                }
   869              }|null)
   870              x: ({
   871                a: 〈import;struct〉.MinFields(3)
   872              }|null)
   873              x: ({
   874                a: {
   875                  d: 1
   876                }
   877              }|null)
   878            }
   879          }
   880        }
   881      }
   882    }
   883    nestedNonMonotonic: {
   884      incomplete: {
   885        b: {
   886          n1: {
   887            p3: {
   888              x: ({
   889                a: {
   890                  c: 1
   891                }
   892              }|null)
   893              x: ({
   894                a: {
   895                  d: 1
   896                }
   897              }|null)
   898              x: ({
   899                a: 〈import;struct〉.MinFields(3)
   900              }|null)
   901            }
   902          }
   903        }
   904      }
   905    }
   906    nestedNonMonotonic: {
   907      incomplete: {
   908        b: {
   909          n2: {
   910            p1: {
   911              x: ({
   912                a: {
   913                  b: 〈import;struct〉.MinFields(3)
   914                }
   915              }|null)
   916              x: ({
   917                a: {
   918                  b: {
   919                    c: 1
   920                  }
   921                }
   922              }|null)
   923              x: ({
   924                a: {
   925                  b: {
   926                    d: 1
   927                  }
   928                }
   929              }|null)
   930            }
   931          }
   932        }
   933      }
   934    }
   935    nestedNonMonotonic: {
   936      incomplete: {
   937        b: {
   938          n2: {
   939            p1: {
   940              x: ({
   941                a: {
   942                  b: {
   943                    c: 1
   944                  }
   945                }
   946              }|null)
   947              x: ({
   948                a: {
   949                  b: 〈import;struct〉.MinFields(3)
   950                }
   951              }|null)
   952              x: ({
   953                a: {
   954                  b: {
   955                    d: 1
   956                  }
   957                }
   958              }|null)
   959            }
   960          }
   961        }
   962      }
   963    }
   964    nestedNonMonotonic: {
   965      incomplete: {
   966        b: {
   967          n2: {
   968            p1: {
   969              x: ({
   970                a: {
   971                  b: {
   972                    c: 1
   973                  }
   974                }
   975              }|null)
   976              x: ({
   977                a: {
   978                  b: {
   979                    d: 1
   980                  }
   981                }
   982              }|null)
   983              x: ({
   984                a: {
   985                  b: 〈import;struct〉.MinFields(3)
   986                }
   987              }|null)
   988            }
   989          }
   990        }
   991      }
   992    }
   993    preserveClosedness: {
   994      small: {
   995        p1: {
   996          #A: (〈0;#B〉 & {
   997            a: string
   998          })
   999          #B: {
  1000            (*{}|{
  1001              a: string
  1002            })
  1003            (*{}|{
  1004              b: int
  1005            })
  1006          }
  1007        }
  1008      }
  1009    }
  1010    preserveClosedness: {
  1011      small: {
  1012        p2: {
  1013          #A: (〈0;#B〉 & {
  1014            a: string
  1015          })
  1016          #B: {
  1017            ({
  1018              a: string
  1019            }|*{})
  1020            (*{}|{
  1021              b: int
  1022            })
  1023          }
  1024        }
  1025      }
  1026    }
  1027    preserveClosedness: {
  1028      medium: {
  1029        p1: {
  1030          #A: (〈0;#B〉 & {
  1031            a: string
  1032          })
  1033          #B: {
  1034            (*{}|{
  1035              a: string
  1036            }|{
  1037              b: string
  1038            })
  1039            (*{}|{
  1040              c: int
  1041            }|{
  1042              d: string
  1043            })
  1044          }
  1045        }
  1046      }
  1047    }
  1048    preserveClosedness: {
  1049      medium: {
  1050        p2: {
  1051          #A: (〈0;#B〉 & {
  1052            a: string
  1053          })
  1054          #B: {
  1055            ({
  1056              a: string
  1057            }|*{}|{
  1058              b: string
  1059            })
  1060            (*{}|{
  1061              c: int
  1062            }|{
  1063              d: string
  1064            })
  1065          }
  1066        }
  1067      }
  1068    }
  1069    preserveClosedness: {
  1070      medium: {
  1071        p3: {
  1072          #A: (〈0;#B〉 & {
  1073            a: string
  1074          })
  1075          #B: {
  1076            ({
  1077              a: string
  1078            }|{
  1079              b: string
  1080            }|*{})
  1081            (*{}|{
  1082              c: int
  1083            }|{
  1084              d: string
  1085            })
  1086          }
  1087        }
  1088      }
  1089    }
  1090  }