@@ -257,7 +257,7 @@ public void TestMRangeGroupby()
257257 }
258258
259259 [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
260- public void TestMRangeReduce ( )
260+ public void TestMRangeReduceSum ( )
261261 {
262262 IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
263263 db . Execute ( "FLUSHALL" ) ;
@@ -281,6 +281,181 @@ public void TestMRangeReduce()
281281 }
282282 }
283283
284+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
285+ public void TestMRangeReduceAvg ( )
286+ {
287+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
288+ db . Execute ( "FLUSHALL" ) ;
289+ var ts = db . TS ( ) ;
290+ foreach ( var key in _keys )
291+ {
292+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
293+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
294+ }
295+
296+ var tuples = CreateData ( ts , 50 ) ;
297+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . Avg ) ) ;
298+ Assert . Equal ( 1 , results . Count ) ;
299+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
300+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
301+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "avg" ) , results [ 0 ] . labels [ 1 ] ) ;
302+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
303+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
304+ {
305+ Assert . Equal ( tuples [ i ] . Val , results [ 0 ] . values [ i ] . Val ) ;
306+ }
307+ }
308+
309+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
310+ public void TestMRangeReduceRange ( )
311+ {
312+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
313+ db . Execute ( "FLUSHALL" ) ;
314+ var ts = db . TS ( ) ;
315+ foreach ( var key in _keys )
316+ {
317+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
318+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
319+ }
320+
321+ var tuples = CreateData ( ts , 50 ) ;
322+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . Range ) ) ;
323+ Assert . Equal ( 1 , results . Count ) ;
324+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
325+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
326+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "range" ) , results [ 0 ] . labels [ 1 ] ) ;
327+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
328+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
329+ {
330+ Assert . Equal ( 0 , results [ 0 ] . values [ i ] . Val ) ;
331+ }
332+ }
333+
334+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
335+ public void TestMRangeReduceCount ( )
336+ {
337+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
338+ db . Execute ( "FLUSHALL" ) ;
339+ var ts = db . TS ( ) ;
340+ foreach ( var key in _keys )
341+ {
342+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
343+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
344+ }
345+
346+ var tuples = CreateData ( ts , 50 ) ;
347+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . Count ) ) ;
348+ Assert . Equal ( 1 , results . Count ) ;
349+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
350+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
351+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "count" ) , results [ 0 ] . labels [ 1 ] ) ;
352+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
353+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
354+ {
355+ Assert . Equal ( 2 , results [ 0 ] . values [ i ] . Val ) ;
356+ }
357+ }
358+
359+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
360+ public void TestMRangeReduceStdP ( )
361+ {
362+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
363+ db . Execute ( "FLUSHALL" ) ;
364+ var ts = db . TS ( ) ;
365+ foreach ( var key in _keys )
366+ {
367+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
368+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
369+ }
370+
371+ var tuples = CreateData ( ts , 50 ) ;
372+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . StdP ) ) ;
373+ Assert . Equal ( 1 , results . Count ) ;
374+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
375+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
376+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "std.p" ) , results [ 0 ] . labels [ 1 ] ) ;
377+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
378+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
379+ {
380+ Assert . Equal ( 0 , results [ 0 ] . values [ i ] . Val ) ;
381+ }
382+ }
383+
384+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
385+ public void TestMRangeReduceStdS ( )
386+ {
387+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
388+ db . Execute ( "FLUSHALL" ) ;
389+ var ts = db . TS ( ) ;
390+ foreach ( var key in _keys )
391+ {
392+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
393+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
394+ }
395+
396+ var tuples = CreateData ( ts , 50 ) ;
397+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . StdS ) ) ;
398+ Assert . Equal ( 1 , results . Count ) ;
399+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
400+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
401+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "std.s" ) , results [ 0 ] . labels [ 1 ] ) ;
402+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
403+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
404+ {
405+ Assert . Equal ( 0 , results [ 0 ] . values [ i ] . Val ) ;
406+ }
407+ }
408+
409+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
410+ public void TestMRangeReduceVarP ( )
411+ {
412+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
413+ db . Execute ( "FLUSHALL" ) ;
414+ var ts = db . TS ( ) ;
415+ foreach ( var key in _keys )
416+ {
417+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
418+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
419+ }
420+
421+ var tuples = CreateData ( ts , 50 ) ;
422+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . VarP ) ) ;
423+ Assert . Equal ( 1 , results . Count ) ;
424+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
425+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
426+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "var.p" ) , results [ 0 ] . labels [ 1 ] ) ;
427+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
428+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
429+ {
430+ Assert . Equal ( 0 , results [ 0 ] . values [ i ] . Val ) ;
431+ }
432+ }
433+
434+ [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
435+ public void TestMRangeReduceVarS ( )
436+ {
437+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
438+ db . Execute ( "FLUSHALL" ) ;
439+ var ts = db . TS ( ) ;
440+ foreach ( var key in _keys )
441+ {
442+ var label = new TimeSeriesLabel ( "key" , "MRangeReduce" ) ;
443+ ts . Create ( key , labels : new List < TimeSeriesLabel > { label } ) ;
444+ }
445+
446+ var tuples = CreateData ( ts , 50 ) ;
447+ var results = ts . MRange ( "-" , "+" , new List < string > { "key=MRangeReduce" } , withLabels : true , groupbyTuple : ( "key" , TsReduce . VarS ) ) ;
448+ Assert . Equal ( 1 , results . Count ) ;
449+ Assert . Equal ( "key=MRangeReduce" , results [ 0 ] . key ) ;
450+ Assert . Equal ( new TimeSeriesLabel ( "key" , "MRangeReduce" ) , results [ 0 ] . labels [ 0 ] ) ;
451+ Assert . Equal ( new TimeSeriesLabel ( "__reducer__" , "var.s" ) , results [ 0 ] . labels [ 1 ] ) ;
452+ Assert . Equal ( new TimeSeriesLabel ( "__source__" , string . Join ( "," , _keys ) ) , results [ 0 ] . labels [ 2 ] ) ;
453+ for ( int i = 0 ; i < results [ 0 ] . values . Count ; i ++ )
454+ {
455+ Assert . Equal ( 0 , results [ 0 ] . values [ i ] . Val ) ;
456+ }
457+ }
458+
284459 [ SkipIfRedis ( Is . OSSCluster , Is . Enterprise ) ]
285460 public void TestMRangeFilterBy ( )
286461 {
0 commit comments