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:
146
tasks_gen/eval/G0191/reference/locksmith_pricer.clas.abap
Normal file
146
tasks_gen/eval/G0191/reference/locksmith_pricer.clas.abap
Normal file
@@ -0,0 +1,146 @@
|
||||
CLASS {{p}}locksmith_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_locksmith_pricer.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_job_key TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'K',
|
||||
c_job_lockout TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'L',
|
||||
c_job_rekey TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'R',
|
||||
c_key_std TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'S',
|
||||
c_key_sec TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'Y',
|
||||
c_key_elec TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'E',
|
||||
c_call_late TYPE {{p}}if_locksmith_pricer=>ty_callout VALUE 'A',
|
||||
c_call_week TYPE {{p}}if_locksmith_pricer=>ty_callout VALUE 'W',
|
||||
c_fee_std TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '89.00',
|
||||
c_fee_late TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '149.00',
|
||||
c_fee_week TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '179.00',
|
||||
c_rekey_base TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '35.00',
|
||||
c_rate_dup_s TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '4.50',
|
||||
c_rate_dup_y TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '9.80',
|
||||
c_rate_dup_e TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '24.00',
|
||||
c_rate_rek_s TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '6.00',
|
||||
c_rate_rek_y TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '11.00',
|
||||
c_rate_rek_e TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '26.00',
|
||||
c_qty_mid TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '5.00',
|
||||
c_qty_high TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '20.00',
|
||||
c_disc_mid TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '10.00',
|
||||
c_disc_high TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '20.00',
|
||||
c_percent TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '100.00',
|
||||
c_nothing TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '0.00'.
|
||||
|
||||
METHODS duplicate_price
|
||||
IMPORTING iv_quantity TYPE i
|
||||
iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
||||
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
METHODS rekey_price
|
||||
IMPORTING iv_quantity TYPE i
|
||||
iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
||||
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
METHODS lockout_price
|
||||
IMPORTING iv_callout TYPE {{p}}if_locksmith_pricer=>ty_callout
|
||||
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
METHODS dup_key_rate
|
||||
IMPORTING iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
||||
RETURNING VALUE(rv_rate) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
METHODS rekey_key_rate
|
||||
IMPORTING iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
||||
RETURNING VALUE(rv_rate) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_quantity TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}locksmith_pricer IMPLEMENTATION.
|
||||
METHOD {{p}}if_locksmith_pricer~calculate_price.
|
||||
CASE iv_job_type.
|
||||
WHEN c_job_key.
|
||||
rv_price = duplicate_price( iv_quantity = iv_quantity
|
||||
iv_key_type = iv_key_type ).
|
||||
WHEN c_job_lockout.
|
||||
rv_price = lockout_price( iv_callout = iv_callout ).
|
||||
WHEN c_job_rekey.
|
||||
rv_price = rekey_price( iv_quantity = iv_quantity
|
||||
iv_key_type = iv_key_type ).
|
||||
WHEN OTHERS.
|
||||
rv_price = c_nothing.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD duplicate_price.
|
||||
DATA lv_qty TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
lv_qty = iv_quantity.
|
||||
IF lv_qty < 1.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(lv_rate) = dup_key_rate( iv_key_type ).
|
||||
IF lv_rate = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_gross TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
lv_gross = lv_rate * lv_qty.
|
||||
DATA(lv_discount) = discount_percent( iv_quantity ).
|
||||
rv_price = lv_gross - lv_gross * lv_discount / c_percent.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rekey_price.
|
||||
DATA lv_qty TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
lv_qty = iv_quantity.
|
||||
IF lv_qty < 1.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(lv_rate) = rekey_key_rate( iv_key_type ).
|
||||
IF lv_rate = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_price = lv_qty * ( c_rekey_base + lv_rate ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lockout_price.
|
||||
CASE iv_callout.
|
||||
WHEN c_call_week.
|
||||
rv_price = c_fee_week.
|
||||
WHEN c_call_late.
|
||||
rv_price = c_fee_late.
|
||||
WHEN OTHERS.
|
||||
rv_price = c_fee_std.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dup_key_rate.
|
||||
CASE iv_key_type.
|
||||
WHEN c_key_std.
|
||||
rv_rate = c_rate_dup_s.
|
||||
WHEN c_key_sec.
|
||||
rv_rate = c_rate_dup_y.
|
||||
WHEN c_key_elec.
|
||||
rv_rate = c_rate_dup_e.
|
||||
WHEN OTHERS.
|
||||
rv_rate = c_nothing.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rekey_key_rate.
|
||||
CASE iv_key_type.
|
||||
WHEN c_key_std.
|
||||
rv_rate = c_rate_rek_s.
|
||||
WHEN c_key_sec.
|
||||
rv_rate = c_rate_rek_y.
|
||||
WHEN c_key_elec.
|
||||
rv_rate = c_rate_rek_e.
|
||||
WHEN OTHERS.
|
||||
rv_rate = c_nothing.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_quantity >= c_qty_high.
|
||||
rv_percent = c_disc_high.
|
||||
ELSEIF iv_quantity >= c_qty_mid.
|
||||
rv_percent = c_disc_mid.
|
||||
ELSE.
|
||||
rv_percent = c_nothing.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,74 @@
|
||||
CLASS ltc_locksmith_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_locksmith_pricer.
|
||||
METHODS setup.
|
||||
METHODS dup_standard FOR TESTING.
|
||||
METHODS dup_discount FOR TESTING.
|
||||
METHODS dup_high_discount FOR TESTING.
|
||||
METHODS lockout_late FOR TESTING.
|
||||
METHODS rekey_standard FOR TESTING.
|
||||
METHODS unknown_job FOR TESTING.
|
||||
METHODS assert_price
|
||||
IMPORTING iv_expected TYPE {{p}}if_locksmith_pricer=>ty_amount
|
||||
iv_actual TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_locksmith_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}locksmith_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dup_standard.
|
||||
assert_price( iv_expected = '13.50'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'K'
|
||||
iv_quantity = 3
|
||||
iv_key_type = 'S'
|
||||
iv_callout = 'N' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dup_discount.
|
||||
assert_price( iv_expected = '20.25'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'K'
|
||||
iv_quantity = 5
|
||||
iv_key_type = 'S'
|
||||
iv_callout = 'N' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dup_high_discount.
|
||||
assert_price( iv_expected = '156.80'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'K'
|
||||
iv_quantity = 20
|
||||
iv_key_type = 'Y'
|
||||
iv_callout = 'N' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lockout_late.
|
||||
assert_price( iv_expected = '149.00'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'L'
|
||||
iv_quantity = 0
|
||||
iv_key_type = 'X'
|
||||
iv_callout = 'A' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rekey_standard.
|
||||
assert_price( iv_expected = '82.00'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'R'
|
||||
iv_quantity = 2
|
||||
iv_key_type = 'S'
|
||||
iv_callout = 'N' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_job.
|
||||
assert_price( iv_expected = '0.00'
|
||||
iv_actual = mo_cut->calculate_price( iv_job_type = 'X'
|
||||
iv_quantity = 1
|
||||
iv_key_type = 'S'
|
||||
iv_callout = 'N' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_price.
|
||||
cl_abap_unit_assert=>assert_equals( exp = iv_expected
|
||||
act = iv_actual ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user