github.com/grafana/pyroscope@v1.18.0/pkg/phlaredb/symdb/sample_appender_test.go (about)

     1  package symdb
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	schemav1 "github.com/grafana/pyroscope/pkg/phlaredb/schemas/v1"
     9  )
    10  
    11  func Test_SampleAppender(t *testing.T) {
    12  	for _, test := range []struct {
    13  		description string
    14  		assert      func(*testing.T, *SampleAppender)
    15  	}{
    16  		{
    17  			description: "empty appender",
    18  			assert: func(t *testing.T, a *SampleAppender) {
    19  				assert.Equal(t, 0, a.Len())
    20  			},
    21  		},
    22  		{
    23  			description: "hashtable",
    24  			assert: func(t *testing.T, a *SampleAppender) {
    25  				a.Append(1, 1)
    26  				a.AppendMany([]uint32{1337, 42}, []uint64{1, 1})
    27  				a.Append(1337, 1)
    28  				assert.Equal(t, 3, a.Len())
    29  				assert.Equal(t, 3, len(a.hashmap))
    30  				assert.Equal(t, schemav1.Samples{
    31  					StacktraceIDs: []uint32{1, 42, 1337},
    32  					Values:        []uint64{1, 1, 2},
    33  				}, a.Samples())
    34  			},
    35  		},
    36  		{
    37  			description: "sparse",
    38  			assert: func(t *testing.T, a *SampleAppender) {
    39  				a.Append(4, 1)
    40  				a.Append(1, 1)
    41  				a.AppendMany([]uint32{20, 40}, []uint64{1, 1})
    42  				a.Append(10, 1)
    43  				a.Append(40, 1)
    44  				assert.Equal(t, 5, a.Len())
    45  				assert.Equal(t, 0, len(a.hashmap))
    46  				assert.Equal(t, 11, len(a.chunks))
    47  				assert.Equal(t, schemav1.Samples{
    48  					StacktraceIDs: []uint32{1, 4, 10, 20, 40},
    49  					Values:        []uint64{1, 1, 1, 1, 2},
    50  				}, a.Samples())
    51  			},
    52  		},
    53  	} {
    54  		a := NewSampleAppenderSize(4, 4)
    55  		test.assert(t, a)
    56  	}
    57  }