Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View 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.

View File

@@ -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.