mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
test: add new test case for 51219 that triggers the types2 issue
The existing test for 51219 didn't actually trigger the types2 issue - I hadn't been able to minimize the test case yet properly. This new test case issue51219b.go now does trigger the types2 issue (it's only slightly different). Updates #51219 Change-Id: Iaba8144b4702ff4fefec86c899b8acef127b10dc Reviewed-on: https://go-review.googlesource.com/c/go/+/387814 Trust: Dan Scales <danscales@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
a064a4f29a
commit
57dda9795d
@ -18,42 +18,3 @@ type IConstraint interface {
|
|||||||
|
|
||||||
type I[T IConstraint] struct {
|
type I[T IConstraint] struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The following types form an even more complex recursion (through two type
|
|
||||||
// constraints), and model the actual types in the issue (#51219) more closely.
|
|
||||||
// However, they don't reveal any new issue. But it seems useful to leave this
|
|
||||||
// complex set of types in a test in case it might be broken by future changes.
|
|
||||||
|
|
||||||
type Message struct {
|
|
||||||
Interaction *Interaction[JsonRaw] `json:"interaction,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ResolvedDataConstraint interface {
|
|
||||||
User | Message
|
|
||||||
}
|
|
||||||
|
|
||||||
type Snowflake uint64
|
|
||||||
|
|
||||||
type ResolvedData[T ResolvedDataConstraint] map[Snowflake]T
|
|
||||||
|
|
||||||
type User struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
type Resolved struct {
|
|
||||||
Users ResolvedData[User] `json:"users,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type resolvedInteractionWithOptions struct {
|
|
||||||
Resolved Resolved `json:"resolved,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserCommandInteractionData struct {
|
|
||||||
resolvedInteractionWithOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
type InteractionDataConstraint interface {
|
|
||||||
JsonRaw | UserCommandInteractionData
|
|
||||||
}
|
|
||||||
|
|
||||||
type Interaction[DataT InteractionDataConstraint] struct {
|
|
||||||
}
|
|
||||||
|
@ -6,13 +6,11 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"a"
|
"a"
|
||||||
"b"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var x a.I[a.JsonRaw]
|
var x a.I[a.JsonRaw]
|
||||||
var y b.InteractionRequest[a.JsonRaw]
|
|
||||||
|
|
||||||
fmt.Printf("%v %v\n", x, y)
|
fmt.Printf("%v\n", x)
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
{} {{}}
|
{}
|
||||||
|
37
test/typeparam/issue51219b.dir/a.go
Normal file
37
test/typeparam/issue51219b.dir/a.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
package a
|
||||||
|
|
||||||
|
type Interaction[DataT InteractionDataConstraint] struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type InteractionDataConstraint interface {
|
||||||
|
[]byte |
|
||||||
|
UserCommandInteractionData
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserCommandInteractionData struct {
|
||||||
|
resolvedInteractionWithOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
type resolvedInteractionWithOptions struct {
|
||||||
|
Resolved Resolved `json:"resolved,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Resolved struct {
|
||||||
|
Users ResolvedData[User] `json:"users,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResolvedData[T ResolvedDataConstraint] map[uint64]T
|
||||||
|
|
||||||
|
type ResolvedDataConstraint interface {
|
||||||
|
User | Message
|
||||||
|
}
|
||||||
|
|
||||||
|
type User struct{}
|
||||||
|
|
||||||
|
type Message struct {
|
||||||
|
Interaction *Interaction[[]byte] `json:"interaction,omitempty"`
|
||||||
|
}
|
@ -4,8 +4,11 @@
|
|||||||
|
|
||||||
package b
|
package b
|
||||||
|
|
||||||
import "a"
|
import (
|
||||||
|
"./a"
|
||||||
|
)
|
||||||
|
|
||||||
|
// InteractionRequest is an incoming request Interaction
|
||||||
type InteractionRequest[T a.InteractionDataConstraint] struct {
|
type InteractionRequest[T a.InteractionDataConstraint] struct {
|
||||||
a.Interaction[T]
|
a.Interaction[T]
|
||||||
}
|
}
|
14
test/typeparam/issue51219b.dir/p.go
Normal file
14
test/typeparam/issue51219b.dir/p.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
import (
|
||||||
|
"./b"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ResponseWriterMock mocks corde's ResponseWriter interface
|
||||||
|
type ResponseWriterMock struct {
|
||||||
|
x b.InteractionRequest[[]byte]
|
||||||
|
}
|
7
test/typeparam/issue51219b.go
Normal file
7
test/typeparam/issue51219b.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// compiledir -G=3
|
||||||
|
|
||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
package ignored
|
Loading…
x
Reference in New Issue
Block a user