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  }