blob: 618d03405af285dad183dac4c979f7274c205904 [file] [log] [blame]
package clustering2
import (
"math/rand"
"testing"
"time"
"github.com/stretchr/testify/assert"
"go.skia.org/infra/go/paramtools"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/perf/go/ctrace2"
"go.skia.org/infra/perf/go/dataframe"
"go.skia.org/infra/perf/go/kmeans"
"go.skia.org/infra/perf/go/types"
)
func TestParamSummaries(t *testing.T) {
unittest.SmallTest(t)
obs := []kmeans.Clusterable{
ctrace2.NewFullTrace(",arch=x86,config=8888,", []float32{1, 2}, 0.001),
ctrace2.NewFullTrace(",arch=x86,config=565,", []float32{2, 3}, 0.001),
ctrace2.NewFullTrace(",arch=x86,config=565,", []float32{3, 2}, 0.001),
}
expected := map[string][]ValueWeight{
"arch": {
{"x86", 26},
},
"config": {
{"565", 21},
{"8888", 16},
},
}
assert.Equal(t, expected, getParamSummaries(obs))
obs = []kmeans.Clusterable{}
expected = map[string][]ValueWeight{}
assert.Equal(t, expected, getParamSummaries(obs))
}
func TestCalcCusterSummaries(t *testing.T) {
unittest.LargeTest(t)
rand.Seed(1)
now := time.Now()
df := &dataframe.DataFrame{
TraceSet: types.TraceSet{
",arch=x86,config=8888,": []float32{0, 0, 1, 1, 1},
",arch=x86,config=565,": []float32{0, 0, 1, 1, 1},
",arch=arm,config=8888,": []float32{1, 1, 1, 1, 1},
",arch=arm,config=565,": []float32{1, 1, 1, 1, 1},
},
Header: []*dataframe.ColumnHeader{
{
Source: "master",
Offset: 0,
Timestamp: now.Unix(),
},
{
Source: "master",
Offset: 1,
Timestamp: now.Add(time.Minute).Unix(),
},
{
Source: "master",
Offset: 2,
Timestamp: now.Add(2 * time.Minute).Unix(),
},
{
Source: "master",
Offset: 3,
Timestamp: now.Add(3 * time.Minute).Unix(),
},
{
Source: "master",
Offset: 4,
Timestamp: now.Add(4 * time.Minute).Unix(),
},
},
ParamSet: paramtools.ParamSet{},
Skip: 0,
}
for key := range df.TraceSet {
df.ParamSet.AddParamsFromKey(key)
}
sum, err := CalculateClusterSummaries(df, 4, 0.01, nil, 50)
assert.NoError(t, err)
assert.NotNil(t, sum)
assert.Equal(t, 2, len(sum.Clusters))
assert.Equal(t, df.Header[2], sum.Clusters[0].StepPoint)
assert.Equal(t, 2, len(sum.Clusters[0].Keys))
assert.Equal(t, 2, len(sum.Clusters[1].Keys))
}
func TestCalcCusterSummariesDegenerate(t *testing.T) {
unittest.SmallTest(t)
rand.Seed(1)
df := &dataframe.DataFrame{
TraceSet: types.TraceSet{},
Header: []*dataframe.ColumnHeader{},
ParamSet: paramtools.ParamSet{},
Skip: 0,
}
_, err := CalculateClusterSummaries(df, 4, 0.01, nil, 50)
assert.Error(t, err)
}