|
45 | 45 | { |
46 | 46 | fn generate(&self, mut component_ids: BTreeSet<u64>) -> Result<Expr, Error> { |
47 | 47 | let mut formula = None::<Expr>; |
| 48 | + if self.graph.config.disable_fallback_components { |
| 49 | + while let Some(component_id) = component_ids.pop_first() { |
| 50 | + formula = Self::add_to_option(formula, Expr::component(component_id)); |
| 51 | + } |
| 52 | + return formula.ok_or(Error::internal("No components to generate formula.")); |
| 53 | + } |
48 | 54 | while let Some(component_id) = component_ids.pop_first() { |
49 | 55 | if let Some(expr) = self.meter_fallback(component_id)? { |
50 | 56 | formula = Self::add_to_option(formula, expr); |
@@ -169,7 +175,7 @@ where |
169 | 175 |
|
170 | 176 | #[cfg(test)] |
171 | 177 | mod tests { |
172 | | - use crate::{graph::test_utils::ComponentGraphBuilder, Error}; |
| 178 | + use crate::{graph::test_utils::ComponentGraphBuilder, ComponentGraphConfig, Error}; |
173 | 179 |
|
174 | 180 | #[test] |
175 | 181 | fn test_meter_fallback() -> Result<(), Error> { |
@@ -197,6 +203,19 @@ mod tests { |
197 | 203 | let expr = graph.fallback_expr(vec![3], true)?; |
198 | 204 | assert_eq!(expr.to_string(), "COALESCE(#2, #3, 0.0)"); |
199 | 205 |
|
| 206 | + let graph = builder.build(Some(ComponentGraphConfig { |
| 207 | + disable_fallback_components: true, |
| 208 | + ..Default::default() |
| 209 | + }))?; |
| 210 | + let expr = graph.fallback_expr(vec![1, 2], false)?; |
| 211 | + assert_eq!(expr.to_string(), "#1 + #2"); |
| 212 | + |
| 213 | + let expr = graph.fallback_expr(vec![1, 2], true)?; |
| 214 | + assert_eq!(expr.to_string(), "#1 + #2"); |
| 215 | + |
| 216 | + let expr = graph.fallback_expr(vec![3], true)?; |
| 217 | + assert_eq!(expr.to_string(), "#3"); |
| 218 | + |
200 | 219 | // Add a battery meter with three inverter and three batteries |
201 | 220 | let meter_bat_chain = builder.meter_bat_chain(3, 3); |
202 | 221 | builder.connect(grid_meter, meter_bat_chain); |
@@ -241,6 +260,22 @@ mod tests { |
241 | 260 | "COALESCE(#2, #3, 0.0) + COALESCE(#7, 0.0) + COALESCE(#8, 0.0)" |
242 | 261 | ); |
243 | 262 |
|
| 263 | + let graph = builder.build(Some(ComponentGraphConfig { |
| 264 | + disable_fallback_components: true, |
| 265 | + ..Default::default() |
| 266 | + }))?; |
| 267 | + let expr = graph.fallback_expr(vec![3, 5], false)?; |
| 268 | + assert_eq!(expr.to_string(), "#3 + #5"); |
| 269 | + |
| 270 | + let expr = graph.fallback_expr(vec![2, 5], true)?; |
| 271 | + assert_eq!(expr.to_string(), "#2 + #5"); |
| 272 | + |
| 273 | + let expr = graph.fallback_expr(vec![2, 6, 7, 8], true)?; |
| 274 | + assert_eq!(expr.to_string(), "#2 + #6 + #7 + #8"); |
| 275 | + |
| 276 | + let expr = graph.fallback_expr(vec![2, 7, 8], true)?; |
| 277 | + assert_eq!(expr.to_string(), "#2 + #7 + #8"); |
| 278 | + |
244 | 279 | let meter = builder.meter(); |
245 | 280 | let chp = builder.chp(); |
246 | 281 | let pv_inverter = builder.solar_inverter(); |
|
0 commit comments