From 8c085513f8b63e48ed77408345f9d9a9c6f9afd2 Mon Sep 17 00:00:00 2001 From: Nan Deng Date: Thu, 12 Jun 2014 15:38:52 -0700 Subject: [PATCH] fix a bug demostrated in TestPercentilesSmallDataSet() --- info/container.go | 3 +++ info/container_test.go | 24 +++++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/info/container.go b/info/container.go index 16e47442..6fd67b46 100644 --- a/info/container.go +++ b/info/container.go @@ -238,6 +238,9 @@ func (self uint64Slice) Percentiles(requestedPercentiles ...int) []percentile { sort.Sort(self) for _, p := range requestedPercentiles { idx := (len(self) * p / 100) - 1 + if idx < 0 { + idx = 0 + } ret = append( ret, percentile{ diff --git a/info/container_test.go b/info/container_test.go index fde9ab41..bf449a4e 100644 --- a/info/container_test.go +++ b/info/container_test.go @@ -80,13 +80,23 @@ func TestPercentiles(t *testing.T) { if s.Value != uint64(s.Percentage) { t.Errorf("%v percentile data should be %v, but got %v", s.Percentage, s.Percentage, s.Value) } - /* - p := percentages[i] - d := uint64(N * p / 100) - if d != s { - t.Errorf("%v percentile data should be %v, but got %v", p, d, s) - } - */ + } +} + +func TestPercentilesSmallDataSet(t *testing.T) { + var value uint64 = 11 + data := []uint64{value} + + percentages := []int{ + 80, + 90, + 50, + } + percentiles := uint64Slice(data).Percentiles(percentages...) + for _, s := range percentiles { + if s.Value != value { + t.Errorf("%v percentile data should be %v, but got %v", s.Percentage, value, s.Value) + } } }