1package universe_test
2
3import "testing"
4import "testing/expect"
5import "planner"
6import "csv"
7
8option now = () => (2030-01-01T00:00:00Z)
9
10input = "
11#group,false,false,true,true,false,false,true,true,true
12#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string
13#default,_result,,,,,,,,
14,result,table,_start,_stop,_time,_value,_field,_measurement,meter
15,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-04-11T07:00:00Z,0,bank,pge_bill,35632393IN
16,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-04-23T07:00:00Z,64,bank,pge_bill,35632393IN
17,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-05-22T07:00:00Z,759,bank,pge_bill,35632393IN
18,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-06-24T07:00:00Z,1234,bank,pge_bill,35632393IN
19,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-07-24T07:00:00Z,1503,bank,pge_bill,35632393IN
20,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-08-22T07:00:00Z,1707,bank,pge_bill,35632393IN
21,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-09-23T07:00:00Z,1874,bank,pge_bill,35632393IN
22,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-10-23T07:00:00Z,2086,bank,pge_bill,35632393IN
23,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-11-21T08:00:00Z,2187,bank,pge_bill,35632393IN
24,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2019-12-24T08:00:00Z,1851,bank,pge_bill,35632393IN
25,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-01-24T08:00:00Z,1391,bank,pge_bill,35632393IN
26,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-02-24T08:00:00Z,1221,bank,pge_bill,35632393IN
27,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-03-25T07:00:00Z,0,bank,pge_bill,35632393IN
28,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-04-23T07:00:00Z,447,bank,pge_bill,35632393IN
29,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-05-22T07:00:00Z,868,bank,pge_bill,35632393IN
30,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-06-23T07:00:00Z,1321,bank,pge_bill,35632393IN
31,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-07-23T07:00:00Z,1453,bank,pge_bill,35632393IN
32,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-08-21T07:00:00Z,1332,bank,pge_bill,35632393IN
33,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-09-23T07:00:00Z,1312,bank,pge_bill,35632393IN
34,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-10-22T07:00:00Z,1261,bank,pge_bill,35632393IN
35,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-11-20T08:00:00Z,933,bank,pge_bill,35632393IN
36,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2020-12-23T08:00:00Z,233,bank,pge_bill,35632393IN
37,,0,2017-02-16T20:30:31.713576368Z,2021-02-16T20:30:31.713576368Z,2021-01-26T08:00:00Z,-1099,bank,pge_bill,35632393IN
38"
39
40testcase windowed_count {
41    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
42
43    want = csv.from(
44        csv: "
45#datatype,string,long,dateTime:RFC3339,long
46#group,false,false,true,false
47#default,_result,,,
48,result,table,_start,_value
49,,0,2019-01-01T00:00:00Z,10
50,,1,2020-01-01T00:00:00Z,12
51,,2,2021-01-01T00:00:00Z,1
52",
53    )
54    result = testing.loadStorage(csv: input)
55        |> range(start: -100y)
56        |> window(every: 1y)
57        |> count()
58        |> keep(columns: ["_start", "_value"])
59
60    testing.diff(want: want, got: result)
61}
62
63testcase windowed_sum {
64    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
65
66    want = csv.from(
67        csv: "
68#datatype,string,long,dateTime:RFC3339,double
69#group,false,false,true,false
70#default,_result,,,
71,result,table,_start,_value
72,,0,2019-01-01T00:00:00Z,13265.00
73,,1,2020-01-01T00:00:00Z,11772.00
74,,2,2021-01-01T00:00:00Z,-1099.00
75",
76    )
77    result = testing.loadStorage(csv: input)
78        |> range(start: -100y)
79        |> window(every: 1y)
80        |> sum()
81        |> keep(columns: ["_start", "_value"])
82
83    testing.diff(want: want, got: result)
84}
85
86testcase windowed_mean {
87    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
88
89    want = csv.from(
90        csv: "
91#datatype,string,long,dateTime:RFC3339,double
92#group,false,false,true,false
93#default,_result,,,
94,result,table,_start,_value
95,,0,2019-01-01T00:00:00Z,1326.50
96,,1,2020-01-01T00:00:00Z,981.00
97,,2,2021-01-01T00:00:00Z,-1099.00
98",
99    )
100    result = testing.loadStorage(csv: input)
101        |> range(start: -100y)
102        |> window(every: 1y)
103        |> mean()
104        |> keep(columns: ["_start", "_value"])
105
106    testing.diff(want: want, got: result)
107}
108
109testcase windowed_min {
110    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
111
112    want = csv.from(
113        csv: "
114#group,false,false,false,false,true,true
115#datatype,string,long,dateTime:RFC3339,double,string,string
116#default,_result,,,,,
117,result,table,_time,_value,_field,_measurement
118,,0,2019-04-11T07:00:00Z,0,bank,pge_bill
119,,0,2020-03-25T07:00:00Z,0,bank,pge_bill
120,,0,2021-01-26T08:00:00Z,-1099,bank,pge_bill
121",
122    )
123    result = testing.loadStorage(csv: input)
124        |> range(start: -100y)
125        |> window(every: 1y)
126        |> min()
127        |> keep(columns: ["_time", "_value", "_field", "_measurement"])
128        |> sort(columns: ["_time"])
129
130    testing.diff(want: want, got: result)
131}
132
133testcase windowed_max {
134    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
135
136    want = csv.from(
137        csv: "
138#group,false,false,false,false,true,true
139#datatype,string,long,dateTime:RFC3339,double,string,string
140#default,_result,,,,,
141,result,table,_time,_value,_field,_measurement
142,,0,2019-11-21T08:00:00Z,2187,bank,pge_bill
143,,0,2020-07-23T07:00:00Z,1453,bank,pge_bill
144,,0,2021-01-26T08:00:00Z,-1099,bank,pge_bill
145",
146    )
147    result = testing.loadStorage(csv: input)
148        |> range(start: -100y)
149        |> window(every: 1y)
150        |> max()
151        |> keep(columns: ["_time", "_value", "_field", "_measurement"])
152        |> sort(columns: ["_time"])
153
154    testing.diff(want: want, got: result)
155}
156
157testcase windowed_first {
158    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
159
160    want = csv.from(
161        csv: "
162#group,false,false,false,false,true,true
163#datatype,string,long,dateTime:RFC3339,double,string,string
164#default,_result,,,,,
165,result,table,_time,_value,_field,_measurement
166,,0,2019-04-11T07:00:00Z,0,bank,pge_bill
167,,0,2020-01-24T08:00:00Z,1391,bank,pge_bill
168,,0,2021-01-26T08:00:00Z,-1099,bank,pge_bill
169",
170    )
171    result = testing.loadStorage(csv: input)
172        |> range(start: -100y)
173        |> window(every: 1y)
174        |> first()
175        |> keep(columns: ["_time", "_value", "_field", "_measurement"])
176        |> sort(columns: ["_time"])
177
178    testing.diff(want: want, got: result)
179}
180
181testcase windowed_last {
182    expect.planner(rules: ["PushDownWindowAggregateRule": 1])
183
184    want = csv.from(
185        csv: "
186#group,false,false,false,false,true,true
187#datatype,string,long,dateTime:RFC3339,double,string,string
188#default,_result,,,,,
189,result,table,_time,_value,_field,_measurement
190,,0,2019-12-24T08:00:00Z,1851.000,bank,pge_bill
191,,0,2020-12-23T08:00:00Z,233.000,bank,pge_bill
192,,0,2021-01-26T08:00:00Z,-1099,bank,pge_bill
193",
194    )
195    result = testing.loadStorage(csv: input)
196        |> range(start: -100y)
197        |> window(every: 1y)
198        |> last()
199        |> keep(columns: ["_time", "_value", "_field", "_measurement"])
200        |> sort(columns: ["_time"])
201
202    testing.diff(want: want, got: result)
203}
204