github.com/pidato/unsafe@v0.1.4/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 //}