github.com/moontrade/unsafe@v0.9.1/memory/pointer_test.go (about)

     1  package memory
     2  
     3  import "testing"
     4  
     5  func BenchmarkPointer_Int32(b *testing.B) {
     6  	p := Alloc(32)
     7  	p.SetInt32(4, 99)
     8  
     9  	b.Run("Int32LE", func(b *testing.B) {
    10  		for i := 0; i < b.N; i++ {
    11  			p.Int32LE(4)
    12  			p.Int32LE(4)
    13  			p.Int32LE(4)
    14  			p.Int32LE(4)
    15  			p.Int32LE(4)
    16  		}
    17  	})
    18  
    19  	b.Run("Int32", func(b *testing.B) {
    20  		for i := 0; i < b.N; i++ {
    21  			p.Int32(4)
    22  			p.Int32(4)
    23  			p.Int32(4)
    24  			p.Int32(4)
    25  			p.Int32(4)
    26  		}
    27  	})
    28  
    29  	b.Run("Int32 unsafe.Add", func(b *testing.B) {
    30  		for i := 0; i < b.N; i++ {
    31  			p.Int32Alt(4)
    32  			p.Int32Alt(4)
    33  			p.Int32Alt(4)
    34  			p.Int32Alt(4)
    35  			p.Int32Alt(4)
    36  		}
    37  	})
    38  }
    39  
    40  //func TestPointerBE(t *testing.T) {
    41  //	a := NewTLSF(1)
    42  //	p := Pointer(a.Create(32))
    43  //	p.SetInt32BE(0, 100)
    44  //	println(p.Int32BE(0), p.Int32BESlow(), p.Int32(0))
    45  //}
    46  //
    47  //func BenchmarkPointerBE(b *testing.B) {
    48  //	a := NewTLSF(1)
    49  //	p := Pointer(a.Create(32))
    50  //
    51  //	b.Run("Int32", func(b *testing.B) {
    52  //		for i := 0; i < b.N; i++ {
    53  //			p.Int32(0)
    54  //		}
    55  //	})
    56  //	b.Run("Int32BE", func(b *testing.B) {
    57  //		for i := 0; i < b.N; i++ {
    58  //			p.Int32BE(0)
    59  //		}
    60  //	})
    61  //	b.Run("Int32BE Slow", func(b *testing.B) {
    62  //		for i := 0; i < b.N; i++ {
    63  //			p.Int32BESlow()
    64  //		}
    65  //	})
    66  //	b.Run("UInt32BE", func(b *testing.B) {
    67  //		for i := 0; i < b.N; i++ {
    68  //			p.UInt32BE(0)
    69  //		}
    70  //	})
    71  //	b.Run("UInt32BE Slow", func(b *testing.B) {
    72  //		for i := 0; i < b.N; i++ {
    73  //			p.UInt32BESlow()
    74  //		}
    75  //	})
    76  //	b.Run("Int64", func(b *testing.B) {
    77  //		for i := 0; i < b.N; i++ {
    78  //			p.Int64(0)
    79  //		}
    80  //	})
    81  //	b.Run("Int64BE", func(b *testing.B) {
    82  //		for i := 0; i < b.N; i++ {
    83  //			p.Int64BE(0)
    84  //		}
    85  //	})
    86  //	b.Run("UInt64BE", func(b *testing.B) {
    87  //		for i := 0; i < b.N; i++ {
    88  //			p.UInt64BE(0)
    89  //		}
    90  //	})
    91  //	b.Run("UInt64BE Slow", func(b *testing.B) {
    92  //		for i := 0; i < b.N; i++ {
    93  //			p.UInt64BESlow()
    94  //		}
    95  //	})
    96  //}
    97  //
    98  ////goland:noinspection GoVetUnsafePointer
    99  //func (p Pointer) Int16BESlow() int16 {
   100  //	return int16(*(*byte)(unsafe.Pointer(p + 1))) |
   101  //		int16(*(*byte)(unsafe.Pointer(p)))<<8
   102  //}
   103  //
   104  ////goland:noinspection GoVetUnsafePointer
   105  //func (p Pointer) UInt24BESlow() uint32 {
   106  //	return uint32(*(*byte)(unsafe.Pointer(p + 2))) |
   107  //		uint32(*(*byte)(unsafe.Pointer(p + 1)))<<8 |
   108  //		uint32(*(*byte)(unsafe.Pointer(p)))<<16
   109  //}
   110  //
   111  ////goland:noinspection GoVetUnsafePointer
   112  //func (p Pointer) UInt32LESlow() uint32 {
   113  //	return uint32(*(*byte)(unsafe.Pointer(p + 3))) |
   114  //		uint32(*(*byte)(unsafe.Pointer(p + 2)))<<8 |
   115  //		uint32(*(*byte)(unsafe.Pointer(p + 1)))<<16 |
   116  //		uint32(*(*byte)(unsafe.Pointer(p)))<<24
   117  //}
   118  //
   119  ////goland:noinspection GoVetUnsafePointer
   120  //func (p Pointer) UInt64BESlow() uint64 {
   121  //	return uint64(*(*byte)(unsafe.Pointer(p + 7))) |
   122  //		uint64(*(*byte)(unsafe.Pointer(p + 6)))<<8 |
   123  //		uint64(*(*byte)(unsafe.Pointer(p + 5)))<<16 |
   124  //		uint64(*(*byte)(unsafe.Pointer(p + 4)))<<24 |
   125  //		uint64(*(*byte)(unsafe.Pointer(p + 3)))<<32 |
   126  //		uint64(*(*byte)(unsafe.Pointer(p + 2)))<<40 |
   127  //		uint64(*(*byte)(unsafe.Pointer(p + 1)))<<48 |
   128  //		uint64(*(*byte)(unsafe.Pointer(p)))<<56
   129  //}
   130  //
   131  ////goland:noinspection GoVetUnsafePointer
   132  //func (p Pointer) Int32BESlow() int32 {
   133  //	return int32(*(*byte)(unsafe.Pointer(p + 3))) |
   134  //		int32(*(*byte)(unsafe.Pointer(p + 2)))<<8 |
   135  //		int32(*(*byte)(unsafe.Pointer(p + 1)))<<16 |
   136  //		int32(*(*byte)(unsafe.Pointer(p)))<<24
   137  //}
   138  //
   139  //func BenchmarkPointerBESet(b *testing.B) {
   140  //	a := NewTLSF(1)
   141  //	p := Pointer(a.Create(32))
   142  //
   143  //	b.Run("SetInt32At", func(b *testing.B) {
   144  //		for i := 0; i < b.N; i++ {
   145  //			p.SetInt32BE(8, 1)
   146  //		}
   147  //	})
   148  //	b.Run("SetInt32BEAtSlow", func(b *testing.B) {
   149  //		for i := 0; i < b.N; i++ {
   150  //			//p.SetInt32BEAtSlow(8, 1)
   151  //		}
   152  //	})
   153  //
   154  //}