blob: 4a81199460ab5043fc0bc5496946fe1dad77aa5a [file] [log] [blame]
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package benchstat
import (
"math"
"sort"
)
// An Order defines a sort order for a table.
// It reports whether t.Rows[i] should appear before t.Rows[j].
type Order func(t *Table, i, j int) bool
// ByName sorts tables by the Benchmark name column
func ByName(t *Table, i, j int) bool {
return t.Rows[i].Benchmark < t.Rows[j].Benchmark
}
// ByDelta sorts tables by the Delta column,
// reversing the order when larger is better (for "speed" results).
func ByDelta(t *Table, i, j int) bool {
return math.Abs(t.Rows[i].PctDelta)*float64(t.Rows[i].Change) <
math.Abs(t.Rows[j].PctDelta)*float64(t.Rows[j].Change)
}
// Reverse returns the reverse of the given order.
func Reverse(order Order) Order {
return func(t *Table, i, j int) bool { return order(t, j, i) }
}
// Sort sorts a Table t (in place) by the given order.
func Sort(t *Table, order Order) {
sort.SliceStable(t.Rows, func(i, j int) bool { return order(t, i, j) })
}