Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
152
tasks_gen/train/G1070/reference/shred_pricer.clas.abap
Normal file
152
tasks_gen/train/G1070/reference/shred_pricer.clas.abap
Normal file
@@ -0,0 +1,152 @@
|
||||
CLASS {{p}}shred_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES ty_size TYPE i.
|
||||
TYPES ty_service TYPE c LENGTH 1.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_size,
|
||||
small TYPE ty_size VALUE 60,
|
||||
large TYPE ty_size VALUE 240,
|
||||
END OF c_size.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_service,
|
||||
plant TYPE ty_service VALUE 'P',
|
||||
onsite TYPE ty_service VALUE 'O',
|
||||
END OF c_service.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_boxes TYPE i
|
||||
iv_size TYPE ty_size
|
||||
iv_service TYPE ty_service
|
||||
iv_express TYPE abap_bool
|
||||
iv_contract TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS:
|
||||
c_price_small TYPE ty_price VALUE '8.00',
|
||||
c_price_medium TYPE ty_price VALUE '12.00',
|
||||
c_price_large TYPE ty_price VALUE '18.00',
|
||||
c_onsite_surcharge TYPE ty_price VALUE '3.50',
|
||||
c_express_factor TYPE ty_price VALUE '1.20',
|
||||
c_contract_factor TYPE ty_price VALUE '0.90',
|
||||
c_high_volume_factor TYPE ty_price VALUE '0.90',
|
||||
c_mid_volume_factor TYPE ty_price VALUE '0.95',
|
||||
c_mid_volume_limit TYPE i VALUE 10,
|
||||
c_high_volume_limit TYPE i VALUE 25,
|
||||
c_onsite_minimum TYPE ty_price VALUE '60.00',
|
||||
c_plant_minimum TYPE ty_price VALUE '35.00'.
|
||||
|
||||
METHODS box_price
|
||||
IMPORTING iv_size TYPE ty_size
|
||||
iv_service TYPE ty_service
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS apply_volume_discount
|
||||
IMPORTING iv_boxes TYPE i
|
||||
iv_total TYPE ty_price
|
||||
RETURNING VALUE(rv_total) TYPE ty_price.
|
||||
|
||||
METHODS apply_contract_discount
|
||||
IMPORTING iv_contract TYPE abap_bool
|
||||
iv_total TYPE ty_price
|
||||
RETURNING VALUE(rv_total) TYPE ty_price.
|
||||
|
||||
METHODS apply_express_surcharge
|
||||
IMPORTING iv_express TYPE abap_bool
|
||||
iv_total TYPE ty_price
|
||||
RETURNING VALUE(rv_total) TYPE ty_price.
|
||||
|
||||
METHODS apply_minimum
|
||||
IMPORTING iv_service TYPE ty_service
|
||||
iv_total TYPE ty_price
|
||||
RETURNING VALUE(rv_total) TYPE ty_price.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}shred_pricer IMPLEMENTATION.
|
||||
|
||||
METHOD calculate_price.
|
||||
DATA lv_total TYPE ty_price.
|
||||
|
||||
IF iv_boxes <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_total = iv_boxes * box_price( iv_size = iv_size
|
||||
iv_service = iv_service ).
|
||||
lv_total = apply_volume_discount( iv_boxes = iv_boxes
|
||||
iv_total = lv_total ).
|
||||
lv_total = apply_contract_discount( iv_contract = iv_contract
|
||||
iv_total = lv_total ).
|
||||
lv_total = apply_express_surcharge( iv_express = iv_express
|
||||
iv_total = lv_total ).
|
||||
rv_price = apply_minimum( iv_service = iv_service
|
||||
iv_total = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD box_price.
|
||||
CASE iv_size.
|
||||
WHEN c_size-small.
|
||||
rv_price = c_price_small.
|
||||
WHEN c_size-large.
|
||||
rv_price = c_price_large.
|
||||
WHEN OTHERS.
|
||||
rv_price = c_price_medium.
|
||||
ENDCASE.
|
||||
|
||||
IF iv_service = c_service-onsite.
|
||||
rv_price = rv_price + c_onsite_surcharge.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_volume_discount.
|
||||
IF iv_boxes >= c_high_volume_limit.
|
||||
rv_total = iv_total * c_high_volume_factor.
|
||||
ELSEIF iv_boxes >= c_mid_volume_limit.
|
||||
rv_total = iv_total * c_mid_volume_factor.
|
||||
ELSE.
|
||||
rv_total = iv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_contract_discount.
|
||||
IF iv_contract = abap_true.
|
||||
rv_total = iv_total * c_contract_factor.
|
||||
ELSE.
|
||||
rv_total = iv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_express_surcharge.
|
||||
IF iv_express = abap_true.
|
||||
rv_total = iv_total * c_express_factor.
|
||||
ELSE.
|
||||
rv_total = iv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_minimum.
|
||||
DATA lv_minimum TYPE ty_price.
|
||||
|
||||
CASE iv_service.
|
||||
WHEN c_service-onsite.
|
||||
lv_minimum = c_onsite_minimum.
|
||||
WHEN OTHERS.
|
||||
lv_minimum = c_plant_minimum.
|
||||
ENDCASE.
|
||||
|
||||
IF iv_total < lv_minimum.
|
||||
rv_total = lv_minimum.
|
||||
ELSE.
|
||||
rv_total = iv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,71 @@
|
||||
CLASS ltc_shred_pricer DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}shred_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS expect_price
|
||||
IMPORTING iv_expected TYPE {{p}}shred_pricer=>ty_price
|
||||
iv_boxes TYPE i
|
||||
iv_size TYPE {{p}}shred_pricer=>ty_size
|
||||
iv_service TYPE {{p}}shred_pricer=>ty_service
|
||||
iv_express TYPE abap_bool
|
||||
iv_contract TYPE abap_bool.
|
||||
|
||||
METHODS no_boxes_is_free FOR TESTING.
|
||||
METHODS plant_minimum_charge FOR TESTING.
|
||||
METHODS onsite_minimum_charge FOR TESTING.
|
||||
METHODS volume_discount FOR TESTING.
|
||||
METHODS contract_and_express FOR TESTING.
|
||||
METHODS unknown_size_falls_back FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_shred_pricer IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}shred_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expect_price.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_expected
|
||||
act = mo_cut->calculate_price( iv_boxes = iv_boxes
|
||||
iv_size = iv_size
|
||||
iv_service = iv_service
|
||||
iv_express = iv_express
|
||||
iv_contract = iv_contract ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD no_boxes_is_free.
|
||||
expect_price( iv_expected = '0.00' iv_boxes = 0 iv_size = 120
|
||||
iv_service = 'P' iv_express = abap_false iv_contract = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plant_minimum_charge.
|
||||
expect_price( iv_expected = '35.00' iv_boxes = 1 iv_size = 60
|
||||
iv_service = 'P' iv_express = abap_false iv_contract = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD onsite_minimum_charge.
|
||||
expect_price( iv_expected = '60.00' iv_boxes = 1 iv_size = 60
|
||||
iv_service = 'O' iv_express = abap_false iv_contract = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_discount.
|
||||
expect_price( iv_expected = '182.40' iv_boxes = 24 iv_size = 60
|
||||
iv_service = 'P' iv_express = abap_false iv_contract = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD contract_and_express.
|
||||
expect_price( iv_expected = '437.40' iv_boxes = 25 iv_size = 240
|
||||
iv_service = 'P' iv_express = abap_true iv_contract = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_size_falls_back.
|
||||
expect_price( iv_expected = '114.00' iv_boxes = 10 iv_size = 100
|
||||
iv_service = 'P' iv_express = abap_false iv_contract = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user