...

Text file src/cuelang.org/go/cue/testdata/scalars/embed.txtar

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

     1// Issue ##739
     2
     3-- in.cue --
     4import "strings"
     5
     6intEmbed: {
     7	a1: {
     8		2
     9	}
    10	a2: {
    11		v: {
    12			3
    13			#foo: a2.v + 1
    14		}
    15		w: v
    16		x: v.#foo
    17	}
    18	a3: a1 + a2.v
    19}
    20
    21listEmbed: {
    22	a1: {
    23		2
    24	}
    25	b3: {
    26		[1, 2]
    27		#foo: 1
    28	}
    29	b4: b3 + b3
    30	b5: b3[1]
    31	b6: b3[5]
    32	b7: b4[a1] // 1
    33}
    34
    35stringEmbed: {
    36	s1: {
    37		"foo"
    38		#bar: "bar"
    39	}
    40	s2: [ s1, {s1.#bar, #baz: 4}]
    41	s3: strings.Join(s2, "--")
    42}
    43
    44outPattern: {
    45	sum: {
    46		out: #a + #b
    47		#a:  int
    48		#b:  int
    49	}
    50	used: sum & {#a: 1, #b: 3}
    51}
    52
    53arithmetic: {
    54	sum: {
    55		#a + #b
    56		#a: int
    57		#b: int
    58	}
    59	a1: (sum & {_, #a:          1, #b: 3}) + 2
    60	a2: 2 + (sum & {_, #a:      1, #b: 3})
    61	a3: 2 + (2 + (sum & {_, #a: 1, #b: 3}))
    62}
    63
    64defCheck: {
    65	a: {
    66		#def: 1
    67	}
    68	b: a.#def
    69}
    70
    71optionalExists: {
    72	string | {
    73		value?: string
    74
    75		if value != _|_ {
    76			other: int
    77		}
    78	}
    79}
    80
    81optionalCheck: {
    82	thing: string | {
    83		value?: string
    84
    85		if value != _|_ {
    86			other: int
    87		}
    88	}
    89
    90	thing: {
    91		value: "some string"
    92		other: 3
    93	}
    94}
    95
    96hidden: {
    97	issue794: {
    98		_foo: "foo"
    99		[_foo]
   100	}
   101}
   102
   103-- issue2113.cue --
   104// In all these tests, embedded scalars should resolve without error.
   105merged: t1: p1: {
   106	#fn: { #in2: _, _ }
   107	#fn: { #in2: c1: string, #in2.c1 }
   108	x: #fn & {#in2: {c1: "V 1"}, _}
   109}
   110merged: t1: p2: {
   111	#fn: { #in2: c1: string, #in2.c1 }
   112	#fn: { #in2: _, _ }
   113	x: #fn & {#in2: {c1: "V 1"}, _}
   114}
   115merged: t1: p3: {
   116	x: #fn & {#in2: {c1: "V 1"}, _}
   117	#fn: { #in2: c1: string, #in2.c1 }
   118	#fn: { #in2: _, _ }
   119}
   120merged: t2: p1: {
   121	#fn: { #in2: {}, _ }
   122	#fn: { #in2: c1: string, #in2.c1 }
   123	x: #fn & {#in2: {c1: "V 1"}, _}
   124}
   125merged: t2: p2: {
   126	#fn: { #in2: c1: string, #in2.c1 }
   127	#fn: { #in2: {}, _ }
   128	x: #fn & {#in2: {c1: "V 1"}, _}
   129}
   130merged: t2: p3: {
   131	x: #fn & {#in2: {c1: "V 1"}, _}
   132	#fn: { #in2: c1: string, #in2.c1 }
   133	#fn: { #in2: {}, _ }
   134}
   135
   136-- issue2163.cue --
   137selfRefInEmbed: t1: {
   138	#Func: {
   139		#in: _
   140		_
   141	}
   142	#fn: #Func
   143	#fn: {
   144		#in: _
   145	
   146		(#Func & {
   147			_foo: #in
   148			"buzz"
   149		}) + "fiz"
   150	}
   151}
   152
   153-- out/eval/stats --
   154Leaks:  11
   155Freed:  121
   156Reused: 114
   157Allocs: 18
   158Retain: 57
   159
   160Unifications: 128
   161Conjuncts:    297
   162Disjuncts:    164
   163-- out/eval --
   164Errors:
   165listEmbed.b6: invalid list index 5 (out of bounds):
   166    ./in.cue:28:9
   167
   168Result:
   169(_|_){
   170  // [eval]
   171  intEmbed: (struct){
   172    a1: (int){ 2 }
   173    a2: (struct){
   174      v: (int){
   175        3
   176        #foo: (int){ 4 }
   177      }
   178      w: (int){
   179        3
   180        #foo: (int){ 4 }
   181      }
   182      x: (int){ 4 }
   183    }
   184    a3: (int){ 5 }
   185  }
   186  listEmbed: (_|_){
   187    // [eval]
   188    a1: (int){ 2 }
   189    b3: (#list){
   190      #foo: (int){ 1 }
   191      0: (int){ 1 }
   192      1: (int){ 2 }
   193    }
   194    b4: (#list){
   195      0: (int){ 1 }
   196      1: (int){ 2 }
   197      2: (int){ 1 }
   198      3: (int){ 2 }
   199    }
   200    b5: (int){ 2 }
   201    b6: (_|_){
   202      // [eval] listEmbed.b6: invalid list index 5 (out of bounds):
   203      //     ./in.cue:28:9
   204    }
   205    b7: (int){ 1 }
   206  }
   207  stringEmbed: (struct){
   208    s1: (string){
   209      "foo"
   210      #bar: (string){ "bar" }
   211    }
   212    s2: (#list){
   213      0: (string){
   214        "foo"
   215        #bar: (string){ "bar" }
   216      }
   217      1: (string){
   218        "bar"
   219        #baz: (int){ 4 }
   220      }
   221    }
   222    s3: (string){ "foo--bar" }
   223  }
   224  outPattern: (struct){
   225    sum: (struct){
   226      out: (_|_){
   227        // [incomplete] outPattern.sum.out: non-concrete value int in operand to +:
   228        //     ./in.cue:43:8
   229        //     ./in.cue:44:8
   230      }
   231      #a: (int){ int }
   232      #b: (int){ int }
   233    }
   234    used: (struct){
   235      out: (int){ 4 }
   236      #a: (int){ 1 }
   237      #b: (int){ 3 }
   238    }
   239  }
   240  arithmetic: (struct){
   241    sum: (_|_){
   242      // [incomplete] arithmetic.sum: non-concrete value int in operand to +:
   243      //     ./in.cue:52:3
   244      //     ./in.cue:53:7
   245      #a: (int){ int }
   246      #b: (int){ int }
   247    }
   248    a1: (int){ 6 }
   249    a2: (int){ 6 }
   250    a3: (int){ 8 }
   251  }
   252  defCheck: (struct){
   253    a: (struct){
   254      #def: (int){ 1 }
   255    }
   256    b: (int){ 1 }
   257  }
   258  optionalExists: ((string|struct)){ |((string){ string }, (struct){
   259      value?: (string){ string }
   260    }) }
   261  optionalCheck: (struct){
   262    thing: (struct){
   263      value: (string){ "some string" }
   264      other: (int){ 3 }
   265    }
   266  }
   267  hidden: (struct){
   268    issue794: (#list){
   269      _foo: (string){ "foo" }
   270      0: (string){ "foo" }
   271    }
   272  }
   273  merged: (struct){
   274    t1: (struct){
   275      p1: (struct){
   276        #fn: (string){
   277          string
   278          #in2: (#struct){
   279            c1: (string){ string }
   280          }
   281        }
   282        x: (string){
   283          "V 1"
   284          #in2: (#struct){
   285            c1: (string){ "V 1" }
   286          }
   287        }
   288      }
   289      p2: (struct){
   290        #fn: (string){
   291          string
   292          #in2: (#struct){
   293            c1: (string){ string }
   294          }
   295        }
   296        x: (string){
   297          "V 1"
   298          #in2: (#struct){
   299            c1: (string){ "V 1" }
   300          }
   301        }
   302      }
   303      p3: (struct){
   304        x: (string){
   305          "V 1"
   306          #in2: (#struct){
   307            c1: (string){ "V 1" }
   308          }
   309        }
   310        #fn: (string){
   311          string
   312          #in2: (#struct){
   313            c1: (string){ string }
   314          }
   315        }
   316      }
   317    }
   318    t2: (struct){
   319      p1: (struct){
   320        #fn: (string){
   321          string
   322          #in2: (#struct){
   323            c1: (string){ string }
   324          }
   325        }
   326        x: (string){
   327          "V 1"
   328          #in2: (#struct){
   329            c1: (string){ "V 1" }
   330          }
   331        }
   332      }
   333      p2: (struct){
   334        #fn: (string){
   335          string
   336          #in2: (#struct){
   337            c1: (string){ string }
   338          }
   339        }
   340        x: (string){
   341          "V 1"
   342          #in2: (#struct){
   343            c1: (string){ "V 1" }
   344          }
   345        }
   346      }
   347      p3: (struct){
   348        x: (string){
   349          "V 1"
   350          #in2: (#struct){
   351            c1: (string){ "V 1" }
   352          }
   353        }
   354        #fn: (string){
   355          string
   356          #in2: (#struct){
   357            c1: (string){ string }
   358          }
   359        }
   360      }
   361    }
   362  }
   363  selfRefInEmbed: (struct){
   364    t1: (struct){
   365      #Func: (_){
   366        _
   367        #in: (_){ _ }
   368      }
   369      #fn: (string){
   370        "buzzfiz"
   371        #in: (_){ _ }
   372      }
   373    }
   374  }
   375}
   376-- out/compile --
   377--- in.cue
   378{
   379  intEmbed: {
   380    a1: {
   381      2
   382    }
   383    a2: {
   384      v: {
   385        3
   386        #foo: (〈2;a2〉.v + 1)
   387      }
   388      w: 〈0;v〉
   389      x: 〈0;v〉.#foo
   390    }
   391    a3: (〈0;a1〉 + 〈0;a2〉.v)
   392  }
   393  listEmbed: {
   394    a1: {
   395      2
   396    }
   397    b3: {
   398      [
   399        1,
   400        2,
   401      ]
   402      #foo: 1
   403    }
   404    b4: (〈0;b3〉 + 〈0;b3〉)
   405    b5: 〈0;b3〉[1]
   406    b6: 〈0;b3〉[5]
   407    b7: 〈0;b4〉[〈0;a1〉]
   408  }
   409  stringEmbed: {
   410    s1: {
   411      "foo"
   412      #bar: "bar"
   413    }
   414    s2: [
   415      〈1;s1〉,
   416      {
   417        〈2;s1〉.#bar
   418        #baz: 4
   419      },
   420    ]
   421    s3: 〈import;strings〉.Join(〈0;s2〉, "--")
   422  }
   423  outPattern: {
   424    sum: {
   425      out: (〈0;#a〉 + 〈0;#b〉)
   426      #a: int
   427      #b: int
   428    }
   429    used: (〈0;sum〉 & {
   430      #a: 1
   431      #b: 3
   432    })
   433  }
   434  arithmetic: {
   435    sum: {
   436      (〈0;#a〉 + 〈0;#b〉)
   437      #a: int
   438      #b: int
   439    }
   440    a1: ((〈0;sum〉 & {
   441      _
   442      #a: 1
   443      #b: 3
   444    }) + 2)
   445    a2: (2 + (〈0;sum〉 & {
   446      _
   447      #a: 1
   448      #b: 3
   449    }))
   450    a3: (2 + (2 + (〈0;sum〉 & {
   451      _
   452      #a: 1
   453      #b: 3
   454    })))
   455  }
   456  defCheck: {
   457    a: {
   458      #def: 1
   459    }
   460    b: 〈0;a〉.#def
   461  }
   462  optionalExists: {
   463    (string|{
   464      value?: string
   465      if (〈0;value〉 != _|_(explicit error (_|_ literal) in source)) {
   466        other: int
   467      }
   468    })
   469  }
   470  optionalCheck: {
   471    thing: (string|{
   472      value?: string
   473      if (〈0;value〉 != _|_(explicit error (_|_ literal) in source)) {
   474        other: int
   475      }
   476    })
   477    thing: {
   478      value: "some string"
   479      other: 3
   480    }
   481  }
   482  hidden: {
   483    issue794: {
   484      _foo: "foo"
   485      [
   486        〈1;_foo〉,
   487      ]
   488    }
   489  }
   490}
   491--- issue2113.cue
   492{
   493  merged: {
   494    t1: {
   495      p1: {
   496        #fn: {
   497          #in2: _
   498          _
   499        }
   500        #fn: {
   501          #in2: {
   502            c1: string
   503          }
   504          〈0;#in2〉.c1
   505        }
   506        x: (〈0;#fn〉 & {
   507          #in2: {
   508            c1: "V 1"
   509          }
   510          _
   511        })
   512      }
   513    }
   514  }
   515  merged: {
   516    t1: {
   517      p2: {
   518        #fn: {
   519          #in2: {
   520            c1: string
   521          }
   522          〈0;#in2〉.c1
   523        }
   524        #fn: {
   525          #in2: _
   526          _
   527        }
   528        x: (〈0;#fn〉 & {
   529          #in2: {
   530            c1: "V 1"
   531          }
   532          _
   533        })
   534      }
   535    }
   536  }
   537  merged: {
   538    t1: {
   539      p3: {
   540        x: (〈0;#fn〉 & {
   541          #in2: {
   542            c1: "V 1"
   543          }
   544          _
   545        })
   546        #fn: {
   547          #in2: {
   548            c1: string
   549          }
   550          〈0;#in2〉.c1
   551        }
   552        #fn: {
   553          #in2: _
   554          _
   555        }
   556      }
   557    }
   558  }
   559  merged: {
   560    t2: {
   561      p1: {
   562        #fn: {
   563          #in2: {}
   564          _
   565        }
   566        #fn: {
   567          #in2: {
   568            c1: string
   569          }
   570          〈0;#in2〉.c1
   571        }
   572        x: (〈0;#fn〉 & {
   573          #in2: {
   574            c1: "V 1"
   575          }
   576          _
   577        })
   578      }
   579    }
   580  }
   581  merged: {
   582    t2: {
   583      p2: {
   584        #fn: {
   585          #in2: {
   586            c1: string
   587          }
   588          〈0;#in2〉.c1
   589        }
   590        #fn: {
   591          #in2: {}
   592          _
   593        }
   594        x: (〈0;#fn〉 & {
   595          #in2: {
   596            c1: "V 1"
   597          }
   598          _
   599        })
   600      }
   601    }
   602  }
   603  merged: {
   604    t2: {
   605      p3: {
   606        x: (〈0;#fn〉 & {
   607          #in2: {
   608            c1: "V 1"
   609          }
   610          _
   611        })
   612        #fn: {
   613          #in2: {
   614            c1: string
   615          }
   616          〈0;#in2〉.c1
   617        }
   618        #fn: {
   619          #in2: {}
   620          _
   621        }
   622      }
   623    }
   624  }
   625}
   626--- issue2163.cue
   627{
   628  selfRefInEmbed: {
   629    t1: {
   630      #Func: {
   631        #in: _
   632        _
   633      }
   634      #fn: 〈0;#Func〉
   635      #fn: {
   636        #in: _
   637        ((〈1;#Func〉 & {
   638          _foo: 〈1;#in〉
   639          "buzz"
   640        }) + "fiz")
   641      }
   642    }
   643  }
   644}

View as plain text