github.com/cilium/ebpf@v0.16.0/internal/testutils/checkers_test.go (about) 1 package testutils 2 3 import ( 4 "testing" 5 6 "github.com/go-quicktest/qt" 7 ) 8 9 func TestIsDeepCopy(t *testing.T) { 10 type s struct { 11 basic int 12 array [1]*int 13 array0 [0]int 14 ptr *int 15 slice []*int 16 ifc any 17 m map[*int]*int 18 rec *s 19 } 20 21 key := 1 22 copy := func() *s { 23 v := &s{ 24 0, 25 [...]*int{new(int)}, 26 [...]int{}, 27 new(int), 28 []*int{new(int)}, 29 new(int), 30 map[*int]*int{&key: new(int)}, 31 nil, 32 } 33 v.rec = v 34 return v 35 } 36 37 a, b := copy(), copy() 38 qt.Check(t, qt.IsNil(IsDeepCopy(a, b).Check(nil))) 39 40 a.basic++ 41 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"basic": .*`)) 42 43 a = copy() 44 (*a.array[0])++ 45 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"array": index 0: .*`)) 46 47 a = copy() 48 a.array[0] = nil 49 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"array": index 0: .*`)) 50 51 a = copy() 52 a.array = b.array 53 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"array": index 0: .*`)) 54 55 a = copy() 56 (*a.ptr)++ 57 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"ptr": .*`)) 58 59 a = copy() 60 a.ptr = b.ptr 61 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"ptr": .*`)) 62 63 a = copy() 64 (*a.slice[0])++ 65 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"slice": .*`)) 66 67 a = copy() 68 a.slice[0] = nil 69 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"slice": .*`)) 70 71 a = copy() 72 a.slice = nil 73 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"slice": .*`)) 74 75 a = copy() 76 a.slice = b.slice 77 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"slice": .*`)) 78 79 a = copy() 80 *(a.ifc.(*int))++ 81 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"ifc": .*`)) 82 83 a = copy() 84 a.ifc = b.ifc 85 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"ifc": .*`)) 86 87 a = copy() 88 a.rec = b.rec 89 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"rec": .*`)) 90 91 a = copy() 92 a.m = b.m 93 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"m": .*`)) 94 95 a = copy() 96 (*a.m[&key])++ 97 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"m": .*`)) 98 99 a = copy() 100 a.m[new(int)] = new(int) 101 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"m": .*`)) 102 103 a = copy() 104 delete(a.m, &key) 105 qt.Check(t, qt.ErrorMatches(IsDeepCopy(a, b).Check(nil), `"m": .*`)) 106 }