github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/syntax/testdata/smoketest.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // This file contains basic generic code snippets.
     6  
     7  package p
     8  
     9  // type parameter lists
    10  type B[P any] struct{}
    11  type _[P interface{}] struct{}
    12  type _[P B] struct{}
    13  type _[P B[P]] struct{}
    14  
    15  type _[A, B, C any] struct{}
    16  type _[A, B, C B] struct{}
    17  type _[A, B, C B[A, B, C]] struct{}
    18  type _[A1, A2 B1, A3 B2, A4, A5, A6 B3] struct{}
    19  
    20  type _[A interface{}] struct{}
    21  type _[A, B interface{ m() }] struct{}
    22  
    23  type _[A, B, C any] struct{}
    24  
    25  // in functions
    26  func _[P any]()
    27  func _[P interface{}]()
    28  func _[P B]()
    29  func _[P B[P]]()
    30  
    31  // type instantiations
    32  type _ T[int]
    33  
    34  // in expressions
    35  var _ = T[int]{}
    36  
    37  // in embedded types
    38  type _ struct{ T[int] }
    39  
    40  // interfaces
    41  type _ interface {
    42  	m()
    43  	~int
    44  }
    45  
    46  type _ interface {
    47  	~int | ~float | ~string
    48  	~complex128
    49  	underlying(underlying underlying) underlying
    50  }
    51  
    52  type _ interface {
    53  	T
    54  	T[int]
    55  }
    56  
    57  // tricky cases
    58  func _(T[P], T[P1, P2])
    59  func _(a [N]T)
    60  
    61  type _ struct {
    62  	T[P]
    63  	T[P1, P2]
    64  	f[N]
    65  }
    66  type _ interface {
    67  	m()
    68  
    69  	// instantiated types
    70  	T[ /* ERROR empty type argument list */ ]
    71  	T[P]
    72  	T[P1, P2]
    73  }