mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
reflect: support Len and Cap on pointer-to-array Value
Fixes #52411
Change-Id: I2fd13a453622992c52d49aade7cd058cfc8a77ca
GitHub-Last-Rev: d5987c2ec8
GitHub-Pull-Request: golang/go#52423
Reviewed-on: https://go-review.googlesource.com/c/go/+/400954
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Keith Randall <khr@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
35f2aba283
commit
892cd0b636
2 changed files with 78 additions and 2 deletions
|
|
@ -7913,3 +7913,69 @@ func BenchmarkSliceCap(b *testing.B) {
|
|||
sinkAll.RawInt = sourceAll.SliceAny.Cap()
|
||||
}
|
||||
}
|
||||
|
||||
func TestValue_Cap(t *testing.T) {
|
||||
a := &[3]int{1, 2, 3}
|
||||
v := ValueOf(a)
|
||||
if v.Cap() != cap(a) {
|
||||
t.Errorf("Cap = %d want %d", v.Cap(), cap(a))
|
||||
}
|
||||
|
||||
a = nil
|
||||
v = ValueOf(a)
|
||||
if v.Cap() != cap(a) {
|
||||
t.Errorf("Cap = %d want %d", v.Cap(), cap(a))
|
||||
}
|
||||
|
||||
getError := func(f func()) (errorStr string) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
if str, ok := e.(string); ok {
|
||||
errorStr = str
|
||||
}
|
||||
}()
|
||||
f()
|
||||
return
|
||||
}
|
||||
e := getError(func() {
|
||||
var ptr *int
|
||||
ValueOf(ptr).Cap()
|
||||
})
|
||||
wantStr := "reflect: call of reflect.Value.Cap on ptr to non-array Value"
|
||||
if e != wantStr {
|
||||
t.Errorf("error is %q, want %q", e, wantStr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValue_Len(t *testing.T) {
|
||||
a := &[3]int{1, 2, 3}
|
||||
v := ValueOf(a)
|
||||
if v.Len() != len(a) {
|
||||
t.Errorf("Len = %d want %d", v.Len(), len(a))
|
||||
}
|
||||
|
||||
a = nil
|
||||
v = ValueOf(a)
|
||||
if v.Len() != len(a) {
|
||||
t.Errorf("Len = %d want %d", v.Len(), len(a))
|
||||
}
|
||||
|
||||
getError := func(f func()) (errorStr string) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
if str, ok := e.(string); ok {
|
||||
errorStr = str
|
||||
}
|
||||
}()
|
||||
f()
|
||||
return
|
||||
}
|
||||
e := getError(func() {
|
||||
var ptr *int
|
||||
ValueOf(ptr).Len()
|
||||
})
|
||||
wantStr := "reflect: call of reflect.Value.Len on ptr to non-array Value"
|
||||
if e != wantStr {
|
||||
t.Errorf("error is %q, want %q", e, wantStr)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue