@@ -101,7 +101,7 @@ where
101101 . or_default ( )
102102 . insert ( region. clone ( ) ) ;
103103 for year in years. iter ( ) {
104- for ( time_slice, _) in time_slice_info . iter_selection ( & ts_selection ) {
104+ for ( time_slice, _) in ts_selection . iter ( time_slice_info ) {
105105 try_insert (
106106 map,
107107 ( region. clone ( ) , * year, time_slice. clone ( ) ) ,
@@ -146,51 +146,86 @@ fn validate_commodity_cost_map(
146146
147147#[ cfg( test) ]
148148mod tests {
149+ use std:: iter;
150+
149151 use super :: * ;
152+ use crate :: fixture:: { assert_error, region_id, time_slice, time_slice_info} ;
150153 use crate :: time_slice:: TimeSliceID ;
154+ use rstest:: { fixture, rstest} ;
151155
152- #[ test]
153- fn test_validate_commodity_costs_map ( ) {
154- // Set up time slices
155- let slice = TimeSliceID {
156- season : "winter" . into ( ) ,
157- time_of_day : "day" . into ( ) ,
158- } ;
159- let ts_info = TimeSliceInfo {
160- seasons : [ "winter" . into ( ) ] . into ( ) ,
161- times_of_day : [ "day" . into ( ) ] . into ( ) ,
162- fractions : [ ( slice. clone ( ) , 1.0 ) ] . into ( ) ,
163- } ;
156+ #[ fixture]
157+ fn region_ids ( region_id : RegionID ) -> HashSet < RegionID > {
158+ iter:: once ( region_id) . collect ( )
159+ }
164160
165- let regions = HashSet :: from ( [ "UK" . into ( ) ] ) ;
166- let milestone_years = [ 2020 ] ;
161+ # [ fixture ]
162+ fn cost_map ( time_slice : TimeSliceID ) -> CommodityCostMap {
167163 let cost = CommodityCost {
168164 balance_type : BalanceType :: Net ,
169165 value : 1.0 ,
170166 } ;
171167
172- // Valid map
173168 let mut map = CommodityCostMap :: new ( ) ;
174- map. insert ( ( "UK" . into ( ) , 2020 , slice. clone ( ) ) , cost. clone ( ) ) ;
175- assert ! ( validate_commodity_cost_map( & map, & regions, & milestone_years, & ts_info) . is_ok( ) ) ;
169+ map. insert ( ( "GBR" . into ( ) , 2020 , time_slice. clone ( ) ) , cost. clone ( ) ) ;
170+ map
171+ }
172+
173+ #[ rstest]
174+ fn test_validate_commodity_costs_map_valid (
175+ cost_map : CommodityCostMap ,
176+ time_slice_info : TimeSliceInfo ,
177+ region_ids : HashSet < RegionID > ,
178+ ) {
179+ // Valid map
180+ assert ! (
181+ validate_commodity_cost_map( & cost_map, & region_ids, & [ 2020 ] , & time_slice_info) . is_ok( )
182+ ) ;
183+ }
176184
185+ #[ rstest]
186+ fn test_validate_commodity_costs_map_invalid_missing_region (
187+ cost_map : CommodityCostMap ,
188+ time_slice_info : TimeSliceInfo ,
189+ ) {
177190 // Missing region
178- let regions2 = HashSet :: from ( [ "UK" . into ( ) , "FR" . into ( ) ] ) ;
179- assert ! ( validate_commodity_cost_map( & map, & regions2, & milestone_years, & ts_info) . is_err( ) ) ;
191+ let region_ids = HashSet :: from ( [ "GBR" . into ( ) , "FRA" . into ( ) ] ) ;
192+ assert_error ! (
193+ validate_commodity_cost_map( & cost_map, & region_ids, & [ 2020 ] , & time_slice_info) ,
194+ "Missing cost for region FRA, year 2020, time slice winter.day"
195+ ) ;
196+ }
180197
198+ #[ rstest]
199+ fn test_validate_commodity_costs_map_invalid_missing_year (
200+ cost_map : CommodityCostMap ,
201+ time_slice_info : TimeSliceInfo ,
202+ region_ids : HashSet < RegionID > ,
203+ ) {
181204 // Missing year
182- assert ! ( validate_commodity_cost_map( & map, & regions, & [ 2020 , 2030 ] , & ts_info) . is_err( ) ) ;
205+ assert_error ! (
206+ validate_commodity_cost_map( & cost_map, & region_ids, & [ 2020 , 2030 ] , & time_slice_info) ,
207+ "Missing cost for region GBR, year 2030, time slice winter.day"
208+ ) ;
209+ }
183210
211+ #[ rstest]
212+ fn test_validate_commodity_costs_map_invalid (
213+ cost_map : CommodityCostMap ,
214+ region_ids : HashSet < RegionID > ,
215+ ) {
184216 // Missing time slice
185- let slice2 = TimeSliceID {
217+ let time_slice = TimeSliceID {
186218 season : "winter" . into ( ) ,
187219 time_of_day : "night" . into ( ) ,
188220 } ;
189- let ts_info2 = TimeSliceInfo {
190- seasons : [ "winter" . into ( ) ] . into ( ) ,
221+ let time_slice_info = TimeSliceInfo {
222+ seasons : [ ( "winter" . into ( ) , 1.0 ) ] . into ( ) ,
191223 times_of_day : [ "day" . into ( ) , "night" . into ( ) ] . into ( ) ,
192- fractions : [ ( slice . clone ( ) , 0.5 ) , ( slice2 . clone ( ) , 0.5 ) ] . into ( ) ,
224+ time_slices : [ ( time_slice . clone ( ) , 0.5 ) , ( time_slice . clone ( ) , 0.5 ) ] . into ( ) ,
193225 } ;
194- assert ! ( validate_commodity_cost_map( & map, & regions, & milestone_years, & ts_info2) . is_err( ) ) ;
226+ assert_error ! (
227+ validate_commodity_cost_map( & cost_map, & region_ids, & [ 2020 ] , & time_slice_info) ,
228+ "Missing cost for region GBR, year 2020, time slice winter.night"
229+ ) ;
195230 }
196231}
0 commit comments