From 56887ff152757df77793dcd2b280711404839790 Mon Sep 17 00:00:00 2001 From: Scott Kay Date: Mon, 22 Apr 2024 11:22:32 -0400 Subject: [PATCH] "complex" test for slice reflectutil --- util/reflectutil/slice_test.go | 39 +++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/util/reflectutil/slice_test.go b/util/reflectutil/slice_test.go index 4f1785b3065..d5183892369 100644 --- a/util/reflectutil/slice_test.go +++ b/util/reflectutil/slice_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" ) -func TestUnsafeSliceClone(t *testing.T) { +func TestUnsafeSliceCloneSimple(t *testing.T) { testCases := []struct { name string given []int @@ -39,3 +39,40 @@ func TestUnsafeSliceClone(t *testing.T) { }) } } + +func TestUnsafeSliceCloneComplex(t *testing.T) { + type foo struct { + value string + } + + testCases := []struct { + name string + given []foo + }{ + { + name: "empty", + given: []foo{}, + }, + { + name: "one", + given: []foo{{value: "a"}}, + }, + { + name: "many", + given: []foo{{value: "a"}, {value: "b"}}, + }, + } + + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + original := test.given + clonePtr := UnsafeSliceClone(reflect2.PtrOf(test.given), reflect2.TypeOf([]foo{}).(*reflect2.UnsafeSliceType)) + clone := *(*[]foo)(clonePtr) + + assert.NotSame(t, original, clone, "reference") + assert.Equal(t, original, clone, "equality") + assert.Equal(t, len(original), len(clone), "len") + assert.Equal(t, cap(original), cap(clone), "cap") + }) + } +}