diff --git a/engine/librankings.go b/engine/librankings.go index 7123d1b23..f78e4a92b 100644 --- a/engine/librankings.go +++ b/engine/librankings.go @@ -204,10 +204,13 @@ func (rkDsrtr *rankingDescSorter) sortStatIDs() []string { sort.Slice(rkDsrtr.statIDs, func(i, j int) bool { for _, metricID := range rkDsrtr.sMetricIDs { val1, hasMetric1 := rkDsrtr.Metrics[rkDsrtr.statIDs[i]][metricID] + val2, hasMetric2 := rkDsrtr.Metrics[rkDsrtr.statIDs[j]][metricID] + if !hasMetric1 && !hasMetric2 { + continue + } if !hasMetric1 { return false } - val2, hasMetric2 := rkDsrtr.Metrics[rkDsrtr.statIDs[j]][metricID] if !hasMetric2 { return true } @@ -267,10 +270,13 @@ func (rkASrtr *rankingAscSorter) sortStatIDs() []string { sort.Slice(rkASrtr.statIDs, func(i, j int) bool { for _, metricID := range rkASrtr.sMetricIDs { val1, hasMetric1 := rkASrtr.Metrics[rkASrtr.statIDs[i]][metricID] + val2, hasMetric2 := rkASrtr.Metrics[rkASrtr.statIDs[j]][metricID] + if !hasMetric1 && !hasMetric2 { + continue + } if !hasMetric1 { return false } - val2, hasMetric2 := rkASrtr.Metrics[rkASrtr.statIDs[j]][metricID] if !hasMetric2 { return true } diff --git a/engine/librankings_test.go b/engine/librankings_test.go index 0f2054744..433064389 100644 --- a/engine/librankings_test.go +++ b/engine/librankings_test.go @@ -94,12 +94,12 @@ func TestRankingAscSorterSortStatIDs(t *testing.T) { func TestRankingMixedOrder(t *testing.T) { statmetrics := map[string]map[string]float64{ "Stat1": {"*acc": 13}, - "Stat2": {"*acc": 14}, - "Stat3": {"*acc": 12.1, "*pdd": 900}, - "Stat4": {"*acc": 12.1, "*pdd": 1000}, - "Stat5": {"*acc": 10, "*pdd": 700, "*tcc": 120}, "Stat6": {"*acc": 10, "*pdd": 700, "*tcc": 121}, + "Stat2": {"*acc": 14}, + "Stat5": {"*acc": 10, "*pdd": 700, "*tcc": 120}, + "Stat3": {"*acc": 12.1, "*pdd": 900}, "Stat7": {"*acc": 10, "*pdd": 600, "*tcc": 123}, + "Stat4": {"*acc": 12.1, "*pdd": 1000}, } testCases := []struct { @@ -115,12 +115,24 @@ func TestRankingMixedOrder(t *testing.T) { sorter: "*asc", statIDs: []string{"Stat5", "Stat6", "Stat7", "Stat4", "Stat3", "Stat1", "Stat2"}, }, - // { - // name: "TestSortStatsDesc", - // sortMetric: []string{"*tcc", "*pdd:false", "*acc"}, - // sorter: "*desc", - // statIDs: []string{"Stat7", "Stat6", "Stat5", "Stat3", "Stat4", "Stat2", "Stat1"}, - // }, + { + name: "TestSortStatsDesc", + sortMetric: []string{"*tcc", "*pdd:false", "*acc"}, + sorter: "*desc", + statIDs: []string{"Stat7", "Stat6", "Stat5", "Stat3", "Stat4", "Stat2", "Stat1"}, + }, + { + name: "TestSortStatsDesc2", + sortMetric: []string{"*acc", "*tcc", "*pdd:false"}, + sorter: "*desc", + statIDs: []string{"Stat2", "Stat1", "Stat3", "Stat4", "Stat7", "Stat6", "Stat5"}, + }, + { + name: "TestSortStatsAsc2", + sortMetric: []string{"*tcc", "*pdd:false", "*acc"}, + sorter: "*asc", + statIDs: []string{"Stat5", "Stat6", "Stat7", "Stat4", "Stat3", "Stat1", "Stat2"}, + }, } for _, tc := range testCases {