package gmeasure_test
import (
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gmeasure"
)
var _ = Describe("Stats", func() {
var stats gmeasure.Stats
Describe("Stats representing values", func() {
BeforeEach(func() {
stats = gmeasure.Stats{
Type: gmeasure.StatsTypeValue,
ExperimentName: "My Test Experiment",
MeasurementName: "Sprockets",
Units: "widgets",
N: 100,
PrecisionBundle: gmeasure.Precision(2),
ValueBundle: map[gmeasure.Stat]float64{
gmeasure.StatMin: 17.48992,
gmeasure.StatMax: 293.4820,
gmeasure.StatMean: 187.3023,
gmeasure.StatMedian: 87.2235,
gmeasure.StatStdDev: 73.6394,
},
}
})
Describe("String()", func() {
It("returns a one-line summary", func() {
Ω(stats.String()).Should(Equal("17.49 < [87.22] | <187.30> ±73.64 < 293.48"))
})
})
Describe("ValueFor()", func() {
It("returns the value for the requested stat", func() {
Ω(stats.ValueFor(gmeasure.StatMin)).Should(Equal(17.48992))
Ω(stats.ValueFor(gmeasure.StatMean)).Should(Equal(187.3023))
})
})
Describe("FloatFor", func() {
It("returns the requested stat as a float", func() {
Ω(stats.FloatFor(gmeasure.StatMin)).Should(Equal(17.48992))
Ω(stats.FloatFor(gmeasure.StatMean)).Should(Equal(187.3023))
})
})
Describe("StringFor", func() {
It("returns the requested stat rendered with the configured precision", func() {
Ω(stats.StringFor(gmeasure.StatMin)).Should(Equal("17.49"))
Ω(stats.StringFor(gmeasure.StatMean)).Should(Equal("187.30"))
})
})
})
Describe("Stats representing durations", func() {
BeforeEach(func() {
stats = gmeasure.Stats{
Type: gmeasure.StatsTypeDuration,
ExperimentName: "My Test Experiment",
MeasurementName: "Runtime",
N: 100,
PrecisionBundle: gmeasure.Precision(time.Millisecond * 100),
DurationBundle: map[gmeasure.Stat]time.Duration{
gmeasure.StatMin: 17375 * time.Millisecond,
gmeasure.StatMax: 890321 * time.Millisecond,
gmeasure.StatMean: 328712 * time.Millisecond,
gmeasure.StatMedian: 552390 * time.Millisecond,
gmeasure.StatStdDev: 186259 * time.Millisecond,
},
}
})
Describe("String()", func() {
It("returns a one-line summary", func() {
Ω(stats.String()).Should(Equal("17.4s < [9m12.4s] | <5m28.7s> ±3m6.3s < 14m50.3s"))
})
})
Describe("DurationFor()", func() {
It("returns the duration for the requested stat", func() {
Ω(stats.DurationFor(gmeasure.StatMin)).Should(Equal(17375 * time.Millisecond))
Ω(stats.DurationFor(gmeasure.StatMean)).Should(Equal(328712 * time.Millisecond))
})
})
Describe("FloatFor", func() {
It("returns the float64 representation for the requested duration stat", func() {
Ω(stats.FloatFor(gmeasure.StatMin)).Should(Equal(float64(17375 * time.Millisecond)))
Ω(stats.FloatFor(gmeasure.StatMean)).Should(Equal(float64(328712 * time.Millisecond)))
})
})
Describe("StringFor", func() {
It("returns the requested stat rendered with the configured precision", func() {
Ω(stats.StringFor(gmeasure.StatMin)).Should(Equal("17.4s"))
Ω(stats.StringFor(gmeasure.StatMean)).Should(Equal("5m28.7s"))
})
})
})
})