github.com/Nixolay/training@v0.0.0-20220925080335-7dfc7a5893e8/golang/practice_unsafe/conversions/bytes_test.go (about) 1 package conversions_test 2 3 import ( 4 "testing" 5 6 . "github.com/Nixolay/training/golang/practice_unsafe/conversions" 7 . "github.com/smartystreets/goconvey/convey" 8 ) 9 10 const ( 11 word = "test data is my big text" 12 size = 100000 13 ) 14 15 func TestStringConversion(t *testing.T) { 16 Convey("Test string conversion", t, func() { 17 Convey("Test bytes conversion to string", func() { 18 data := []byte(word) 19 expected := UnsafeBytesToString(data) 20 So(expected, ShouldEqual, word) 21 }) 22 23 Convey("Test bytes conversion to string by Header", func() { 24 data := []byte(word) 25 expected := UnsafeBytesToStringByHeader(data) 26 So(expected, ShouldEqual, word) 27 }) 28 29 Convey("Test string conversion to byte slice by Header", func() { 30 actual := []byte(word) 31 expected := UnsafeStringToByteSliceByHeader(word) 32 So(expected, ShouldResemble, actual) 33 }) 34 35 Convey("Test slice uint64 conversion to byte slice by Header", func() { 36 data := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9} 37 actual := SliceUint64ToBytes(data) 38 39 expected := UnsafeUint64sToBytes(data) 40 So(expected, ShouldResemble, actual) 41 }) 42 }) 43 } 44 45 func BenchmarkUnsafeBytesToString(b *testing.B) { 46 data := []byte(word) 47 v := make(chan string, size) 48 49 for i := 0; i < size; i++ { 50 v <- UnsafeBytesToString(data) 51 } 52 53 close(v) 54 } 55 56 func BenchmarkUnsafeBytesToStringByHeader(b *testing.B) { 57 data := []byte(word) 58 v := make(chan string, size) 59 defer close(v) 60 61 for i := 0; i < size; i++ { 62 v <- UnsafeBytesToStringByHeader(data) 63 } 64 } 65 66 func BenchmarkBytesToString(b *testing.B) { 67 data := []byte(word) 68 v := make(chan string, size) 69 defer close(v) 70 71 for i := 0; i < size; i++ { 72 v <- string(data) 73 } 74 } 75 76 func BenchmarkUnsafeStringToByteSliceByHeader(b *testing.B) { 77 v := make(chan []byte, size) 78 defer close(v) 79 80 for i := 0; i < size; i++ { 81 v <- UnsafeStringToByteSliceByHeader(word) 82 } 83 } 84 85 func BenchmarkStringToByteSlice(b *testing.B) { 86 v := make(chan []byte, size) 87 defer close(v) 88 89 for i := 0; i < size; i++ { 90 v <- []byte(word) 91 } 92 } 93 94 func BenchmarkUnsafeUint64sToBytes(b *testing.B) { 95 data := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9} 96 UnsafeUint64sToBytes(data) 97 } 98 99 func BenchmarkSliceUint64ToBytes(b *testing.B) { 100 data := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9} 101 UnsafeUint64sToBytes(data) 102 }