Step F first pass: 81/92 accepted; budget floor 60 calls; rejected slots moved for regeneration

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
Kral
2026-10-03 12:10:52 +02:00
parent d3250acfb8
commit 39769afce8
741 changed files with 40573 additions and 317 deletions

View File

@@ -0,0 +1,64 @@
CLASS {{p}}t14_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS fare_for IMPORTING iv_distance TYPE decfloat34 iv_wait TYPE i iv_time TYPE t
RETURNING VALUE(rv_fare) TYPE decfloat34.
METHODS day_fare FOR TESTING.
METHODS night_fare FOR TESTING.
METHODS minimum_fare FOR TESTING.
METHODS invalid_distance FOR TESTING.
ENDCLASS.
CLASS {{p}}t14_test IMPLEMENTATION.
METHOD fare_for.
CALL FUNCTION '{{P}}TAXI_FARE'
EXPORTING
iv_distance_km = iv_distance
iv_wait_min = iv_wait
iv_start_time = iv_time
IMPORTING
ev_fare = rv_fare
EXCEPTIONS
invalid_distance = 1
invalid_wait = 2
OTHERS = 3.
cl_abap_unit_assert=>assert_subrc( exp = 0 ).
ENDMETHOD.
METHOD day_fare.
DATA lv_expected TYPE decfloat34 VALUE '25.50'.
DATA lv_actual TYPE decfloat34.
lv_actual = fare_for( iv_distance = 10 iv_wait = 0 iv_time = '120000' ).
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ).
ENDMETHOD.
METHOD night_fare.
DATA lv_expected TYPE decfloat34 VALUE '30.60'.
DATA lv_actual TYPE decfloat34.
lv_actual = fare_for( iv_distance = 10 iv_wait = 0 iv_time = '230000' ).
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ).
ENDMETHOD.
METHOD minimum_fare.
DATA lv_expected TYPE decfloat34 VALUE '5.00'.
DATA lv_actual TYPE decfloat34.
lv_actual = fare_for( iv_distance = 0 iv_wait = 0 iv_time = '120000' ).
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ).
ENDMETHOD.
METHOD invalid_distance.
DATA lv_fare TYPE decfloat34.
CALL FUNCTION '{{P}}TAXI_FARE'
EXPORTING
iv_distance_km = -1
iv_wait_min = 0
iv_start_time = '120000'
IMPORTING
ev_fare = lv_fare
EXCEPTIONS
invalid_distance = 1
OTHERS = 2.
cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,50 @@
FUNCTION {{p}}taxi_fare
IMPORTING
iv_distance_km TYPE decfloat34
iv_wait_min TYPE i
iv_start_time TYPE t
EXPORTING
ev_fare TYPE decfloat34
EXCEPTIONS
invalid_distance
invalid_wait.
CONSTANTS: lc_base_fare TYPE decfloat34 VALUE '3.50',
lc_km_rate_1 TYPE decfloat34 VALUE '2.20',
lc_km_rate_2 TYPE decfloat34 VALUE '1.80',
lc_wait_rate TYPE decfloat34 VALUE '0.40',
lc_night_factor TYPE decfloat34 VALUE '1.2',
lc_min_fare TYPE decfloat34 VALUE '5.00',
lc_free_km TYPE decfloat34 VALUE '10'.
IF iv_distance_km < 0.
RAISE invalid_distance.
ENDIF.
IF iv_wait_min < 0.
RAISE invalid_wait.
ENDIF.
DATA lv_distance_fare TYPE decfloat34.
IF iv_distance_km <= lc_free_km.
lv_distance_fare = iv_distance_km * lc_km_rate_1.
ELSE.
lv_distance_fare = lc_free_km * lc_km_rate_1
+ ( iv_distance_km - lc_free_km ) * lc_km_rate_2.
ENDIF.
DATA lv_sum TYPE decfloat34.
lv_sum = lc_base_fare + lv_distance_fare.
IF iv_start_time >= '220000' OR iv_start_time < '060000'.
lv_sum = lv_sum * lc_night_factor.
ENDIF.
lv_sum = lv_sum + iv_wait_min * lc_wait_rate.
ev_fare = round( val = lv_sum dec = 2 mode = cl_abap_math=>round_half_up ).
IF ev_fare < lc_min_fare.
ev_fare = lc_min_fare.
ENDIF.
ENDFUNCTION.