From 19bf7cf99c6c8db0e260d7def9e64b99c49c07ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=A9o?= Date: Mon, 29 Dec 2025 13:05:27 +0100 Subject: [PATCH] pointers: add new Eq() function --- pointers/ptr.go | 12 ++++++++++++ pointers/ptr_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/pointers/ptr.go b/pointers/ptr.go index a8ed4f3..cd3830e 100644 --- a/pointers/ptr.go +++ b/pointers/ptr.go @@ -22,3 +22,15 @@ func NullIsZero[T comparable](v *T) T { return *v } + +func Eq[T comparable](a, b *T) bool { + if a == b { + return true + } + + if a == nil || b == nil { + return false + } + + return *a == *b +} diff --git a/pointers/ptr_test.go b/pointers/ptr_test.go index e25898e..aab8726 100644 --- a/pointers/ptr_test.go +++ b/pointers/ptr_test.go @@ -34,3 +34,40 @@ func TestNullIsZero(t *testing.T) { assert.Equal(t, "s", NullIsZero(Ptr("s"))) assert.Equal(t, "", NullIsZero(s)) } + +type testStruct struct { + number int + string string +} + +func TestEq(t *testing.T) { + n := 5 + assert.True(t, Eq(&n, &n)) + assert.True(t, Eq(Ptr(5), &n)) + assert.True(t, Eq(Ptr(5), Ptr(5))) + assert.False(t, Eq(&n, Ptr(6))) + assert.False(t, Eq(Ptr(5), Ptr(6))) + + str := "foo" + assert.True(t, Eq(&str, &str)) + assert.True(t, Eq(&str, Ptr("foo"))) + assert.False(t, Eq(&str, Ptr("bar"))) + + s := testStruct{ + number: 1, + string: "hello", + } + assert.True(t, Eq(&s, &s)) + assert.True(t, Eq(&s, &testStruct{ + number: 1, + string: "hello", + })) + assert.False(t, Eq(&s, &testStruct{ + number: 2, + string: "hello", + })) + assert.False(t, Eq(&s, &testStruct{ + number: 1, + string: "world", + })) +}