Skip to content
Snippets Groups Projects
Commit 106250a1 authored by Hans Moog's avatar Hans Moog
Browse files

Refactor: removed unused unsafeconvert package

parent ae0d5f83
No related branches found
No related tags found
No related merge requests found
package unsafeconvert
import (
"unsafe"
)
// Converts a slice of bytes into a string without performing a copy.
// NOTE: This is an unsafe operation and may lead to problems if the bytes
// passed as argument are changed while the string is used. No checking whether
// bytes are valid UTF-8 data is performed.
func BytesToString(bs []byte) string {
return *(*string)(unsafe.Pointer(&bs))
}
// Converts a string into a slice of bytes without performing a copy.
// NOTE: This is an unsafe operation and may lead to problems if the bytes are changed.
func StringToBytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(&s))
}
package unsafeconvert
import (
"bytes"
"strings"
"testing"
)
var testStrings = []string{
"",
" ",
"test",
"こんにちは、 世界",
strings.Repeat(" ", 10),
strings.Repeat(" ", 100),
strings.Repeat(" ", 10000),
strings.Repeat(" ", 1000000),
}
func TestBytesToString(t *testing.T) {
for _, expected := range testStrings {
arg := []byte(expected)
actual := BytesToString(arg)
if actual != expected {
t.Errorf("BytesToString(%q) = %q but expected %q", arg, actual, expected)
}
}
}
func TestStringToBytes(t *testing.T) {
for _, arg := range testStrings {
expected := []byte(arg)
actual := StringToBytes(arg)
if !bytes.Equal(actual, expected) {
t.Errorf("Bytes(%q) = %q but expected %q", arg, actual, expected)
}
}
}
func TestNil(t *testing.T) {
actual := BytesToString(nil)
expected := ""
if actual != expected {
t.Errorf("String(nil) = %q but expected %q", actual, expected)
}
}
func createTestBytes() [][]byte {
result := make([][]byte, len(testStrings))
for i, str := range testStrings {
result[i] = []byte(str)
}
return result
}
func BenchmarkNativeBytesToString(b *testing.B) {
testBytes := createTestBytes()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for _, bs := range testBytes {
_ = string(bs)
}
}
}
func BenchmarkUnsafeBytesToString(b *testing.B) {
testBytes := createTestBytes()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for _, bs := range testBytes {
_ = BytesToString(bs)
}
}
}
func BenchmarkNativeStringToBytes(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, str := range testStrings {
_ = []byte(str)
}
}
}
func BenchmarkUnsafeStringToBytes(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, str := range testStrings {
_ = StringToBytes(str)
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment