github.com/thanos-io/thanos@v0.32.5/pkg/compact/downsample/aggr_test.go (about)

     1  // Copyright (c) The Thanos Authors.
     2  // Licensed under the Apache License 2.0.
     3  
     4  package downsample
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/prometheus/prometheus/tsdb/chunkenc"
    10  
    11  	"github.com/efficientgo/core/testutil"
    12  )
    13  
    14  func TestAggrChunk(t *testing.T) {
    15  	var input [5][]sample
    16  
    17  	input[AggrCount] = []sample{{100, 30}, {200, 50}, {300, 60}, {400, 67}}
    18  	input[AggrSum] = []sample{{100, 130}, {200, 1000}, {300, 2000}, {400, 5555}}
    19  	input[AggrMin] = []sample{{100, 0}, {200, -10}, {300, 1000}, {400, -9.5}}
    20  	// Maximum is absent.
    21  	input[AggrCounter] = []sample{{100, 5}, {200, 10}, {300, 10.1}, {400, 15}, {400, 3}}
    22  
    23  	var chks [5]chunkenc.Chunk
    24  
    25  	for i, smpls := range input {
    26  		if len(smpls) == 0 {
    27  			continue
    28  		}
    29  		chks[i] = chunkenc.NewXORChunk()
    30  		a, err := chks[i].Appender()
    31  		testutil.Ok(t, err)
    32  
    33  		for _, s := range smpls {
    34  			a.Append(s.t, s.v)
    35  		}
    36  	}
    37  
    38  	var res [5][]sample
    39  	ac := EncodeAggrChunk(chks)
    40  
    41  	for _, at := range []AggrType{AggrCount, AggrSum, AggrMin, AggrMax, AggrCounter} {
    42  		if c, err := ac.Get(at); err != ErrAggrNotExist {
    43  			testutil.Ok(t, err)
    44  			testutil.Ok(t, expandChunkIterator(c.Iterator(nil), &res[at]))
    45  		}
    46  	}
    47  	testutil.Equals(t, input, res)
    48  }