MCPcopy Create free account
hub / github.com/despiteallobjections/amigo / TestPredicatesInfo

Function TestPredicatesInfo

types/api_test.go:940–1026  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

938}
939
940func TestPredicatesInfo(t *testing.T) {
941 testenv.MustHaveGoBuild(t)
942
943 var tests = []struct {
944 src string
945 expr string
946 pred string
947 }{
948 // void
949 {`package n0; func f() { f() }`, `f()`, `void`},
950
951 // types
952 {`package t0; type _ int`, `int`, `type`},
953 {`package t1; type _ []int`, `[]int`, `type`},
954 {`package t2; type _ func()`, `func()`, `type`},
955 {`package t3; type _ func(int)`, `int`, `type`},
956 {`package t3; type _ func(...int)`, `...int`, `type`},
957
958 // built-ins
959 {`package b0; var _ = len("")`, `len`, `builtin`},
960 {`package b1; var _ = (len)("")`, `(len)`, `builtin`},
961
962 // constants
963 {`package c0; var _ = 42`, `42`, `const`},
964 {`package c1; var _ = "foo" + "bar"`, `"foo" + "bar"`, `const`},
965 {`package c2; const (i = 1i; _ = i)`, `i`, `const`},
966
967 // values
968 {`package v0; var (a, b int; _ = a + b)`, `a + b`, `value`},
969 {`package v1; var _ = &[]int{1}`, `[]int{…}`, `value`},
970 {`package v2; var _ = func(){}`, `func() {}`, `value`},
971 {`package v4; func f() { _ = f }`, `f`, `value`},
972 {`package v3; var _ *int = nil`, `nil`, `value, nil`},
973 {`package v3; var _ *int = (nil)`, `(nil)`, `value, nil`},
974
975 // addressable (and thus assignable) operands
976 {`package a0; var (x int; _ = x)`, `x`, `value, addressable, assignable`},
977 {`package a1; var (p *int; _ = *p)`, `*p`, `value, addressable, assignable`},
978 {`package a2; var (s []int; _ = s[0])`, `s[0]`, `value, addressable, assignable`},
979 {`package a3; var (s struct{f int}; _ = s.f)`, `s.f`, `value, addressable, assignable`},
980 {`package a4; var (a [10]int; _ = a[0])`, `a[0]`, `value, addressable, assignable`},
981 {`package a5; func _(x int) { _ = x }`, `x`, `value, addressable, assignable`},
982 {`package a6; func _()(x int) { _ = x; return }`, `x`, `value, addressable, assignable`},
983 {`package a7; type T int; func (x T) _() { _ = x }`, `x`, `value, addressable, assignable`},
984 // composite literals are not addressable
985
986 // assignable but not addressable values
987 {`package s0; var (m map[int]int; _ = m[0])`, `m[0]`, `value, assignable, hasOk`},
988 {`package s1; var (m map[int]int; _, _ = m[0])`, `m[0]`, `value, assignable, hasOk`},
989
990 // hasOk expressions
991 {`package k0; var (ch chan int; _ = <-ch)`, `<-ch`, `value, hasOk`},
992 {`package k1; var (ch chan int; _, _ = <-ch)`, `<-ch`, `value, hasOk`},
993
994 // missing entries
995 // - package names are collected in the Uses map
996 // - identifiers being declared are collected in the Defs map
997 {`package m0; import "os"; func _() { _ = os.Stdout }`, `os`, `<missing>`},

Callers

nothing calls this directly

Calls 4

MustHaveGoBuildFunction · 0.92
mustTypecheckFunction · 0.85
NodeStringFunction · 0.85
predStringFunction · 0.85

Tested by

no test coverage detected