package bytesutil

import (
	"sync/atomic"
	"testing"
)

func BenchmarkToUnsafeString(b *testing.B) {
	b.ReportAllocs()
	b.SetBytes(int64(len(benchBytes)))
	b.RunParallel(func(pb *testing.PB) {
		n := 0
		for pb.Next() {
			for _, b := range benchBytes {
				s := ToUnsafeString(b)
				n += len(s)
			}
		}
		Sink.Add(uint64(n))
	})
}

func BenchmarkToUnsafeBytes(b *testing.B) {
	b.ReportAllocs()
	b.SetBytes(int64(len(benchStrings)))
	b.RunParallel(func(pb *testing.PB) {
		n := 0
		for pb.Next() {
			for _, s := range benchStrings {
				b := ToUnsafeBytes(s)
				n += len(b)
			}
		}
		Sink.Add(uint64(n))
	})
}

var benchBytes = func() [][]byte {
	a := make([][]byte, 1000)
	for i := range a {
		a[i] = make([]byte, i)
	}
	return a
}()

var benchStrings = func() []string {
	a := make([]string, 1000)
	for i := range a {
		a[i] = string(make([]byte, i))
	}
	return a
}()

var Sink atomic.Uint64