Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
71
tasks_gen/train/G1150/reference/farrier_fee.func.abap
Normal file
71
tasks_gen/train/G1150/reference/farrier_fee.func.abap
Normal file
@@ -0,0 +1,71 @@
|
||||
FUNCTION {{p}}farrier_fee
|
||||
IMPORTING
|
||||
iv_horses TYPE i
|
||||
iv_km TYPE decfloat34
|
||||
iv_new_shoes TYPE abap_bool
|
||||
iv_contract TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_fee TYPE decfloat34
|
||||
ev_weeks TYPE i
|
||||
ev_reject TYPE abap_bool
|
||||
EXCEPTIONS
|
||||
invalid_horses.
|
||||
|
||||
CONSTANTS c_shoeing_rate TYPE decfloat34 VALUE '45'.
|
||||
CONSTANTS c_bulk_rate TYPE decfloat34 VALUE '40'.
|
||||
CONSTANTS c_bulk_from TYPE i VALUE 5.
|
||||
CONSTANTS c_new_shoes_rate TYPE decfloat34 VALUE '30'.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '0.6'.
|
||||
CONSTANTS c_travel_minimum TYPE decfloat34 VALUE '10'.
|
||||
CONSTANTS c_contract_percent TYPE decfloat34 VALUE '88'.
|
||||
CONSTANTS c_full_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_weeks_standard TYPE i VALUE 6.
|
||||
CONSTANTS c_weeks_contract TYPE i VALUE 4.
|
||||
|
||||
IF iv_horses < 0.
|
||||
RAISE invalid_horses.
|
||||
ENDIF.
|
||||
|
||||
IF iv_horses = 0.
|
||||
ev_reject = abap_true.
|
||||
ev_fee = 0.
|
||||
ev_weeks = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ev_reject = abap_false.
|
||||
|
||||
* Next visit: every six weeks, contract stables every four weeks.
|
||||
ev_weeks = c_weeks_standard.
|
||||
IF iv_contract = abap_true.
|
||||
ev_weeks = c_weeks_contract.
|
||||
ENDIF.
|
||||
|
||||
* Shoeing fee: the first four horses cost the standard rate, every further
|
||||
* horse costs the bulk rate.
|
||||
DATA(lv_bulk_horses) = iv_horses - c_bulk_from + 1.
|
||||
IF lv_bulk_horses < 0.
|
||||
lv_bulk_horses = 0.
|
||||
ENDIF.
|
||||
DATA(lv_standard_horses) = iv_horses - lv_bulk_horses.
|
||||
ev_fee = lv_standard_horses * c_shoeing_rate + lv_bulk_horses * c_bulk_rate.
|
||||
|
||||
* New shoes are charged for every horse.
|
||||
IF iv_new_shoes = abap_true.
|
||||
ev_fee = ev_fee + iv_horses * c_new_shoes_rate.
|
||||
ENDIF.
|
||||
|
||||
* Travel: a rate per kilometre, at least the minimum, rounded up to a whole
|
||||
* euro.
|
||||
DATA(lv_travel) = iv_km * c_km_rate.
|
||||
IF lv_travel < c_travel_minimum.
|
||||
lv_travel = c_travel_minimum.
|
||||
ENDIF.
|
||||
ev_fee = ev_fee + ceil( lv_travel ).
|
||||
|
||||
* Contract stables get a discount on the whole visit.
|
||||
IF iv_contract = abap_true.
|
||||
ev_fee = ev_fee * c_contract_percent / c_full_percent.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
108
tasks_gen/train/G1150/reference/farrier_test.clas.abap
Normal file
108
tasks_gen/train/G1150/reference/farrier_test.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}farrier_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS run_visit
|
||||
IMPORTING iv_horses TYPE i
|
||||
iv_km TYPE decfloat34
|
||||
iv_new_shoes TYPE abap_bool
|
||||
iv_contract TYPE abap_bool
|
||||
EXPORTING ev_fee TYPE decfloat34
|
||||
ev_weeks TYPE i
|
||||
ev_reject TYPE abap_bool
|
||||
ev_subrc TYPE sysubrc.
|
||||
METHODS standard_visit FOR TESTING.
|
||||
METHODS bulk_visit FOR TESTING.
|
||||
METHODS travel_rules FOR TESTING.
|
||||
METHODS contract_visit FOR TESTING.
|
||||
METHODS rejected_and_invalid FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}farrier_test IMPLEMENTATION.
|
||||
METHOD run_visit.
|
||||
CALL FUNCTION '{{P}}FARRIER_FEE'
|
||||
EXPORTING
|
||||
iv_horses = iv_horses
|
||||
iv_km = iv_km
|
||||
iv_new_shoes = iv_new_shoes
|
||||
iv_contract = iv_contract
|
||||
IMPORTING
|
||||
ev_fee = ev_fee
|
||||
ev_weeks = ev_weeks
|
||||
ev_reject = ev_reject
|
||||
EXCEPTIONS
|
||||
invalid_horses = 1
|
||||
OTHERS = 2.
|
||||
ev_subrc = sy-subrc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD standard_visit.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_weeks TYPE i.
|
||||
DATA lv_reject TYPE abap_bool.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_expected TYPE decfloat34 VALUE '100'.
|
||||
run_visit( EXPORTING iv_horses = 2 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_false( lv_reject ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 6 act = lv_weeks ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bulk_visit.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_weeks TYPE i.
|
||||
DATA lv_reject TYPE abap_bool.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_expected TYPE decfloat34 VALUE '230'.
|
||||
run_visit( EXPORTING iv_horses = 5 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 6 act = lv_weeks ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_rules.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_weeks TYPE i.
|
||||
DATA lv_reject TYPE abap_bool.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_minimum TYPE decfloat34 VALUE '55'.
|
||||
DATA lv_rounded TYPE decfloat34 VALUE '61'.
|
||||
run_visit( EXPORTING iv_horses = 1 iv_km = 3 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_minimum act = lv_fee ).
|
||||
run_visit( EXPORTING iv_horses = 1 iv_km = 26 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_rounded act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD contract_visit.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_weeks TYPE i.
|
||||
DATA lv_reject TYPE abap_bool.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_expected TYPE decfloat34 VALUE '352'.
|
||||
run_visit( EXPORTING iv_horses = 5 iv_km = 50 iv_new_shoes = abap_true iv_contract = abap_true
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = lv_weeks ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejected_and_invalid.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_weeks TYPE i.
|
||||
DATA lv_reject TYPE abap_bool.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_expected TYPE decfloat34 VALUE '0'.
|
||||
run_visit( EXPORTING iv_horses = 0 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_true( lv_reject ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_weeks ).
|
||||
run_visit( EXPORTING iv_horses = -1 iv_km = 10 iv_new_shoes = abap_false iv_contract = abap_false
|
||||
IMPORTING ev_fee = lv_fee ev_weeks = lv_weeks ev_reject = lv_reject ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_subrc ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user