package otsdb import ( "math" "testing" ) type consolidatePointAverageTest struct { tsStart float64 tsEnd float64 rate float64 } var consolidatePointAverageTestData = []OTS_DataPoint { { 0.0, 0.0}, { 10.0, 2.0}, { 20.0, 4.0}, { 30.0, 8.0}, { 40.0, 16.0}, { 50.0, 32.0}, { 60.0, 64.0}, { 70.0, 96.0}, { 80.0, 96.0}, { 90.0, 0.0}, {100.0, 0.0}, {110.0, 0.0}, {120.0, 0.0}, } var consolidatePointAverageTests = []consolidatePointAverageTest { /* Timespan borders align with datapoints. This is the easiest case. */ consolidatePointAverageTest{40.0, 60.0, 48.0}, consolidatePointAverageTest{40.0, 50.0, 32.0}, /* Timespan borders between datapoints. */ consolidatePointAverageTest{35.0, 45.0, 24.0}, consolidatePointAverageTest{ 7.0, 27.0, 5.1}, consolidatePointAverageTest{17.0, 42.0, 12.64}, /* No datapoints within timespan. */ consolidatePointAverageTest{23.0, 28.0, 8.0}, /* Beginning before first datapoint */ consolidatePointAverageTest{-8.0, 24.0, 2.875}, /* End after last datapoint */ consolidatePointAverageTest{60.0, 180.0, 32.0}, /* Start and end inversed */ consolidatePointAverageTest{27.0, 7.0, 5.1}, } func floatsDiffer (a, b float64) bool { if math.Fabs (a - b) > 1.0e-6 { return true } return false } func TestConsolidatePointAverage (t *testing.T) { obj := new (OTS_TimeSeries) obj.DataPoints = consolidatePointAverageTestData for i := 0; i < len (consolidatePointAverageTests); i++ { testCase := consolidatePointAverageTests[i] dp := obj.ConsolidatePointAverage (testCase.tsStart, testCase.tsEnd); if floatsDiffer (dp.Rate, testCase.rate) { t.Errorf ("ConsolidatePointAverage (%g, %g) failed: Expected %g, got %g", testCase.tsStart, testCase.tsEnd, testCase.rate, dp.Rate); } } } /* vim: set syntax=go sw=2 sts=2 et : */