/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/typeparam/ifaceconv.go
83 строки
2 KB
Matthew Dempsky
all: avoid use of cmd/compile -G flag in tests
01 мар 2022, 22:45
01 мар 2022, 22:45
e24977d
Код
Авторство
О чём код?
// run // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test that we can convert type parameters to both empty // and nonempty interfaces, and named and nonnamed versions // thereof. package main import "fmt" type E interface{} func f[T any](x T) interface{} { var i interface{} = x return i } func fs[T any](x T) interface{} { y := []T{x} var i interface{} = y return i } func g[T any](x T) E { var i E = x return i } type C interface { foo() int } type myInt int func (x myInt) foo() int { return int(x + 1) } func h[T C](x T) interface{ foo() int } { var i interface{ foo() int } = x return i } func i[T C](x T) C { var i C = x // conversion in assignment return i } func j[T C](t T) C { return C(t) // explicit conversion } func js[T any](x T) interface{} { y := []T{x} return interface{}(y) } func main() { if got, want := f[int](7), 7; got != want { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := fs[int](7), []int{7}; got.([]int)[0] != want[0] { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := g[int](7), 7; got != want { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := h[myInt](7).foo(), 8; got != want { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := i[myInt](7).foo(), 8; got != want { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := j[myInt](7).foo(), 8; got != want { panic(fmt.Sprintf("got %d want %d", got, want)) } if got, want := js[int](7), []int{7}; got.([]int)[0] != want[0] { panic(fmt.Sprintf("got %d want %d", got, want)) } }