OTS_TimeSeries: Add the AddDataPoint() method.
[otsdb-go.git] / ots_timeseries_test.go
1 package otsdb
2
3 import (
4   "math"
5   "testing"
6 )
7
8 type consolidatePointAverageTest struct {
9   tsStart float64
10   tsEnd   float64
11   rate    float64
12 }
13
14 var consolidatePointAverageTestData = []OTS_DataPoint {
15   {  0.0,  0.0},
16   { 10.0,  2.0},
17   { 20.0,  4.0},
18   { 30.0,  8.0},
19   { 40.0, 16.0},
20   { 50.0, 32.0},
21   { 60.0, 64.0},
22   { 70.0, 96.0},
23   { 80.0, 96.0},
24   { 90.0,  0.0},
25   {100.0,  0.0},
26   {110.0,  0.0},
27   {120.0,  0.0},
28 }
29
30 var consolidatePointAverageTests = []consolidatePointAverageTest {
31   /* Timespan borders align with datapoints. This is the easiest case. */
32   consolidatePointAverageTest{40.0,  60.0, 48.0},
33   consolidatePointAverageTest{40.0,  50.0, 32.0},
34   /* Timespan borders between datapoints. */
35   consolidatePointAverageTest{35.0,  45.0, 24.0},
36   consolidatePointAverageTest{ 7.0,  27.0,  5.1},
37   consolidatePointAverageTest{17.0,  42.0, 12.64},
38   /* No datapoints within timespan. */
39   consolidatePointAverageTest{23.0,  28.0,  8.0},
40   /* Beginning before first datapoint */
41   consolidatePointAverageTest{-8.0,  24.0,  2.875},
42   /* End after last datapoint */
43   consolidatePointAverageTest{60.0, 180.0, 32.0},
44   /* Start and end inversed */
45   consolidatePointAverageTest{27.0,   7.0,  5.1},
46 }
47
48 func floatsDiffer (a, b float64) bool {
49   if math.Fabs (a - b) > 1.0e-6 {
50     return true
51   }
52   return false
53 }
54
55 func TestConsolidatePointAverage (t *testing.T) {
56   obj := new (OTS_TimeSeries)
57   obj.DataPoints = consolidatePointAverageTestData
58
59   for i := 0; i < len (consolidatePointAverageTests); i++ {
60     testCase := consolidatePointAverageTests[i]
61
62     dp := obj.ConsolidatePointAverage (testCase.tsStart, testCase.tsEnd);
63     if floatsDiffer (dp.Rate, testCase.rate) {
64       t.Errorf ("ConsolidatePointAverage (%g, %g) failed: Expected %g, got %g",
65           testCase.tsStart, testCase.tsEnd, testCase.rate, dp.Rate);
66     }
67   }
68 }
69
70 /* vim: set syntax=go sw=2 sts=2 et : */