CLASS ltc_toll_calc DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_km TYPE decfloat34 iv_class TYPE i iv_axles TYPE i RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS is_rejected IMPORTING iv_km TYPE decfloat34 iv_class TYPE i iv_axles TYPE i RETURNING VALUE(rv_rejected) TYPE abap_bool. METHODS rate_and_surcharge FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS rejects_invalid FOR TESTING. ENDCLASS. CLASS ltc_toll_calc IMPLEMENTATION. METHOD fee_for. TRY. rv_fee = NEW {{p}}toll_calc( )->calculate( iv_distance_km = iv_km iv_weight_class = iv_class iv_axles = iv_axles ). CATCH cx_abap_invalid_value. rv_fee = -1. ENDTRY. ENDMETHOD. METHOD is_rejected. DATA lv_fee TYPE decfloat34. lv_fee = fee_for( iv_km = iv_km iv_class = iv_class iv_axles = iv_axles ). rv_rejected = boolc( lv_fee < 0 ). ENDMETHOD. METHOD rate_and_surcharge. DATA lv_fee TYPE decfloat34. lv_fee = fee_for( iv_km = 100 iv_class = 1 iv_axles = 2 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = lv_fee ). lv_fee = fee_for( iv_km = 100 iv_class = 4 iv_axles = 5 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '25.30' ) act = lv_fee ). ENDMETHOD. METHOD minimum_fee. DATA lv_fee TYPE decfloat34. lv_fee = fee_for( iv_km = 1 iv_class = 1 iv_axles = 2 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1.00' ) act = lv_fee ). ENDMETHOD. METHOD rejects_invalid. DATA lv_rejected TYPE abap_bool. lv_rejected = is_rejected( iv_km = -1 iv_class = 1 iv_axles = 2 ). cl_abap_unit_assert=>assert_true( act = lv_rejected ). lv_rejected = is_rejected( iv_km = 100 iv_class = 5 iv_axles = 2 ). cl_abap_unit_assert=>assert_true( act = lv_rejected ). lv_rejected = is_rejected( iv_km = 100 iv_class = 1 iv_axles = 6 ). cl_abap_unit_assert=>assert_true( act = lv_rejected ). ENDMETHOD. ENDCLASS.