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