@@ -186,6 +186,7 @@ impl LogicalMeterHandle {
186186#[ cfg( test) ]
187187mod tests {
188188 use chrono:: TimeDelta ;
189+ use frequenz_resampling:: ResamplingFunction ;
189190 use tokio_stream:: { StreamExt , wrappers:: BroadcastStream } ;
190191
191192 use crate :: {
@@ -421,6 +422,57 @@ mod tests {
421422 )
422423 }
423424
425+ #[ tokio:: test( start_paused = true ) ]
426+ async fn test_resampling_functions ( ) {
427+ let lm_config = Some (
428+ LogicalMeterConfig :: new ( TimeDelta :: try_milliseconds ( 200 ) . unwrap ( ) )
429+ . with_default_resampling_function ( ResamplingFunction :: Count )
430+ . override_resampling_function :: < crate :: metric:: AcVoltage > ( ResamplingFunction :: Last ) ,
431+ ) ;
432+ let mut lm = new_logical_meter_handle ( lm_config) . await ;
433+ let bat_volt_formula = lm. battery ( None , crate :: metric:: AcVoltage ) . unwrap ( ) ;
434+
435+ let samples = fetch_samples ( bat_volt_formula, 10 ) . await ;
436+ check_samples (
437+ samples,
438+ |q| q. as_volts ( ) ,
439+ TimeDelta :: try_milliseconds ( 200 ) . unwrap ( ) ,
440+ vec ! [
441+ Some ( 400.0 ) ,
442+ Some ( 400.0 ) ,
443+ Some ( 398.0 ) ,
444+ Some ( 396.0 ) ,
445+ Some ( 396.0 ) ,
446+ Some ( 396.0 ) ,
447+ Some ( 396.0 ) ,
448+ Some ( 396.0 ) ,
449+ None ,
450+ None ,
451+ ] ,
452+ ) ;
453+
454+ let cons_pow_formula = lm. consumer ( crate :: metric:: AcPowerActive ) . unwrap ( ) ;
455+
456+ let samples = fetch_samples ( cons_pow_formula, 10 ) . await ;
457+ check_samples (
458+ samples,
459+ |q| q. as_watts ( ) ,
460+ TimeDelta :: try_milliseconds ( 200 ) . unwrap ( ) ,
461+ vec ! [
462+ Some ( 1.0 ) ,
463+ Some ( 2.0 ) ,
464+ Some ( 3.0 ) ,
465+ Some ( 3.0 ) ,
466+ Some ( 3.0 ) ,
467+ Some ( 3.0 ) ,
468+ Some ( 2.0 ) ,
469+ Some ( 1.0 ) ,
470+ Some ( 0.0 ) ,
471+ Some ( 0.0 ) ,
472+ ] ,
473+ ) ;
474+ }
475+
424476 #[ tokio:: test( start_paused = true ) ]
425477 async fn test_consumer_current_formula ( ) {
426478 let formula = new_logical_meter_handle ( None )
@@ -478,14 +530,14 @@ mod tests {
478530 ) ;
479531 } ) ;
480532
481- for ( v, ev) in values. iter ( ) . zip ( expected_values. iter ( ) ) {
533+ for ( id , ( v, ev) ) in values. iter ( ) . zip ( expected_values. iter ( ) ) . enumerate ( ) {
482534 match ( v, ev) {
483535 ( Some ( v) , Some ( ev) ) => assert ! (
484536 ( v - ev) . abs( ) < 0.01 ,
485- "expected value {ev:?}, got value {v:?}"
537+ "Item {id} - expected value {ev:?}, got value {v:?}"
486538 ) ,
487539 ( None , None ) => { }
488- _ => panic ! ( "expected value {ev:?}, got value {v:?}" ) ,
540+ _ => panic ! ( "Item {id} - expected value {ev:?}, got value {v:?}" ) ,
489541 }
490542 }
491543 }
0 commit comments