Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions src/asset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ impl Asset {
self.state = AssetState::Decommissioned {
id,
agent_id,
decommission_year,
decommission_year: decommission_year.min(self.max_decommission_year()),
};
}

Expand Down Expand Up @@ -867,7 +867,7 @@ mod tests {
assert_error, asset, commodity_id, process, process_parameter_map, region_id, time_slice,
};
use crate::process::{
FlowType, Process, ProcessActivityLimitsMap, ProcessFlow, ProcessFlowsMap, ProcessID,
FlowType, Process, ProcessActivityLimitsMap, ProcessFlow, ProcessFlowsMap,
ProcessParameter, ProcessParameterMap,
};
use crate::region::RegionID;
Expand Down Expand Up @@ -1473,7 +1473,7 @@ mod tests {
}

#[rstest]
fn test_asset_state_transitions(process: Process) {
fn test_asset_commission(process: Process) {
// Test successful commissioning of Future asset
let process_rc = Rc::new(process);
let mut asset1 = Asset::new_future(
Expand All @@ -1500,11 +1500,34 @@ mod tests {
asset2.commission(AssetID(2), "");
assert!(asset2.is_commissioned());
assert_eq!(asset2.id(), Some(AssetID(2)));
}

#[rstest]
#[case::early_decommission_within_lifetime(2024, 2024)]
#[case::decommission_at_maximum_year(2026, 2025)]
fn test_asset_decommission(
#[case] requested_decommission_year: u32,
#[case] expected_decommission_year: u32,
process: Process,
) {
// Test successful commissioning of Future asset
let process_rc = Rc::new(process);
let mut asset = Asset::new_future(
"agent1".into(),
Rc::clone(&process_rc),
"GBR".into(),
Capacity(1.0),
2020,
)
.unwrap();
asset.commission(AssetID(1), "");
assert!(asset.is_commissioned());
assert_eq!(asset.id(), Some(AssetID(1)));

// Test successful decommissioning
asset1.decommission(2025, "");
assert!(!asset1.is_commissioned());
assert_eq!(asset1.decommission_year(), Some(2025));
asset.decommission(requested_decommission_year, "");
assert!(!asset.is_commissioned());
assert_eq!(asset.decommission_year(), Some(expected_decommission_year));
}

#[rstest]
Expand Down
2 changes: 1 addition & 1 deletion src/fixture.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ pub fn process_parameter_map(region_ids: IndexSet<RegionID>) -> ProcessParameter
capital_cost: MoneyPerCapacity(0.0),
fixed_operating_cost: MoneyPerCapacityPerYear(0.0),
variable_operating_cost: MoneyPerActivity(0.0),
lifetime: 1,
lifetime: 5,
discount_rate: Dimensionless(1.0),
});

Expand Down
4 changes: 2 additions & 2 deletions tests/data/missing_commodity/assets.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ asset_id,process_id,region_id,agent_id,commission_year,decommission_year,capacit
1,GASPRC,GBR,A0_GPR,2020,2040,3782.13
2,WNDFRM,GBR,A0_ELC,2020,2040,3.964844
3,GASCGT,GBR,A0_ELC,2020,2040,2.43
4,RGASBR,GBR,A0_RES,2020,2040,2900.0
5,RELCHP,GBR,A0_RES,2020,2040,399.98
4,RGASBR,GBR,A0_RES,2020,2035,2900.0
5,RELCHP,GBR,A0_RES,2020,2035,399.98
6,RBIOBL,GBR,A0_RES,2030,,355.83840587648046
7,BIOPLL,GBR,A0_BPL,2030,,449.480091633449
8,BIOPRO,GBR,A0_BPD,2030,,448.35639140436535
Expand Down
4 changes: 2 additions & 2 deletions tests/data/simple/assets.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ asset_id,process_id,region_id,agent_id,commission_year,decommission_year,capacit
1,GASPRC,GBR,A0_GPR,2020,,3782.13
2,WNDFRM,GBR,A0_ELC,2020,2040,3.964844
3,GASCGT,GBR,A0_ELC,2020,2040,2.43
4,RGASBR,GBR,A0_RES,2020,2040,2900.0
5,RELCHP,GBR,A0_RES,2020,2040,399.98
4,RGASBR,GBR,A0_RES,2020,2035,2900.0
5,RELCHP,GBR,A0_RES,2020,2035,399.98
6,RGASBR,GBR,A0_RES,2030,,355.83840587648046
7,RGASBR,GBR,A0_RES,2040,,3655.8189696
30 changes: 15 additions & 15 deletions tests/data/simple/debug_appraisal_results.csv
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,33 @@ milestone_year,run_description,asset_id,process_id,region_id,capacity,unmet_dema
2030,ironing out iteration 0; RSHEAT A0_RES round 0,,RGASBR,GBR,365.58184058764806,731.9814967499585,16.969542701647153
2030,ironing out iteration 0; RSHEAT A0_RES round 0,,RELCHP,GBR,365.58184058764806,731.9814967499585,32.7615162456679
2030,ironing out iteration 0; RSHEAT A0_RES round 1,4,RGASBR,GBR,2900.0,11.119950183640015,12.82090004166788
2030,ironing out iteration 0; RSHEAT A0_RES round 1,,RGASBR,GBR,365.58184058764806,458.2122119206317,19.09314691763651
2030,ironing out iteration 0; RSHEAT A0_RES round 1,,RGASBR,GBR,365.58184058764806,458.2122119206317,19.093146917636513
2030,ironing out iteration 0; RSHEAT A0_RES round 1,,RELCHP,GBR,365.58184058764806,458.2122119206317,38.32240163825729
2030,ironing out iteration 0; RSHEAT A0_RES round 2,,RGASBR,GBR,355.83840587648046,0.0,292.9539943035967
2030,ironing out iteration 0; RSHEAT A0_RES round 2,,RGASBR,GBR,355.83840587648046,0.0,292.9539943035968
2030,ironing out iteration 0; RSHEAT A0_RES round 2,,RELCHP,GBR,355.83840587648046,0.0,720.5264354789919
2030,ironing out iteration 0; ELCTRI A0_ELC round 0,2,WNDFRM,GBR,3.964844,9.122582406189563,7.95135326336099
2030,ironing out iteration 0; ELCTRI A0_ELC round 0,3,GASCGT,GBR,2.43,8.533338146005143,11.116173242419679
2030,ironing out iteration 0; ELCTRI A0_ELC round 0,,WNDFRM,GBR,0.8296341257939862,21.18388884708709,31.912566180263063
2030,ironing out iteration 0; ELCTRI A0_ELC round 0,,WNDFRM,GBR,0.8296341257939862,21.18388884708709,31.91256618026307
2030,ironing out iteration 0; ELCTRI A0_ELC round 0,,GASCGT,GBR,0.464994715704925,19.786860477508085,16.700042478191456
2030,ironing out iteration 0; ELCTRI A0_ELC round 1,3,GASCGT,GBR,2.43,0.0,13.587119801355628
2030,ironing out iteration 0; ELCTRI A0_ELC round 1,,WNDFRM,GBR,0.8296341257939862,6.934490527620455,53.54594746891633
2030,ironing out iteration 0; ELCTRI A0_ELC round 1,,WNDFRM,GBR,0.8296341257939862,6.934490527620455,53.545947468916346
2030,ironing out iteration 0; ELCTRI A0_ELC round 1,,GASCGT,GBR,0.464994715704925,7.0400656048469985,29.262425253778225
2030,ironing out iteration 0; GASNAT A0_GPR round 0,1,GASPRC,GBR,3782.13,0.0,3.5946466245698283
2030,ironing out iteration 0; GASNAT A0_GPR round 0,,GASPRC,GBR,1882.2106508775898,105.87434741787482,4.6491158129807735
2030,ironing out iteration 0; GASPRD A0_GEX round 0,0,GASDRV,GBR,4002.26,0.0,3.4590637024393733
2030,ironing out iteration 0; GASPRD A0_GEX round 0,,GASDRV,GBR,1782.3574244480762,100.25760352108253,5.120344950409316
2030,ironing out iteration 0; GASPRD A0_GEX round 0,,GASDRV,GBR,1782.3574244480762,100.25760352108253,5.120344950409317
2040,ironing out iteration 0; RSHEAT A0_RES round 0,6,RGASBR,GBR,355.83840587648046,837.2243916125647,7.910651988850701
2040,ironing out iteration 0; RSHEAT A0_RES round 0,,RGASBR,GBR,401.16573754764806,803.2288927232066,16.96954270164715
2040,ironing out iteration 0; RSHEAT A0_RES round 0,,RELCHP,GBR,401.16573754764806,803.2288927232066,32.7615162456679
2040,ironing out iteration 0; RSHEAT A0_RES round 1,,RGASBR,GBR,401.16573754764806,553.002604410226,18.52936492459862
2040,ironing out iteration 0; RSHEAT A0_RES round 1,,RELCHP,GBR,401.16573754764806,553.002604410226,36.93897594690447
2040,ironing out iteration 0; RSHEAT A0_RES round 2,,RGASBR,GBR,401.16573754764806,344.439249133942,23.122931761022492
2040,ironing out iteration 0; RSHEAT A0_RES round 2,,RELCHP,GBR,401.16573754764806,344.439249133942,48.2108123214798
2040,ironing out iteration 0; RSHEAT A0_RES round 3,,RGASBR,GBR,401.16573754764806,231.4426548511842,37.717511126543194
2040,ironing out iteration 0; RSHEAT A0_RES round 3,,RGASBR,GBR,401.16573754764806,231.4426548511842,37.7175111265432
2040,ironing out iteration 0; RSHEAT A0_RES round 3,,RELCHP,GBR,401.16573754764806,231.4426548511842,84.02344255458496
2040,ironing out iteration 0; RSHEAT A0_RES round 4,,RGASBR,GBR,401.16573754764806,135.33002996294968,43.31272689192322
2040,ironing out iteration 0; RSHEAT A0_RES round 4,,RGASBR,GBR,401.16573754764806,135.33002996294968,43.312726891923226
2040,ironing out iteration 0; RSHEAT A0_RES round 4,,RELCHP,GBR,401.16573754764806,135.33002996294968,97.75315605036315
2040,ironing out iteration 0; RSHEAT A0_RES round 5,,RGASBR,GBR,401.16573754764806,63.522481615597556,55.98733471331223
2040,ironing out iteration 0; RSHEAT A0_RES round 5,,RGASBR,GBR,401.16573754764806,63.522481615597556,55.98733471331224
2040,ironing out iteration 0; RSHEAT A0_RES round 5,,RELCHP,GBR,401.16573754764806,63.522481615597556,128.8545007269613
2040,ironing out iteration 0; RSHEAT A0_RES round 6,,RGASBR,GBR,401.16573754764806,39.02576700981601,152.78630430986536
2040,ironing out iteration 0; RSHEAT A0_RES round 6,,RELCHP,GBR,401.16573754764806,39.02576700981601,370.4833534015565
Expand All @@ -40,24 +40,24 @@ milestone_year,run_description,asset_id,process_id,region_id,capacity,unmet_dema
2040,ironing out iteration 0; RSHEAT A0_RES round 8,,RELCHP,GBR,401.16573754764806,13.952908413088004,720.5264354789919
2040,ironing out iteration 0; RSHEAT A0_RES round 9,,RGASBR,GBR,401.16573754764806,1.4164791147240017,292.95399430359674
2040,ironing out iteration 0; RSHEAT A0_RES round 9,,RELCHP,GBR,401.16573754764806,1.4164791147240017,720.5264354789919
2040,ironing out iteration 0; RSHEAT A0_RES round 10,,RGASBR,GBR,45.327331671168054,0.0,292.95399430359674
2040,ironing out iteration 0; RSHEAT A0_RES round 10,,RGASBR,GBR,45.327331671168054,0.0,292.9539943035968
2040,ironing out iteration 0; RSHEAT A0_RES round 10,,RELCHP,GBR,45.327331671168054,0.0,720.5264354789919
2040,ironing out iteration 0; GASNAT A0_GPR round 0,1,GASPRC,GBR,3782.13,0.0,3.5296209362039472
2040,ironing out iteration 0; GASNAT A0_GPR round 0,,GASPRC,GBR,2210.5242056822512,124.34198458015484,4.767386617539143
2040,ironing out iteration 0; GASPRD A0_GEX round 0,0,GASDRV,GBR,4002.26,0.0,3.086521021442066
2040,ironing out iteration 0; GASPRD A0_GEX round 0,,GASDRV,GBR,2321.050415966363,130.55908380916256,4.847920882198776
2040,ironing out iteration 0; GASPRD A0_GEX round 0,,GASDRV,GBR,2321.050415966363,130.55908380916256,4.8479208821987765
2040,ironing out iteration 1; RSHEAT A0_RES round 0,6,RGASBR,GBR,355.83840587648046,837.2243916125647,7.910651988850701
2040,ironing out iteration 1; RSHEAT A0_RES round 0,,RGASBR,GBR,401.16573754764806,803.2288927232066,16.96954270164715
2040,ironing out iteration 1; RSHEAT A0_RES round 0,,RELCHP,GBR,401.16573754764806,803.2288927232066,28.05951450411788
2040,ironing out iteration 1; RSHEAT A0_RES round 1,,RGASBR,GBR,401.16573754764806,553.002604410226,18.52936492459862
2040,ironing out iteration 1; RSHEAT A0_RES round 1,,RELCHP,GBR,401.16573754764806,553.002604410226,31.95907006149655
2040,ironing out iteration 1; RSHEAT A0_RES round 2,,RGASBR,GBR,401.16573754764806,344.439249133942,23.122931761022492
2040,ironing out iteration 1; RSHEAT A0_RES round 2,,RELCHP,GBR,401.16573754764806,344.439249133942,43.44298715255623
2040,ironing out iteration 1; RSHEAT A0_RES round 3,,RGASBR,GBR,401.16573754764806,231.4426548511842,37.717511126543194
2040,ironing out iteration 1; RSHEAT A0_RES round 3,,RGASBR,GBR,401.16573754764806,231.4426548511842,37.7175111265432
2040,ironing out iteration 1; RSHEAT A0_RES round 3,,RELCHP,GBR,401.16573754764806,231.4426548511842,79.929435566358
2040,ironing out iteration 1; RSHEAT A0_RES round 4,,RGASBR,GBR,401.16573754764806,135.33002996294968,43.31272689192322
2040,ironing out iteration 1; RSHEAT A0_RES round 4,,RGASBR,GBR,401.16573754764806,135.33002996294968,43.312726891923226
2040,ironing out iteration 1; RSHEAT A0_RES round 4,,RELCHP,GBR,401.16573754764806,135.33002996294968,93.91747497980806
2040,ironing out iteration 1; RSHEAT A0_RES round 5,,RGASBR,GBR,401.16573754764806,63.522481615597556,55.98733471331223
2040,ironing out iteration 1; RSHEAT A0_RES round 5,,RGASBR,GBR,401.16573754764806,63.522481615597556,55.98733471331224
2040,ironing out iteration 1; RSHEAT A0_RES round 5,,RELCHP,GBR,401.16573754764806,63.522481615597556,125.60399453328056
2040,ironing out iteration 1; RSHEAT A0_RES round 6,,RGASBR,GBR,401.16573754764806,39.02576700981601,152.78630430986536
2040,ironing out iteration 1; RSHEAT A0_RES round 6,,RELCHP,GBR,401.16573754764806,39.02576700981601,367.6014185246633
Expand All @@ -67,9 +67,9 @@ milestone_year,run_description,asset_id,process_id,region_id,capacity,unmet_dema
2040,ironing out iteration 1; RSHEAT A0_RES round 8,,RELCHP,GBR,401.16573754764806,13.952908413088004,718.0206435089918
2040,ironing out iteration 1; RSHEAT A0_RES round 9,,RGASBR,GBR,401.16573754764806,1.4164791147240017,292.95399430359674
2040,ironing out iteration 1; RSHEAT A0_RES round 9,,RELCHP,GBR,401.16573754764806,1.4164791147240017,718.0206435089918
2040,ironing out iteration 1; RSHEAT A0_RES round 10,,RGASBR,GBR,45.327331671168054,0.0,292.95399430359674
2040,ironing out iteration 1; RSHEAT A0_RES round 10,,RGASBR,GBR,45.327331671168054,0.0,292.9539943035968
2040,ironing out iteration 1; RSHEAT A0_RES round 10,,RELCHP,GBR,45.327331671168054,0.0,718.0206435089917
2040,ironing out iteration 1; GASNAT A0_GPR round 0,1,GASPRC,GBR,3782.13,0.0,3.5296209362039472
2040,ironing out iteration 1; GASNAT A0_GPR round 0,,GASPRC,GBR,2210.5242056822512,124.34198458015484,4.767386617539143
2040,ironing out iteration 1; GASPRD A0_GEX round 0,0,GASDRV,GBR,4002.26,0.0,3.086521021442066
2040,ironing out iteration 1; GASPRD A0_GEX round 0,,GASDRV,GBR,2321.050415966363,130.55908380916256,4.847920882198776
2040,ironing out iteration 1; GASPRD A0_GEX round 0,,GASDRV,GBR,2321.050415966363,130.55908380916256,4.8479208821987765