package logstorage

import (
	"fmt"
	"testing"
)

func BenchmarkInmemoryPart_MustInitFromRows(b *testing.B) {
	for _, streams := range []int{1, 10, 100} {
		b.Run(fmt.Sprintf("streams_%d", streams), func(b *testing.B) {
			for _, rowsPerStream := range []int{1, 10, 100, 1000} {
				b.Run(fmt.Sprintf("rowsPerStream_%d", rowsPerStream), func(b *testing.B) {
					benchmarkInmemoryPartMustInitFromRows(b, streams, rowsPerStream)
				})
			}
		})
	}
}

func benchmarkInmemoryPartMustInitFromRows(b *testing.B, streams, rowsPerStream int) {
	b.ReportAllocs()
	b.SetBytes(int64(streams * rowsPerStream))
	b.RunParallel(func(pb *testing.PB) {
		lr := newTestLogRows(streams, rowsPerStream, 0)
		mp := getInmemoryPart()
		for pb.Next() {
			mp.mustInitFromRows(lr)
			if mp.ph.RowsCount != uint64(len(lr.timestamps)) {
				panic(fmt.Errorf("unexpecte number of entries in the output stream; got %d; want %d", mp.ph.RowsCount, len(lr.timestamps)))
			}
		}
		putInmemoryPart(mp)
	})
}