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:
Dan Scales 2022-02-23 17:57:09 -08:00
parent a064a4f29a
commit 57dda9795d
7 changed files with 64 additions and 44 deletions

View file

@ -18,42 +18,3 @@ type IConstraint interface {
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 {
}

View file

@ -6,13 +6,11 @@ package main
import (
"a"
"b"
"fmt"
)
func main() {
var x a.I[a.JsonRaw]
var y b.InteractionRequest[a.JsonRaw]
fmt.Printf("%v %v\n", x, y)
fmt.Printf("%v\n", x)
}

View file

@ -1 +1 @@
{} {{}}
{}

View 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"`
}

View file

@ -4,8 +4,11 @@
package b
import "a"
import (
"./a"
)
// InteractionRequest is an incoming request Interaction
type InteractionRequest[T a.InteractionDataConstraint] struct {
a.Interaction[T]
}

View 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]
}

View 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