Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
79
tasks_gen/eval/G0188/reference/laundry_pricer.clas.abap
Normal file
79
tasks_gen/eval/G0188/reference/laundry_pricer.clas.abap
Normal file
@@ -0,0 +1,79 @@
|
||||
CLASS {{p}}laundry_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
ty_weight_kg TYPE p LENGTH 5 DECIMALS 2,
|
||||
ty_amount TYPE p LENGTH 8 DECIMALS 2,
|
||||
ty_service TYPE c LENGTH 4.
|
||||
CONSTANTS:
|
||||
c_service_wash TYPE ty_service VALUE 'WASH',
|
||||
c_service_dry TYPE ty_service VALUE 'DRY',
|
||||
c_service_iron TYPE ty_service VALUE 'IRON'.
|
||||
METHODS calculate
|
||||
IMPORTING
|
||||
iv_weight_kg TYPE ty_weight_kg
|
||||
iv_service TYPE ty_service
|
||||
iv_express TYPE abap_bool
|
||||
iv_member TYPE abap_bool
|
||||
RETURNING
|
||||
VALUE(rv_price) TYPE ty_amount.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_rate_wash TYPE ty_amount VALUE '2.50',
|
||||
c_rate_dry TYPE ty_amount VALUE '4.00',
|
||||
c_rate_iron TYPE ty_amount VALUE '1.50',
|
||||
c_express_fee TYPE ty_amount VALUE '5.00',
|
||||
c_min_price TYPE ty_amount VALUE '10.00',
|
||||
c_member_discount TYPE ty_amount VALUE '0.90'.
|
||||
METHODS rate_per_kg
|
||||
IMPORTING iv_service TYPE ty_service
|
||||
RETURNING VALUE(rv_rate) TYPE ty_amount.
|
||||
METHODS round_currency
|
||||
IMPORTING iv_amount TYPE ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}laundry_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
IF iv_weight_kg <= 0.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA lv_rate TYPE ty_amount.
|
||||
DATA lv_price TYPE ty_amount.
|
||||
lv_rate = rate_per_kg( iv_service ).
|
||||
lv_price = iv_weight_kg * lv_rate.
|
||||
|
||||
IF iv_member = abap_true.
|
||||
lv_price = lv_price * c_member_discount.
|
||||
ENDIF.
|
||||
|
||||
IF iv_express = abap_true.
|
||||
lv_price = lv_price + c_express_fee.
|
||||
ENDIF.
|
||||
|
||||
IF lv_price < c_min_price.
|
||||
lv_price = c_min_price.
|
||||
ENDIF.
|
||||
|
||||
rv_price = round_currency( lv_price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rate_per_kg.
|
||||
CASE iv_service.
|
||||
WHEN c_service_wash.
|
||||
rv_rate = c_rate_wash.
|
||||
WHEN c_service_dry.
|
||||
rv_rate = c_rate_dry.
|
||||
WHEN c_service_iron.
|
||||
rv_rate = c_rate_iron.
|
||||
WHEN OTHERS.
|
||||
rv_rate = c_rate_wash.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_currency.
|
||||
rv_amount = round( val = iv_amount dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,62 @@
|
||||
CLASS ltc_laundry_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}laundry_pricer.
|
||||
METHODS setup.
|
||||
METHODS wash_basic FOR TESTING.
|
||||
METHODS iron_rate FOR TESTING.
|
||||
METHODS member_then_express FOR TESTING.
|
||||
METHODS min_after_discount FOR TESTING.
|
||||
METHODS unknown_service FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_laundry_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}laundry_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD wash_basic.
|
||||
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
|
||||
iv_service = {{p}}laundry_pricer=>c_service_wash
|
||||
iv_express = abap_false
|
||||
iv_member = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
|
||||
act = lv_price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD iron_rate.
|
||||
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '8.00'
|
||||
iv_service = {{p}}laundry_pricer=>c_service_iron
|
||||
iv_express = abap_false
|
||||
iv_member = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '12.00' )
|
||||
act = lv_price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD member_then_express.
|
||||
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '4.00'
|
||||
iv_service = {{p}}laundry_pricer=>c_service_wash
|
||||
iv_express = abap_true
|
||||
iv_member = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '14.00' )
|
||||
act = lv_price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD min_after_discount.
|
||||
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
|
||||
iv_service = {{p}}laundry_pricer=>c_service_wash
|
||||
iv_express = abap_false
|
||||
iv_member = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
|
||||
act = lv_price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_service.
|
||||
DATA(lv_price) = mo_cut->calculate( iv_weight_kg = '2.00'
|
||||
iv_service = 'XXXX'
|
||||
iv_express = abap_false
|
||||
iv_member = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}laundry_pricer=>ty_amount( '10.00' )
|
||||
act = lv_price ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user