1- use crate :: helpers:: { create_lc101_problem, get_job_ids, get_vehicle_capacity} ;
1+ use crate :: helpers:: { LilimBuilder , create_lc101_problem, get_job_ids, get_vehicle_capacity} ;
2+ use crate :: lilim:: LilimProblem ;
3+ use vrp_core:: construction:: features:: JobDemandDimension ;
4+ use vrp_core:: models:: common:: { Demand , SingleDimLoad } ;
5+ use vrp_core:: models:: problem:: Job ;
26
37#[ test]
48fn can_read_lilim_format_from_test_file ( ) {
@@ -9,3 +13,47 @@ fn can_read_lilim_format_from_test_file() {
913 assert_eq ! ( problem. fleet. vehicles. len( ) , 25 ) ;
1014 assert_eq ! ( get_vehicle_capacity( & problem) , 200 ) ;
1115}
16+
17+ #[ test]
18+ fn can_read_lilim_format_properly ( ) {
19+ let problem = LilimBuilder :: new ( )
20+ . set_vehicle ( ( 3 , 15 ) )
21+ . add_customer ( ( 0 , 0 , 0 , 0 , 0 , 1000 , 0 , 0 , 0 ) ) // depot
22+ . add_customer ( ( 1 , 1 , 0 , 15 , 0 , 1000 , 5 , 0 , 2 ) ) // pickup, delivers to 2
23+ . add_customer ( ( 2 , 2 , 0 , -15 , 0 , 1000 , 5 , 1 , 0 ) ) // delivery, picked from 1
24+ . add_customer ( ( 3 , 3 , 0 , 10 , 0 , 1000 , 3 , 0 , 4 ) ) // pickup, delivers to 4
25+ . add_customer ( ( 4 , 4 , 0 , -10 , 0 , 1000 , 3 , 3 , 0 ) ) // delivery, picked from 3
26+ . build ( )
27+ . read_lilim ( false )
28+ . unwrap ( ) ;
29+
30+ assert_eq ! ( problem. fleet. vehicles. len( ) , 3 ) ;
31+ assert_eq ! ( get_vehicle_capacity( & problem) , 15 ) ;
32+ assert_eq ! ( get_job_ids( & problem) , vec![ "0" , "1" ] ) ;
33+
34+ // verify demands on sub-jobs of each multi job
35+ let jobs: Vec < _ > = problem. jobs . all ( ) . into_iter ( ) . collect ( ) ;
36+
37+ let ( pickup_demand_0, delivery_demand_0) = get_multi_job_demands ( & jobs[ 0 ] ) ;
38+ assert_eq ! ( pickup_demand_0. pickup. 1 . value, 15 ) ;
39+ assert_eq ! ( pickup_demand_0. delivery. 1 . value, 0 ) ;
40+ assert_eq ! ( delivery_demand_0. delivery. 1 . value, 15 ) ;
41+ assert_eq ! ( delivery_demand_0. pickup. 1 . value, 0 ) ;
42+
43+ let ( pickup_demand_1, delivery_demand_1) = get_multi_job_demands ( & jobs[ 1 ] ) ;
44+ assert_eq ! ( pickup_demand_1. pickup. 1 . value, 10 ) ;
45+ assert_eq ! ( pickup_demand_1. delivery. 1 . value, 0 ) ;
46+ assert_eq ! ( delivery_demand_1. delivery. 1 . value, 10 ) ;
47+ assert_eq ! ( delivery_demand_1. pickup. 1 . value, 0 ) ;
48+ }
49+
50+ fn get_multi_job_demands ( job : & Job ) -> ( & Demand < SingleDimLoad > , & Demand < SingleDimLoad > ) {
51+ match job {
52+ Job :: Multi ( multi) => {
53+ let pickup = multi. jobs [ 0 ] . dimens . get_job_demand ( ) . unwrap ( ) ;
54+ let delivery = multi. jobs [ 1 ] . dimens . get_job_demand ( ) . unwrap ( ) ;
55+ ( pickup, delivery)
56+ }
57+ _ => panic ! ( "expected multi job" ) ,
58+ }
59+ }
0 commit comments