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:
125
tasks_gen/eval/G0138/reference/cake_pricer.clas.abap
Normal file
125
tasks_gen/eval/G0138/reference/cake_pricer.clas.abap
Normal file
@@ -0,0 +1,125 @@
|
||||
CLASS {{p}}cake_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
TYPES ty_filling TYPE c LENGTH 1.
|
||||
TYPES ty_decoration TYPE c LENGTH 1.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_size TYPE i
|
||||
iv_layers TYPE i
|
||||
iv_filling TYPE ty_filling
|
||||
iv_decoration TYPE ty_decoration
|
||||
iv_express TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_price TYPE ty_price VALUE '12.00',
|
||||
c_min_price TYPE ty_price VALUE '15.00',
|
||||
c_min_size TYPE i VALUE 16,
|
||||
c_free_size TYPE i VALUE 20,
|
||||
c_photo_size TYPE i VALUE 24,
|
||||
c_size_rate TYPE ty_price VALUE '0.80',
|
||||
c_layer_rate TYPE ty_price VALUE '4.50',
|
||||
c_express_rate TYPE ty_price VALUE '1.25',
|
||||
c_filling_plain TYPE ty_price VALUE '3.00',
|
||||
c_filling_choc TYPE ty_price VALUE '4.00',
|
||||
c_filling_fruit TYPE ty_price VALUE '5.50',
|
||||
c_deco_flowers TYPE ty_price VALUE '6.00',
|
||||
c_deco_photo TYPE ty_price VALUE '9.50',
|
||||
c_deco_sugar TYPE ty_price VALUE '12.00'.
|
||||
|
||||
METHODS clamp_size
|
||||
IMPORTING iv_size TYPE i
|
||||
RETURNING VALUE(rv_size) TYPE i.
|
||||
METHODS clamp_layers
|
||||
IMPORTING iv_layers TYPE i
|
||||
RETURNING VALUE(rv_layers) TYPE i.
|
||||
METHODS size_surcharge
|
||||
IMPORTING iv_size TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE ty_price.
|
||||
METHODS layer_surcharge
|
||||
IMPORTING iv_layers TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE ty_price.
|
||||
METHODS filling_surcharge
|
||||
IMPORTING iv_filling TYPE ty_filling
|
||||
RETURNING VALUE(rv_amount) TYPE ty_price.
|
||||
METHODS decoration_surcharge
|
||||
IMPORTING iv_decoration TYPE ty_decoration
|
||||
iv_size TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE ty_price.
|
||||
METHODS apply_express
|
||||
IMPORTING iv_amount TYPE ty_price
|
||||
RETURNING VALUE(rv_amount) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}cake_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
DATA(lv_size) = clamp_size( iv_size ).
|
||||
DATA(lv_price) = c_base_price.
|
||||
lv_price = lv_price + size_surcharge( lv_size ).
|
||||
lv_price = lv_price + layer_surcharge( clamp_layers( iv_layers ) ).
|
||||
lv_price = lv_price + filling_surcharge( iv_filling ).
|
||||
lv_price = lv_price + decoration_surcharge( iv_decoration = iv_decoration
|
||||
iv_size = lv_size ).
|
||||
IF iv_express = abap_true.
|
||||
lv_price = apply_express( lv_price ).
|
||||
ENDIF.
|
||||
IF lv_price < c_min_price.
|
||||
rv_price = c_min_price.
|
||||
ELSE.
|
||||
rv_price = lv_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD clamp_size.
|
||||
rv_size = nmax( val1 = iv_size val2 = c_min_size ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD clamp_layers.
|
||||
rv_layers = nmax( val1 = iv_layers val2 = 1 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD size_surcharge.
|
||||
IF iv_size > c_free_size.
|
||||
rv_amount = ( iv_size - c_free_size ) * c_size_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD layer_surcharge.
|
||||
IF iv_layers > 1.
|
||||
rv_amount = ( iv_layers - 1 ) * c_layer_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filling_surcharge.
|
||||
CASE iv_filling.
|
||||
WHEN 'C'.
|
||||
rv_amount = c_filling_choc.
|
||||
WHEN 'F'.
|
||||
rv_amount = c_filling_fruit.
|
||||
WHEN 'N'.
|
||||
CLEAR rv_amount.
|
||||
WHEN OTHERS.
|
||||
rv_amount = c_filling_plain.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD decoration_surcharge.
|
||||
CASE iv_decoration.
|
||||
WHEN 'F'.
|
||||
rv_amount = c_deco_flowers.
|
||||
WHEN 'P'.
|
||||
IF iv_size >= c_photo_size.
|
||||
rv_amount = c_deco_photo.
|
||||
ENDIF.
|
||||
WHEN 'S'.
|
||||
rv_amount = c_deco_sugar.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_express.
|
||||
rv_amount = round( val = iv_amount * c_express_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
62
tasks_gen/eval/G0138/reference/cake_pricer.testclasses.abap
Normal file
62
tasks_gen/eval/G0138/reference/cake_pricer.testclasses.abap
Normal file
@@ -0,0 +1,62 @@
|
||||
CLASS ltc_cake_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_minimum TYPE {{p}}cake_pricer=>ty_price VALUE '15.00',
|
||||
c_big_order TYPE {{p}}cake_pricer=>ty_price VALUE '43.30',
|
||||
c_photo_lo TYPE {{p}}cake_pricer=>ty_price VALUE '20.50',
|
||||
c_express TYPE {{p}}cake_pricer=>ty_price VALUE '39.13'.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}cake_pricer.
|
||||
METHODS setup.
|
||||
METHODS minimum_price FOR TESTING.
|
||||
METHODS size_and_layers FOR TESTING.
|
||||
METHODS photo_print_needs_size FOR TESTING.
|
||||
METHODS express_surcharge FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_cake_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}cake_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_price.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_minimum
|
||||
act = mo_cut->calculate_price( iv_size = 16
|
||||
iv_layers = 1
|
||||
iv_filling = 'N'
|
||||
iv_decoration = 'N'
|
||||
iv_express = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD size_and_layers.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_big_order
|
||||
act = mo_cut->calculate_price( iv_size = 26
|
||||
iv_layers = 3
|
||||
iv_filling = 'F'
|
||||
iv_decoration = 'S'
|
||||
iv_express = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_print_needs_size.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_photo_lo
|
||||
act = mo_cut->calculate_price( iv_size = 20
|
||||
iv_layers = 2
|
||||
iv_filling = 'C'
|
||||
iv_decoration = 'P'
|
||||
iv_express = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD express_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_express
|
||||
act = mo_cut->calculate_price( iv_size = 26
|
||||
iv_layers = 2
|
||||
iv_filling = 'C'
|
||||
iv_decoration = 'F'
|
||||
iv_express = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user