@@ -30,13 +30,13 @@ where
3030 }
3131}
3232
33- struct FallbackExpr {
33+ pub ( crate ) struct FallbackExpr {
3434 pub ( crate ) prefer_meters : bool ,
3535 pub ( crate ) meter_fallback_for_meters : bool ,
3636}
3737
3838impl FallbackExpr {
39- fn generate < N : Node , E : Edge > (
39+ pub ( crate ) fn generate < N : Node , E : Edge > (
4040 & self ,
4141 graph : & ComponentGraph < N , E > ,
4242 mut component_ids : BTreeSet < u64 > ,
@@ -198,7 +198,12 @@ impl FallbackExpr {
198198
199199#[ cfg( test) ]
200200mod tests {
201- use crate :: { graph:: test_utils:: ComponentGraphBuilder , ComponentGraphConfig , Error } ;
201+ use std:: collections:: BTreeSet ;
202+
203+ use crate :: {
204+ graph:: { formulas:: fallback:: FallbackExpr , test_utils:: ComponentGraphBuilder } ,
205+ ComponentGraphConfig , Error ,
206+ } ;
202207
203208 #[ test]
204209 fn test_meter_fallback ( ) -> Result < ( ) , Error > {
@@ -217,36 +222,76 @@ mod tests {
217222 assert_eq ! ( meter_bat_chain. component_id( ) , 2 ) ;
218223
219224 let graph = builder. build ( None ) ?;
220- let expr = graph. fallback_expr ( vec ! [ 1 ] , true , true ) ?;
225+ let expr = FallbackExpr {
226+ prefer_meters : true ,
227+ meter_fallback_for_meters : true ,
228+ }
229+ . generate ( & graph, BTreeSet :: from ( [ 1 ] ) ) ?;
221230 assert_eq ! ( expr. to_string( ) , "COALESCE(#1, #2)" ) ;
222231
223- let expr = graph. fallback_expr ( vec ! [ 1 , 2 ] , true , true ) ?;
232+ let expr = FallbackExpr {
233+ prefer_meters : true ,
234+ meter_fallback_for_meters : true ,
235+ }
236+ . generate ( & graph, BTreeSet :: from ( [ 1 , 2 ] ) ) ?;
224237 assert_eq ! ( expr. to_string( ) , "COALESCE(#1, #2) + COALESCE(#2, #3, 0.0)" ) ;
225238
226- let expr = graph. fallback_expr ( vec ! [ 1 , 2 ] , false , false ) ?;
239+ let expr = FallbackExpr {
240+ prefer_meters : false ,
241+ meter_fallback_for_meters : false ,
242+ }
243+ . generate ( & graph, BTreeSet :: from ( [ 1 , 2 ] ) ) ?;
227244 assert_eq ! ( expr. to_string( ) , "#1 + COALESCE(#3, #2, 0.0)" ) ;
228245
229- let expr = graph. fallback_expr ( vec ! [ 1 , 2 ] , true , false ) ?;
246+ let expr = FallbackExpr {
247+ prefer_meters : true ,
248+ meter_fallback_for_meters : false ,
249+ }
250+ . generate ( & graph, BTreeSet :: from ( [ 1 , 2 ] ) ) ?;
230251 assert_eq ! ( expr. to_string( ) , "#1 + COALESCE(#2, #3, 0.0)" ) ;
231252
232- let expr = graph. fallback_expr ( vec ! [ 3 ] , true , false ) ?;
253+ let expr = FallbackExpr {
254+ prefer_meters : true ,
255+ meter_fallback_for_meters : false ,
256+ }
257+ . generate ( & graph, BTreeSet :: from ( [ 3 ] ) ) ?;
233258 assert_eq ! ( expr. to_string( ) , "COALESCE(#2, #3, 0.0)" ) ;
234- let expr = graph. fallback_expr ( vec ! [ 3 ] , true , true ) ?;
259+ let expr = FallbackExpr {
260+ prefer_meters : true ,
261+ meter_fallback_for_meters : true ,
262+ }
263+ . generate ( & graph, BTreeSet :: from ( [ 3 ] ) ) ?;
235264 assert_eq ! ( expr. to_string( ) , "COALESCE(#2, #3, 0.0)" ) ;
236- let expr = graph. fallback_expr ( vec ! [ 2 ] , true , true ) ?;
265+ let expr = FallbackExpr {
266+ prefer_meters : true ,
267+ meter_fallback_for_meters : true ,
268+ }
269+ . generate ( & graph, BTreeSet :: from ( [ 2 ] ) ) ?;
237270 assert_eq ! ( expr. to_string( ) , "COALESCE(#2, #3, 0.0)" ) ;
238271
239272 let graph = builder. build ( Some ( ComponentGraphConfig {
240273 disable_fallback_components : true ,
241274 ..Default :: default ( )
242275 } ) ) ?;
243- let expr = graph. fallback_expr ( vec ! [ 1 , 2 ] , false , false ) ?;
276+ let expr = FallbackExpr {
277+ prefer_meters : false ,
278+ meter_fallback_for_meters : false ,
279+ }
280+ . generate ( & graph, BTreeSet :: from ( [ 1 , 2 ] ) ) ?;
244281 assert_eq ! ( expr. to_string( ) , "#1 + #2" ) ;
245282
246- let expr = graph. fallback_expr ( vec ! [ 1 , 2 ] , true , false ) ?;
283+ let expr = FallbackExpr {
284+ prefer_meters : true ,
285+ meter_fallback_for_meters : false ,
286+ }
287+ . generate ( & graph, BTreeSet :: from ( [ 1 , 2 ] ) ) ?;
247288 assert_eq ! ( expr. to_string( ) , "#1 + #2" ) ;
248289
249- let expr = graph. fallback_expr ( vec ! [ 3 ] , true , false ) ?;
290+ let expr = FallbackExpr {
291+ prefer_meters : true ,
292+ meter_fallback_for_meters : false ,
293+ }
294+ . generate ( & graph, BTreeSet :: from ( [ 3 ] ) ) ?;
250295 assert_eq ! ( expr. to_string( ) , "#3" ) ;
251296
252297 // Add a battery meter with three inverter and three batteries
@@ -256,7 +301,11 @@ mod tests {
256301 assert_eq ! ( meter_bat_chain. component_id( ) , 5 ) ;
257302
258303 let graph = builder. build ( None ) ?;
259- let expr = graph. fallback_expr ( vec ! [ 3 , 5 ] , false , false ) ?;
304+ let expr = FallbackExpr {
305+ prefer_meters : false ,
306+ meter_fallback_for_meters : false ,
307+ }
308+ . generate ( & graph, BTreeSet :: from ( [ 3 , 5 ] ) ) ?;
260309 assert_eq ! (
261310 expr. to_string( ) ,
262311 concat!(
@@ -269,7 +318,11 @@ mod tests {
269318 )
270319 ) ;
271320
272- let expr = graph. fallback_expr ( vec ! [ 2 , 5 ] , true , false ) ?;
321+ let expr = FallbackExpr {
322+ prefer_meters : true ,
323+ meter_fallback_for_meters : false ,
324+ }
325+ . generate ( & graph, BTreeSet :: from ( [ 2 , 5 ] ) ) ?;
273326 assert_eq ! (
274327 expr. to_string( ) ,
275328 concat!(
@@ -278,7 +331,11 @@ mod tests {
278331 )
279332 ) ;
280333
281- let expr = graph. fallback_expr ( vec ! [ 2 , 6 , 7 , 8 ] , true , false ) ?;
334+ let expr = FallbackExpr {
335+ prefer_meters : true ,
336+ meter_fallback_for_meters : false ,
337+ }
338+ . generate ( & graph, BTreeSet :: from ( [ 2 , 6 , 7 , 8 ] ) ) ?;
282339 assert_eq ! (
283340 expr. to_string( ) ,
284341 concat!(
@@ -287,7 +344,11 @@ mod tests {
287344 )
288345 ) ;
289346
290- let expr = graph. fallback_expr ( vec ! [ 2 , 7 , 8 ] , true , false ) ?;
347+ let expr = FallbackExpr {
348+ prefer_meters : true ,
349+ meter_fallback_for_meters : false ,
350+ }
351+ . generate ( & graph, BTreeSet :: from ( [ 2 , 7 , 8 ] ) ) ?;
291352 assert_eq ! (
292353 expr. to_string( ) ,
293354 "COALESCE(#2, #3, 0.0) + COALESCE(#7, 0.0) + COALESCE(#8, 0.0)"
@@ -297,16 +358,32 @@ mod tests {
297358 disable_fallback_components : true ,
298359 ..Default :: default ( )
299360 } ) ) ?;
300- let expr = graph. fallback_expr ( vec ! [ 3 , 5 ] , false , false ) ?;
361+ let expr = FallbackExpr {
362+ prefer_meters : false ,
363+ meter_fallback_for_meters : false ,
364+ }
365+ . generate ( & graph, BTreeSet :: from ( [ 3 , 5 ] ) ) ?;
301366 assert_eq ! ( expr. to_string( ) , "#3 + #5" ) ;
302367
303- let expr = graph. fallback_expr ( vec ! [ 2 , 5 ] , true , false ) ?;
368+ let expr = FallbackExpr {
369+ prefer_meters : true ,
370+ meter_fallback_for_meters : false ,
371+ }
372+ . generate ( & graph, BTreeSet :: from ( [ 2 , 5 ] ) ) ?;
304373 assert_eq ! ( expr. to_string( ) , "#2 + #5" ) ;
305374
306- let expr = graph. fallback_expr ( vec ! [ 2 , 6 , 7 , 8 ] , true , false ) ?;
375+ let expr = FallbackExpr {
376+ prefer_meters : true ,
377+ meter_fallback_for_meters : false ,
378+ }
379+ . generate ( & graph, BTreeSet :: from ( [ 2 , 6 , 7 , 8 ] ) ) ?;
307380 assert_eq ! ( expr. to_string( ) , "#2 + #6 + #7 + #8" ) ;
308381
309- let expr = graph. fallback_expr ( vec ! [ 2 , 7 , 8 ] , true , false ) ?;
382+ let expr = FallbackExpr {
383+ prefer_meters : true ,
384+ meter_fallback_for_meters : false ,
385+ }
386+ . generate ( & graph, BTreeSet :: from ( [ 2 , 7 , 8 ] ) ) ?;
310387 assert_eq ! ( expr. to_string( ) , "#2 + #7 + #8" ) ;
311388
312389 let meter = builder. meter ( ) ;
@@ -321,7 +398,11 @@ mod tests {
321398 assert_eq ! ( pv_inverter. component_id( ) , 14 ) ;
322399
323400 let graph = builder. build ( None ) ?;
324- let expr = graph. fallback_expr ( vec ! [ 5 , 12 ] , true , false ) ?;
401+ let expr = FallbackExpr {
402+ prefer_meters : true ,
403+ meter_fallback_for_meters : false ,
404+ }
405+ . generate ( & graph, BTreeSet :: from ( [ 5 , 12 ] ) ) ?;
325406 assert_eq ! (
326407 expr. to_string( ) ,
327408 concat!(
@@ -330,7 +411,11 @@ mod tests {
330411 )
331412 ) ;
332413
333- let expr = graph. fallback_expr ( vec ! [ 7 , 14 ] , false , false ) ?;
414+ let expr = FallbackExpr {
415+ prefer_meters : false ,
416+ meter_fallback_for_meters : false ,
417+ }
418+ . generate ( & graph, BTreeSet :: from ( [ 7 , 14 ] ) ) ?;
334419 assert_eq ! ( expr. to_string( ) , "COALESCE(#7, 0.0) + COALESCE(#14, 0.0)" ) ;
335420
336421 Ok ( ( ) )
0 commit comments