diff options
| author | Michael Anthony Knyszek <mknyszek@google.com> | 2025-01-07 16:01:46 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-01-07 10:08:42 -0800 |
| commit | d62154db837fef880714f710bafbe0af94034b40 (patch) | |
| tree | be95a2ae6eeebc994b14161e975e4c2841b788d9 /src/weak/pointer_test.go | |
| parent | 9d0772b23ed8dae1667a3328a72f384eccf812d7 (diff) | |
| download | go-d62154db837fef880714f710bafbe0af94034b40.tar.xz | |
weak: don't panic when calling Value on a zero Pointer
Currently weak.Pointer.Value will panic if the weak.Pointer is
uninitialized (zero value) which goes against it's documentation. Fix
this and add a test. While we're here, also add a test to ensure
weak.Make[T](nil) is equivalent to the zero value of weak.Pointer[T].
Fixes #71153.
Change-Id: I4d9196026360bc42a5bfcb33ce449131ec251dba
Reviewed-on: https://go-review.googlesource.com/c/go/+/641095
Reviewed-by: David Finkel <david.finkel@gmail.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Diffstat (limited to 'src/weak/pointer_test.go')
| -rw-r--r-- | src/weak/pointer_test.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/weak/pointer_test.go b/src/weak/pointer_test.go index 002b4130f0..e0ef30377e 100644 --- a/src/weak/pointer_test.go +++ b/src/weak/pointer_test.go @@ -21,6 +21,15 @@ type T struct { } func TestPointer(t *testing.T) { + var zero weak.Pointer[T] + if zero.Value() != nil { + t.Error("Value of zero value of weak.Pointer is not nil") + } + zeroNil := weak.Make[T](nil) + if zeroNil.Value() != nil { + t.Error("Value of weak.Make[T](nil) is not nil") + } + bt := new(T) wt := weak.Make(bt) if st := wt.Value(); st != bt { @@ -41,6 +50,12 @@ func TestPointer(t *testing.T) { } func TestPointerEquality(t *testing.T) { + var zero weak.Pointer[T] + zeroNil := weak.Make[T](nil) + if zero != zeroNil { + t.Error("weak.Make[T](nil) != zero value of weak.Pointer[T]") + } + bt := make([]*T, 10) wt := make([]weak.Pointer[T], 10) wo := make([]weak.Pointer[int], 10) |
