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:
64
tasks_gen/eval/G0158/reference/t14_test.clas.abap
Normal file
64
tasks_gen/eval/G0158/reference/t14_test.clas.abap
Normal 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.
|
||||
50
tasks_gen/eval/G0158/reference/taxi_fare.func.abap
Normal file
50
tasks_gen/eval/G0158/reference/taxi_fare.func.abap
Normal 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.
|
||||
Reference in New Issue
Block a user