// Copyright 2018 The CUE Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cue

import (
	"fmt"
	"math/big"
	"strconv"
	"strings"
	"testing"
)

func TestBuiltins(t *testing.T) {
	test := func(pkg, expr string) []*bimport {
		return []*bimport{&bimport{"",
			[]string{fmt.Sprintf("import %q\n(%s)", pkg, expr)},
		}}
	}
	testExpr := func(expr string) []*bimport {
		return []*bimport{&bimport{"",
			[]string{fmt.Sprintf("(%s)", expr)},
		}}
	}
	hexToDec := func(s string) string {
		var x big.Int
		x.SetString(s, 16)
		return x.String()
	}
	testCases := []struct {
		instances []*bimport
		emit      string
	}{{
		test("math", "math.Pi"),
		`3.14159265358979323846264338327950288419716939937510582097494459`,
	}, {
		test("math", "math.Floor(math.Pi)"),
		`3`,
	}, {
		test("math", "math.Pi(3)"),
		`_|_(cannot call non-function Pi (type float))`,
	}, {
		test("math", "math.Floor(3, 5)"),
		`_|_(too many arguments in call to math.Floor (have 2, want 1))`,
	}, {
		test("math", `math.Floor("foo")`),
		`_|_(cannot use "foo" (type string) as number in argument 1 to math.Floor)`,
	}, {
		test("crypto/sha256", `sha256.Sum256("hash me")`),
		`'\xeb \x1a\xf5\xaa\xf0\xd6\x06)\xd3Ҧ\x1eFl\xfc\x0f\xed\xb5\x17\xad\xd81\xec\xacR5\xe1کc\xd6'`,
	}, {
		test("crypto/md5", `len(md5.Sum("hash me"))`),
		`16`,
	}, {
		test("crypto/sha1", `len(sha1.Sum("hash me"))`),
		`20`,
	}, {
		test("crypto/sha256", `len(sha256.Sum256("hash me"))`),
		`32`,
	}, {
		test("crypto/sha256", `len(sha256.Sum224("hash me"))`),
		`28`,
	}, {
		test("crypto/sha512", `len(sha512.Sum512("hash me"))`),
		`64`,
	}, {
		test("crypto/sha512", `len(sha512.Sum384("hash me"))`),
		`48`,
	}, {
		test("crypto/sha512", `len(sha512.Sum512_224("hash me"))`),
		`28`,
	}, {
		test("crypto/sha512", `len(sha512.Sum512_256("hash me"))`),
		`32`,
	}, {
		test("encoding/base64", `base64.Encode(null, "foo")`),
		`"Zm9v"`,
	}, {
		test("encoding/base64", `base64.Decode(null, base64.Encode(null, "foo"))`),
		`'foo'`,
	}, {
		test("encoding/base64", `base64.Decode(null, "foo")`),
		`_|_(error in call to encoding/base64.Decode: illegal base64 data at input byte 0)`,
	}, {
		test("encoding/base64", `base64.Decode({}, "foo")`),
		`_|_(error in call to encoding/base64.Decode: base64: unsupported encoding: cannot use value {} (type struct) as null)`,
	}, {
		test("encoding/hex", `hex.Encode("foo")`),
		`"666f6f"`,
	}, {
		test("encoding/hex", `hex.Decode(hex.Encode("foo"))`),
		`'foo'`,
	}, {
		test("encoding/hex", `hex.Decode("foo")`),
		`_|_(error in call to encoding/hex.Decode: encoding/hex: invalid byte: U+006F 'o')`,
	}, {
		test("encoding/hex", `hex.Dump('foo')`),
		`"00000000  66 6f 6f                                          |foo|\n"`,
	}, {
		test("encoding/json", `json.Validate("{\"a\":10}", {b:string})`),
		`true`,
	}, {
		test("encoding/json", `json.Validate("{\"a\":10}", {a:<3})`),
		`_|_(error in call to encoding/json.Validate: invalid value 10 (out of bound <3))`,
	}, {
		test("encoding/yaml", `yaml.Validate("a: 2\n---\na: 4", {a:<3})`),
		`_|_(error in call to encoding/yaml.Validate: invalid value 4 (out of bound <3))`,
	}, {
		test("encoding/yaml", `yaml.Validate("a: 2\n---\na: 4", {a:<5})`),
		`true`,
	}, {
		test("encoding/yaml", `yaml.Validate("a: 2\n", {a:<5, b:int})`),
		`_|_(error in call to encoding/yaml.Validate: value not an instance)`,
	}, {
		test("encoding/yaml", `yaml.ValidatePartial("a: 2\n---\na: 4", {a:<3})`),
		`_|_(error in call to encoding/yaml.ValidatePartial: invalid value 4 (out of bound <3))`,
	}, {
		test("encoding/yaml", `yaml.ValidatePartial("a: 2\n---\na: 4", {a:<5})`),
		`true`,
	}, {
		test("encoding/yaml", `yaml.ValidatePartial("a: 2\n", {a:<5, b:int})`),
		`true`,
	}, {
		test("strconv", `strconv.FormatUint(64, 16)`),
		`"40"`,
	}, {
		// Find a better alternative, as this call should go.
		test("strconv", `strconv.FormatFloat(3.02, 300, 4, 64)`),
		`_|_(int 300 overflows byte in argument 1 in call to strconv.FormatFloat)`,
	}, {
		// Find a better alternative, as this call should go.
		test("strconv", `strconv.FormatFloat(3.02, -1, 4, 64)`),
		`_|_(cannot use -1 (type int) as byte in argument 1 to strconv.FormatFloat)`,
	}, {
		// Find a better alternative, as this call should go.
		test("strconv", `strconv.FormatFloat(3.02, 1.0, 4, 64)`),
		`_|_(cannot use 1.0 (type float) as int in argument 2 to strconv.FormatFloat)`,
	}, {
		test("list", `list.Avg([1, 2, 3, 4])`),
		`2.5`,
	}, {
		test("list", `list.Avg([])`),
		`_|_(error in call to list.Avg: empty list)`,
	}, {
		test("list", `list.Avg("foo")`),
		`_|_(cannot use "foo" (type string) as list in argument 1 to list.Avg)`,
	}, {
		test("list", `list.Drop([1, 2, 3, 4], 0)`),
		`[1,2,3,4]`,
	}, {
		test("list", `list.Drop([1, 2, 3, 4], 2)`),
		`[3,4]`,
	}, {
		test("list", `list.Drop([1, 2, 3, 4], 10)`),
		`[]`,
	}, {
		test("list", `list.Drop([1, 2, 3, 4], -1)`),
		`_|_(error in call to list.Drop: negative index)`,
	}, {
		test("list", `list.FlattenN([1, [[2, 3], []], [4]], -1)`),
		`[1,2,3,4]`,
	}, {
		test("list", `list.FlattenN([1, [[2, 3], []], [4]], 0)`),
		`[1,[[2,3],[]],[4]]`,
	}, {
		test("list", `list.FlattenN([1, [[2, 3], []], [4]], 1)`),
		`[1,[2,3],[],4]`,
	}, {
		test("list", `list.FlattenN([1, [[2, 3], []], [4]], 2)`),
		`[1,2,3,4]`,
	}, {
		test("list", `list.FlattenN("foo", 1)`),
		`_|_(error in call to list.FlattenN: cannot use value "foo" (type string) as list)`,
	}, {
		test("list", `list.FlattenN([], "foo")`),
		`_|_(cannot use "foo" (type string) as int in argument 2 to list.FlattenN)`,
	}, {
		test("list", `list.Max([1, 2, 3, 4])`),
		`4`,
	}, {
		test("list", `list.Max([])`),
		`_|_(error in call to list.Max: empty list)`,
	}, {
		test("list", `list.Max("foo")`),
		`_|_(cannot use "foo" (type string) as list in argument 1 to list.Max)`,
	}, {
		test("list", `list.Min([1, 2, 3, 4])`),
		`1`,
	}, {
		test("list", `list.Min([])`),
		`_|_(error in call to list.Min: empty list)`,
	}, {
		test("list", `list.Min("foo")`),
		`_|_(cannot use "foo" (type string) as list in argument 1 to list.Min)`,
	}, {
		test("list", `list.Product([1, 2, 3, 4])`),
		`24`,
	}, {
		test("list", `list.Product([])`),
		`1`,
	}, {
		test("list", `list.Product("foo")`),
		`_|_(cannot use "foo" (type string) as list in argument 1 to list.Product)`,
	}, {
		test("list", `list.Range(0, 5, 0)`),
		`_|_(error in call to list.Range: step must be non zero)`,
	}, {
		test("list", `list.Range(5, 0, 1)`),
		`_|_(error in call to list.Range: end must be greater than start when step is positive)`,
	}, {
		test("list", `list.Range(0, 5, -1)`),
		`_|_(error in call to list.Range: end must be less than start when step is negative)`,
	}, {
		test("list", `list.Range(0, 5, 1)`),
		`[0,1,2,3,4]`,
	}, {
		test("list", `list.Range(0, 1, 1)`),
		`[0]`,
	}, {
		test("list", `list.Range(0, 5, 2)`),
		`[0,2,4]`,
	}, {
		test("list", `list.Range(5, 0, -1)`),
		`[5,4,3,2,1]`,
	}, {
		test("list", `list.Range(0, 5, 0.5)`),
		`[0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5]`,
	}, {
		test("list", `list.Slice([1, 2, 3, 4], 1, 3)`),
		`[2,3]`,
	}, {
		test("list", `list.Slice([1, 2, 3, 4], -1, 3)`),
		`_|_(error in call to list.Slice: negative index)`,
	}, {
		test("list", `list.Slice([1, 2, 3, 4], 3, 1)`),
		`_|_(error in call to list.Slice: invalid index: 3 > 1)`,
	}, {
		test("list", `list.Slice([1, 2, 3, 4], 5, 5)`),
		`_|_(error in call to list.Slice: slice bounds out of range)`,
	}, {
		test("list", `list.Slice([1, 2, 3, 4], 1, 5)`),
		`_|_(error in call to list.Slice: slice bounds out of range)`,
	}, {
		test("list", `list.Sort([], list.Ascending)`),
		`[]`,
	}, {
		test("list", `list.Sort([2, 3, 1, 4], {x:_, y:_, less: (x<y)})`),
		`[1,2,3,4]`,
	}, {
		test("list", `list.SortStable([{a:2,v:1}, {a:1,v:2}, {a:1,v:3}], {
			x:_,
			y:_,
			less: (x.a < y.a)
		})`),
		`[{a: 1, v: 2},{a: 1, v: 3},{a: 2, v: 1}]`,
	}, {
		test("list", `list.Sort([{a:1}, {b:2}], list.Ascending)`),
		`_|_(error in call to list.Sort: conflicting values close(T, close(T)) and {b: 2} (mismatched types number|string and struct))`,
	}, {
		test("list", `list.SortStrings(["b", "a"])`),
		`["a","b"]`,
	}, {
		test("list", `list.SortStrings([1, 2])`),
		`_|_(invalid list element 0 in argument 0 to list.SortStrings: cannot use value 1 (type int) as string)`,
	}, {
		test("list", `list.Sum([1, 2, 3, 4])`),
		`10`,
	}, {
		test("list", `list.Sum([])`),
		`0`,
	}, {
		test("list", `list.Sum("foo")`),
		`_|_(cannot use "foo" (type string) as list in argument 1 to list.Sum)`,
	}, {
		test("list", `list.Take([1, 2, 3, 4], 0)`),
		`[]`,
	}, {
		test("list", `list.Take([1, 2, 3, 4], 2)`),
		`[1,2]`,
	}, {
		test("list", `list.Take([1, 2, 3, 4], 10)`),
		`[1,2,3,4]`,
	}, {
		test("list", `list.Take([1, 2, 3, 4], -1)`),
		`_|_(error in call to list.Take: negative index)`,
	}, {
		test("list", `list.MinItems([1, 2, 3, 4], 2)`),
		`true`,
	}, {
		test("list", `list.MinItems([1, 2, 3, 4], 5)`),
		`false`,
	}, {
		test("list", `list.MaxItems([1, 2, 3, 4], 5)`),
		`true`,
	}, {
		test("list", `list.MaxItems([1, 2, 3, 4], 2)`),
		`false`,
	}, {
		// Panics
		test("math", `math.Jacobi(1000, 2000)`),
		`_|_(error in call to math.Jacobi: big: invalid 2nd argument to Int.Jacobi: need odd integer but got 2000)`,
	}, {
		test("math", `math.Jacobi(1000, 201)`),
		`1`,
	}, {
		test("math", `math.Asin(2.0e400)`),
		`_|_(cannot use 2.0e+400 (type float) as float64 in argument 0 to math.Asin: value was rounded up)`,
	}, {
		test("math", `math.MultipleOf(4, 2)`), `true`,
	}, {
		test("math", `math.MultipleOf(5, 2)`), `false`,
	}, {
		test("math", `math.MultipleOf(5, 0)`),
		`_|_(error in call to math.MultipleOf: division by zero)`,
	}, {
		test("math", `math.MultipleOf(100, 1.00001)`), `false`,
	}, {
		test("math", `math.MultipleOf(1, 1)`), `true`,
	}, {
		test("math", `math.MultipleOf(5, 2.5)`), `true`,
	}, {
		test("math", `math.MultipleOf(100e100, 10)`), `true`,
	}, {
		test("encoding/csv", `csv.Decode("1,2,3\n4,5,6")`),
		`[["1","2","3"],["4","5","6"]]`,
	}, {
		test("regexp", `regexp.Find(#"f\w\w"#, "afoot")`),
		`"foo"`,
	}, {
		test("regexp", `regexp.Find(#"f\w\w"#, "bar")`),
		`_|_(error in call to regexp.Find: no match)`,
	}, {
		test("regexp", `regexp.FindAll(#"f\w\w"#, "afoot afloat from", 2)`),
		`["foo","flo"]`,
	}, {
		test("regexp", `regexp.FindAll(#"f\w\w"#, "afoot afloat from", 2)`),
		`["foo","flo"]`,
	}, {
		test("regexp", `regexp.FindAll(#"f\w\w"#, "bla bla", -1)`),
		`_|_(error in call to regexp.FindAll: no match)`,
	}, {
		test("regexp", `regexp.FindSubmatch(#"f(\w)(\w)"#, "afloat afoot from")`),
		`["flo","l","o"]`,
	}, {
		test("regexp", `regexp.FindAllSubmatch(#"f(\w)(\w)"#, "afloat afoot from", -1)`),
		`[["flo","l","o"],["foo","o","o"],["fro","r","o"]]`,
	}, {
		test("regexp", `regexp.FindAllSubmatch(#"f(\w)(\w)"#, "aglom", -1)`),
		`_|_(error in call to regexp.FindAllSubmatch: no match)`,
	}, {
		test("regexp", `regexp.FindNamedSubmatch(#"f(?P<A>\w)(?P<B>\w)"#, "afloat afoot from")`),
		`{A: "l", B: "o"}`,
	}, {
		test("regexp", `regexp.FindAllNamedSubmatch(#"f(?P<A>\w)(?P<B>\w)"#, "afloat afoot from", -1)`),
		`[{A: "l", B: "o"},{A: "o", B: "o"},{A: "r", B: "o"}]`,
	}, {
		test("regexp", `regexp.FindAllNamedSubmatch(#"f(?P<A>optional)?"#, "fbla", -1)`),
		`[{A: ""}]`,
	}, {
		test("regexp", `regexp.FindAllNamedSubmatch(#"f(?P<A>\w)(?P<B>\w)"#, "aglom", -1)`),
		`_|_(error in call to regexp.FindAllNamedSubmatch: no match)`,
	}, {
		test("regexp", `regexp.Valid & "valid"`),
		`"valid"`,
	}, {
		test("regexp", `regexp.Valid & "invalid)"`),
		"_|_(error in call to regexp.Valid: error parsing regexp: unexpected ): `invalid)`)",
	}, {
		test("strconv", `strconv.FormatBool(true)`),
		`"true"`,
	}, {
		test("strings", `strings.Join(["Hello", "World!"], " ")`),
		`"Hello World!"`,
	}, {
		test("strings", `strings.Join([1, 2], " ")`),
		`_|_(invalid list element 0 in argument 0 to strings.Join: cannot use value 1 (type int) as string)`,
	}, {
		test("strings", `strings.ByteAt("a", 0)`),
		strconv.Itoa('a'),
	}, {
		test("strings", `strings.ByteSlice("Hello", 2, 5)`),
		`'llo'`,
	}, {
		test("strings", `strings.Runes("Café")`),
		strings.Replace(fmt.Sprint([]rune{'C', 'a', 'f', 'é'}), " ", ",", -1),
	}, {
		test("math/bits", `bits.Or(0x8, 0x1)`),
		`9`,
	}, {
		testExpr(`len({})`),
		`0`,
	}, {
		testExpr(`len({a: 1, b: 2, <foo>: int, _c: 3})`),
		`2`,
	}, {
		testExpr(`len([1, 2, 3])`),
		`3`,
	}, {
		testExpr(`len("foo")`),
		`3`,
	}, {
		testExpr(`len('f\x20\x20')`),
		`3`,
	}, {
		testExpr(`and([string, "foo"])`),
		`"foo"`,
	}, {
		testExpr(`and([string, =~"fo"]) & "foo"`),
		`"foo"`,
	}, {
		testExpr(`and([])`),
		`{}`, // _ & top scope
	}, {
		testExpr(`or([1, 2, 3]) & 2`),
		`2`,
	}, {
		testExpr(`or([])`),
		`_|_(empty list in call to or)`,
	}, {
		test("encoding/csv", `csv.Encode([[1,2,3],[4,5],[7,8,9]])`),
		`"1,2,3\n4,5\n7,8,9\n"`,
	}, {
		test("encoding/csv", `csv.Encode([["a", "b"], ["c"]])`),
		`"a,b\nc\n"`,
	}, {
		test("encoding/json", `json.Valid("1")`),
		`true`,
	}, {
		test("encoding/json", `json.Compact("[1, 2]")`),
		`"[1,2]"`,
	}, {
		test("encoding/json", `json.Indent(#"{"a": 1, "b": 2}"#, "", "  ")`),
		`"{\n  \"a\": 1,\n  \"b\": 2\n}"`,
	}, {
		test("encoding/json", `json.Unmarshal("1")`),
		`1`,
	}, {
		test("encoding/json", `json.MarshalStream([{a: 1}, {b: 2}])`),
		`"{\"a\":1}\n{\"b\":2}\n"`,
	}, {
		test("encoding/yaml", `yaml.MarshalStream([{a: 1}, {b: 2}])`),
		`"a: 1\n---\nb: 2\n"`,
	}, {
		test("net", `net.FQDN & "foo.bar."`),
		`"foo.bar."`,
	}, {
		test("net", `net.FQDN("foo.bararararararararararararararararararararararararararararararararara")`),
		`false`,
	}, {
		test("net", `net.SplitHostPort("[::%lo0]:80")`),
		`["::%lo0","80"]`,
	}, {
		test("net", `net.JoinHostPort("example.com", "80")`),
		`"example.com:80"`,
	}, {
		test("net", `net.JoinHostPort("2001:db8::1", 80)`),
		`"[2001:db8::1]:80"`,
	}, {
		test("net", `net.JoinHostPort([192,30,4,2], 80)`),
		`"192.30.4.2:80"`,
	}, {
		test("net", `net.JoinHostPort([192,30,4], 80)`),
		`_|_(error in call to net.JoinHostPort: invalid host [192,30,4])`,
	}, {
		test("net", `net.IP("23.23.23.23")`),
		`true`,
	}, {
		test("net", `net.IPv4 & "23.23.23.2333"`),
		`_|_(invalid value "23.23.23.2333" (does not satisfy net.IPv4()))`,
	}, {
		test("net", `net.IP("23.23.23.23")`),
		`true`,
	}, {
		test("net", `net.IP("2001:db8::1")`),
		`true`,
	}, {
		test("net", `net.IPv4("2001:db8::1")`),
		`false`,
	}, {
		test("net", `net.IPv4() & "ff02::1:3"`),
		`_|_(invalid value "ff02::1:3" (does not satisfy net.IPv4()))`,
	}, {
		test("net", `net.LoopbackIP([127, 0, 0, 1])`),
		`true`,
	}, {
		test("net", `net.LoopbackIP("127.0.0.1")`),
		`true`,
	}, {
		test("net", `net.ToIP4("127.0.0.1")`),
		`[127,0,0,1]`,
	}, {
		test("net", `net.ToIP16("127.0.0.1")`),
		`[0,0,0,0,0,0,0,0,0,0,255,255,127,0,0,1]`,
	}, {
		test("strings", `strings.ToCamel("AlphaBeta")`),
		`"alphaBeta"`,
	}, {
		test("strings", `strings.ToTitle("alpha")`),
		`"Alpha"`,
	}, {
		test("strings", `strings.MaxRunes(3) & "foo"`),
		`"foo"`,
	}, {
		test("strings", `strings.MaxRunes(3) & "quux"`),
		`_|_(invalid value "quux" (does not satisfy strings.MaxRunes(3)))`,
	}, {
		test("strings", `strings.MinRunes(1) & "e"`),
		`"e"`,
	}, {
		test("strings", `strings.MaxRunes(0) & "e"`),
		`_|_(invalid value "e" (does not satisfy strings.MaxRunes(0)))`,
	}, {
		test("strings", `strings.MaxRunes(0) & ""`),
		`""`,
	}, {
		test("strings", `strings.MinRunes(3) & "hello"`),
		`"hello"`,
	}, {
		test("strings", `strings.MaxRunes(10) & "hello"`),
		`"hello"`,
	}, {
		test("strings", `strings.MaxRunes(3) & "hello"`),
		`_|_(invalid value "hello" (does not satisfy strings.MaxRunes(3)))`,
	}, {
		test("strings", `strings.MinRunes(10) & "hello"`),
		`_|_(invalid value "hello" (does not satisfy strings.MinRunes(10)))`,
	}, {
		test("struct", `struct.MinFields(0) & ""`),
		`_|_(conflicting values MinFields (0) and "" (mismatched types struct and string))`,
	}, {
		test("struct", `struct.MinFields(0) & {a: 1}`),
		`{a: 1}`,
	}, {
		test("struct", `struct.MinFields(2) & {a: 1}`),
		`_|_(invalid value {a: 1} (does not satisfy struct.MinFields(2)))`,
	}, {
		test("struct", `struct.MaxFields(0) & {a: 1}`),
		`_|_(invalid value {a: 1} (does not satisfy struct.MaxFields(0)))`,
	}, {
		test("struct", `struct.MaxFields(2) & {a: 1}`),
		`{a: 1}`,
	}, {
		test("math", `math.Pow(8, 4)`), `4096`,
	}, {
		test("math", `math.Pow10(4)`), `10000`,
	}, {
		test("math", `math.Signbit(-4)`), `true`,
	}, {
		test("math", `math.Round(2.5)`), `3`,
	}, {
		test("math", `math.Round(-2.5)`), `-3`,
	}, {
		test("math", `math.RoundToEven(2.5)`), `2`,
	}, {
		test("math", `math.RoundToEven(-2.5)`), `-2`,
	}, {
		test("math", `math.Abs(2.5)`), `2.5`,
	}, {
		test("math", `math.Abs(-2.2)`), `2.2`,
	}, {
		test("math", `math.Cbrt(2)`), `1.25992104989487316476721`,
	}, {
		test("math", `math.Copysign(5, -2.2)`), `-5`,
	}, {
		test("math", `math.Exp(3)`), `20.0855369231876677409285`,
	}, {
		test("math", `math.Exp2(3.5)`), `11.3137084989847603904135`,
	}, {
		test("math", `math.Log(4)`), `1.38629436111989061883446`,
	}, {
		test("math", `math.Log10(4)`), `0.602059991327962390427478`,
	}, {
		test("math", `math.Log2(5)`),
		`2.32192809488736234787032`,
	}, {
		test("math", `math.Dim(3, 2.5)`), `0.5`,
	}, {
		test("math", `math.Dim(5, 7.2)`), `0`,
	}, {
		test("math", `math.Ceil(2.5)`), `3`,
	}, {
		test("math", `math.Ceil(-2.2)`), `-2`,
	}, {
		test("math", `math.Floor(2.9)`), `2`,
	}, {
		test("math", `math.Floor(-2.2)`), `-3`,
	}, {
		test("math", `math.Trunc(2.5)`), `2`,
	}, {
		test("math", `math.Trunc(-2.9)`), `-2`,
	}, {
		test("math/bits", `bits.Lsh(0x8, 4)`), `128`,
	}, {
		test("math/bits", `bits.Rsh(0x100, 4)`), `16`,
	}, {
		test("math/bits", `bits.At(0x100, 8)`), `1`,
	}, {
		test("math/bits", `bits.At(0x100, 9)`), `0`,
	}, {
		test("math/bits", `bits.Set(0x100, 7, 1)`), `384`,
	}, {
		test("math/bits", `bits.Set(0x100, 8, 0)`), `0`,
	}, {
		test("math/bits", `bits.And(0x10000000000000F0E, 0xF0F7)`), `6`,
	}, {
		test("math/bits", `bits.Or(0x100000000000000F0, 0x0F)`),
		hexToDec("100000000000000FF"),
	}, {
		test("math/bits", `bits.Xor(0x10000000000000F0F, 0xFF0)`),
		hexToDec("100000000000000FF"),
	}, {
		test("math/bits", `bits.Xor(0xFF0, 0x10000000000000F0F)`),
		hexToDec("100000000000000FF"),
	}, {
		test("math/bits", `bits.Clear(0xF, 0x100000000000008)`), `7`,
	}, {
		test("math/bits", `bits.Clear(0x1000000000000000008, 0xF)`),
		hexToDec("1000000000000000000"),
	}, {
		test("text/tabwriter", `tabwriter.Write("""
			a\tb\tc
			aaa\tbb\tvv
			""")`),
		`"a   b  c\naaa bb vv"`,
	}, {
		test("text/tabwriter", `tabwriter.Write([
				"a\tb\tc",
				"aaa\tbb\tvv"])`),
		`"a   b  c\naaa bb vv\n"`,
	}, {
		test("text/template", `template.Execute("{{.}}-{{.}}", "foo")`),
		`"foo-foo"`,
	}, {
		test("time", `time.Time & "1937-01-01T12:00:27.87+00:20"`),
		`"1937-01-01T12:00:27.87+00:20"`,
	}, {
		test("time", `time.Time & "no time"`),
		`_|_(error in call to time.Time: invalid time "no time")`,
	}, {
		test("time", `time.Unix(1500000000, 123456)`),
		`"2017-07-14T02:40:00.000123456Z"`,
	}}
	for _, tc := range testCases {
		t.Run("", func(t *testing.T) {
			insts := Build(makeInstances(tc.instances))
			if err := insts[0].Err; err != nil {
				t.Fatal(err)
			}
			got := strings.TrimSpace(fmt.Sprintf("%s\n", insts[0].Value()))
			if got != tc.emit {
				t.Errorf("\n got: %s\nwant: %s", got, tc.emit)
			}
		})
	}
}
