Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
112
tasks_gen/train/G1062/reference/parking_pricer.clas.abap
Normal file
112
tasks_gen/train/G1062/reference/parking_pricer.clas.abap
Normal file
@@ -0,0 +1,112 @@
|
||||
CLASS {{p}}parking_pricer DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_vehicle TYPE c LENGTH 1.
|
||||
TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_vehicle_car TYPE ty_vehicle VALUE 'C',
|
||||
c_vehicle_motorcycle TYPE ty_vehicle VALUE 'M',
|
||||
c_vehicle_van TYPE ty_vehicle VALUE 'V'.
|
||||
|
||||
METHODS calculate_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
iv_vehicle TYPE ty_vehicle
|
||||
iv_lost_ticket TYPE abap_bool
|
||||
RETURNING VALUE(rv_fee) TYPE ty_fee.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_grace_minutes TYPE i VALUE 15,
|
||||
c_minutes_per_hour TYPE i VALUE 60,
|
||||
c_no_fee TYPE ty_fee VALUE '0.00',
|
||||
c_car_rate TYPE ty_fee VALUE '2.00',
|
||||
c_car_cap TYPE ty_fee VALUE '20.00',
|
||||
c_car_lost_fee TYPE ty_fee VALUE '25.00',
|
||||
c_moto_rate TYPE ty_fee VALUE '1.00',
|
||||
c_moto_cap TYPE ty_fee VALUE '10.00',
|
||||
c_moto_lost_fee TYPE ty_fee VALUE '15.00',
|
||||
c_van_rate TYPE ty_fee VALUE '3.00',
|
||||
c_van_cap TYPE ty_fee VALUE '24.00',
|
||||
c_van_lost_fee TYPE ty_fee VALUE '35.00',
|
||||
c_default_lost_fee TYPE ty_fee VALUE '25.00'.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_tariff,
|
||||
vehicle TYPE ty_vehicle,
|
||||
rate TYPE ty_fee,
|
||||
cap TYPE ty_fee,
|
||||
lost_fee TYPE ty_fee,
|
||||
END OF ty_tariff,
|
||||
tt_tariff TYPE HASHED TABLE OF ty_tariff WITH UNIQUE KEY vehicle.
|
||||
|
||||
METHODS get_tariff
|
||||
IMPORTING iv_vehicle TYPE ty_vehicle
|
||||
RETURNING VALUE(rs_tariff) TYPE ty_tariff.
|
||||
METHODS all_tariffs
|
||||
RETURNING VALUE(rt_tariff) TYPE tt_tariff.
|
||||
METHODS started_hours
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_hours) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}parking_pricer IMPLEMENTATION.
|
||||
METHOD calculate_fee.
|
||||
DATA(ls_tariff) = get_tariff( iv_vehicle ).
|
||||
|
||||
IF iv_lost_ticket = abap_true.
|
||||
rv_fee = ls_tariff-lost_fee.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF iv_minutes <= c_grace_minutes.
|
||||
rv_fee = c_no_fee.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_fee = started_hours( iv_minutes ) * ls_tariff-rate.
|
||||
IF rv_fee > ls_tariff-cap.
|
||||
rv_fee = ls_tariff-cap.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_tariff.
|
||||
DATA(lt_tariff) = all_tariffs( ).
|
||||
ASSIGN lt_tariff[ vehicle = iv_vehicle ] TO FIELD-SYMBOL(<ls_tariff>).
|
||||
IF sy-subrc = 0.
|
||||
rs_tariff = <ls_tariff>.
|
||||
ELSE.
|
||||
rs_tariff = VALUE #( vehicle = iv_vehicle
|
||||
rate = c_no_fee
|
||||
cap = c_no_fee
|
||||
lost_fee = c_default_lost_fee ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD all_tariffs.
|
||||
rt_tariff = VALUE #(
|
||||
( vehicle = c_vehicle_car
|
||||
rate = c_car_rate
|
||||
cap = c_car_cap
|
||||
lost_fee = c_car_lost_fee )
|
||||
( vehicle = c_vehicle_motorcycle
|
||||
rate = c_moto_rate
|
||||
cap = c_moto_cap
|
||||
lost_fee = c_moto_lost_fee )
|
||||
( vehicle = c_vehicle_van
|
||||
rate = c_van_rate
|
||||
cap = c_van_cap
|
||||
lost_fee = c_van_lost_fee ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD started_hours.
|
||||
rv_hours = iv_minutes DIV c_minutes_per_hour.
|
||||
IF iv_minutes MOD c_minutes_per_hour <> 0.
|
||||
rv_hours = rv_hours + 1.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,72 @@
|
||||
CLASS ltc_parking_pricer DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}parking_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS assert_fee
|
||||
IMPORTING iv_expected TYPE {{p}}parking_pricer=>ty_fee
|
||||
iv_minutes TYPE i
|
||||
iv_vehicle TYPE {{p}}parking_pricer=>ty_vehicle
|
||||
iv_lost TYPE abap_bool DEFAULT abap_false.
|
||||
|
||||
METHODS car_short_stay FOR TESTING.
|
||||
METHODS grace_period_free FOR TESTING.
|
||||
METHODS started_hour_rounds_up FOR TESTING.
|
||||
METHODS daily_cap_applies FOR TESTING.
|
||||
METHODS lost_ticket_is_flat FOR TESTING.
|
||||
METHODS unknown_vehicle_is_free FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_parking_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}parking_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_expected
|
||||
act = mo_cut->calculate_fee( iv_minutes = iv_minutes
|
||||
iv_vehicle = iv_vehicle
|
||||
iv_lost_ticket = iv_lost ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD car_short_stay.
|
||||
assert_fee( iv_expected = '4.00'
|
||||
iv_minutes = 90
|
||||
iv_vehicle = {{p}}parking_pricer=>c_vehicle_car ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grace_period_free.
|
||||
assert_fee( iv_expected = '0.00'
|
||||
iv_minutes = 10
|
||||
iv_vehicle = {{p}}parking_pricer=>c_vehicle_car ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD started_hour_rounds_up.
|
||||
assert_fee( iv_expected = '4.00'
|
||||
iv_minutes = 61
|
||||
iv_vehicle = {{p}}parking_pricer=>c_vehicle_car ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD daily_cap_applies.
|
||||
assert_fee( iv_expected = '20.00'
|
||||
iv_minutes = 900
|
||||
iv_vehicle = {{p}}parking_pricer=>c_vehicle_car ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lost_ticket_is_flat.
|
||||
assert_fee( iv_expected = '15.00'
|
||||
iv_minutes = 10
|
||||
iv_vehicle = {{p}}parking_pricer=>c_vehicle_motorcycle
|
||||
iv_lost = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_vehicle_is_free.
|
||||
assert_fee( iv_expected = '0.00'
|
||||
iv_minutes = 120
|
||||
iv_vehicle = 'X' ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user