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