Tariff (Combined): sort rates before partitioning by start time (#32094)

This commit is contained in:
github-actions[bot] 2026-07-23 16:59:27 +00:00 • committed by GitHub
parent 2b7aaeaa37
commit c8517b0237
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 0 deletions

View file

@ -29,6 +29,8 @@ func (t *combined) Rates() (api.Rates, error) {
rates = append(rates, rr...) rates = append(rates, rr...)
} }
rates.Sort()
var res api.Rates var res api.Rates
partitions := lo.PartitionBy(rates, func(r api.Rate) time.Time { partitions := lo.PartitionBy(rates, func(r api.Rate) time.Time {

View file

@ -41,6 +41,27 @@ func TestCombined(t *testing.T) {
assert.Equal(t, api.Rates{rate(1, 1), rate(2, 4), rate(3, 3)}, rr) assert.Equal(t, api.Rates{rate(1, 1), rate(2, 4), rate(3, 3)}, rr)
} }
func TestCombinedUnsorted(t *testing.T) {
clock := clock.NewMock()
rate := func(start int, val float64) api.Rate {
return api.Rate{
Start: clock.Now().Add(time.Duration(start) * time.Hour),
End: clock.Now().Add(time.Duration(start+1) * time.Hour),
Value: val,
}
}
// b covers a disjoint range not adjacent to a's rates after concatenation
a := &tariff{api.Rates{rate(1, 1), rate(2, 2)}}
b := &tariff{api.Rates{rate(3, 3)}}
c := &tariff{api.Rates{rate(1, 10), rate(2, 20)}}
comb := &combined{[]api.Tariff{a, b, c}}
rr, err := comb.Rates()
require.NoError(t, err)
assert.Equal(t, api.Rates{rate(1, 11), rate(2, 22), rate(3, 3)}, rr)
}
func BenchmarkCombined(bench *testing.B) { func BenchmarkCombined(bench *testing.B) {
clock := clock.NewMock() clock := clock.NewMock()
rate := func(start int, val float64) api.Rate { rate := func(start int, val float64) api.Rate {