github.com/mitranim/gg@v0.1.17/ptr_test.go (about) 1 package gg_test 2 3 import ( 4 "testing" 5 6 "github.com/mitranim/gg" 7 "github.com/mitranim/gg/gtest" 8 ) 9 10 func TestPtrInited(t *testing.T) { 11 defer gtest.Catch(t) 12 13 gtest.NotZero(gg.PtrInited((*string)(nil))) 14 15 src := new(string) 16 gtest.Eq(gg.PtrInited(src), src) 17 } 18 19 func TestPtrInit(t *testing.T) { 20 defer gtest.Catch(t) 21 22 gtest.Zero(gg.PtrInit((**string)(nil))) 23 24 var tar *string 25 gtest.Eq(gg.PtrInit(&tar), tar) 26 gtest.NotZero(tar) 27 } 28 29 func TestPtrClear(t *testing.T) { 30 defer gtest.Catch(t) 31 32 gtest.NotPanic(func() { 33 gg.PtrClear((*string)(nil)) 34 }) 35 36 val := `str` 37 gg.PtrClear(&val) 38 gtest.Equal(val, ``) 39 } 40 41 func BenchmarkPtrClear(b *testing.B) { 42 var val string 43 44 for ind := 0; ind < b.N; ind++ { 45 gg.PtrClear(&val) 46 val = `str` 47 } 48 } 49 50 func TestPtrGet(t *testing.T) { 51 defer gtest.Catch(t) 52 53 gtest.Eq(gg.PtrGet((*string)(nil)), ``) 54 gtest.Eq(gg.PtrGet(new(string)), ``) 55 gtest.Eq(gg.PtrGet(gg.Ptr(`str`)), `str`) 56 57 gtest.Eq(gg.PtrGet((*int)(nil)), 0) 58 gtest.Eq(gg.PtrGet(new(int)), 0) 59 gtest.Eq(gg.PtrGet(gg.Ptr(10)), 10) 60 } 61 62 func BenchmarkPtrGet_miss(b *testing.B) { 63 for ind := 0; ind < b.N; ind++ { 64 gg.Nop1(gg.PtrGet((*[]string)(nil))) 65 } 66 } 67 68 func BenchmarkPtrGet_hit(b *testing.B) { 69 ptr := gg.Ptr([]string{`one`, `two`}) 70 71 for ind := 0; ind < b.N; ind++ { 72 gg.Nop1(gg.PtrGet(ptr)) 73 } 74 } 75 76 func TestPtrSet(t *testing.T) { 77 defer gtest.Catch(t) 78 79 gtest.NotPanic(func() { 80 gg.PtrSet((*string)(nil), ``) 81 gg.PtrSet((*string)(nil), `str`) 82 }) 83 84 var tar string 85 86 gg.PtrSet(&tar, `one`) 87 gtest.Eq(tar, `one`) 88 89 gg.PtrSet(&tar, `two`) 90 gtest.Eq(tar, `two`) 91 } 92 93 func TestPtrSetOpt(t *testing.T) { 94 defer gtest.Catch(t) 95 96 gtest.NotPanic(func() { 97 gg.PtrSetOpt((*string)(nil), (*string)(nil)) 98 gg.PtrSetOpt(new(string), (*string)(nil)) 99 gg.PtrSetOpt((*string)(nil), new(string)) 100 }) 101 102 var tar string 103 gg.PtrSetOpt(&tar, gg.Ptr(`one`)) 104 gtest.Eq(tar, `one`) 105 106 gg.PtrSetOpt(&tar, gg.Ptr(`two`)) 107 gtest.Eq(tar, `two`) 108 } 109 110 func TestPtrPop(t *testing.T) { 111 defer gtest.Catch(t) 112 113 test := func(src *string, exp string) { 114 gtest.Eq(gg.PtrPop(src), exp) 115 } 116 117 test(nil, ``) 118 test(gg.Ptr(``), ``) 119 test(gg.Ptr(`val`), `val`) 120 }