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:
113
tasks_gen/eval/G0164/faulty/m0_commission_calc.clas.abap
Normal file
113
tasks_gen/eval/G0164/faulty/m0_commission_calc.clas.abap
Normal file
@@ -0,0 +1,113 @@
|
||||
CLASS {{p}}commission_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_commission.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_exact TYPE p LENGTH 15 DECIMALS 4.
|
||||
|
||||
CONSTANTS:
|
||||
c_rate_base TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0100',
|
||||
c_rate_mid TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0300',
|
||||
c_rate_top TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0500',
|
||||
c_bonus_5 TYPE {{p}}if_commission=>ty_amount VALUE '200',
|
||||
c_bonus_10 TYPE {{p}}if_commission=>ty_amount VALUE '500',
|
||||
c_cap TYPE {{p}}if_commission=>ty_amount VALUE '5000'.
|
||||
|
||||
METHODS base_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS extra_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS top_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS round_to_cents
|
||||
IMPORTING iv_value TYPE ty_exact
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_commission=>ty_amount.
|
||||
METHODS loyalty_bonus
|
||||
IMPORTING iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE {{p}}if_commission=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}commission_calc IMPLEMENTATION.
|
||||
METHOD {{p}}if_commission~calculate.
|
||||
DATA: lv_exact TYPE ty_exact,
|
||||
lv_bonus TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
IF iv_sales <= 0 AND iv_target <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_sales * 2 < iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_exact = base_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + extra_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + top_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
|
||||
lv_bonus = round_to_cents( lv_exact ) + loyalty_bonus( iv_years ).
|
||||
IF lv_bonus > c_cap.
|
||||
lv_bonus = c_cap.
|
||||
ENDIF.
|
||||
rv_bonus = lv_bonus.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_commission.
|
||||
DATA lv_base TYPE ty_exact.
|
||||
|
||||
IF iv_sales < iv_target.
|
||||
lv_base = iv_sales.
|
||||
ELSE.
|
||||
lv_base = iv_target.
|
||||
ENDIF.
|
||||
rv_part = lv_base * c_rate_base.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_commission.
|
||||
DATA: lv_excess TYPE ty_exact,
|
||||
lv_limit TYPE ty_exact.
|
||||
|
||||
IF iv_sales <= iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_excess = iv_sales - iv_target.
|
||||
lv_limit = iv_target / 2.
|
||||
IF lv_excess > lv_limit.
|
||||
lv_excess = lv_limit.
|
||||
ENDIF.
|
||||
rv_part = lv_excess * c_rate_mid.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_commission.
|
||||
DATA: lv_threshold TYPE ty_exact,
|
||||
lv_top TYPE ty_exact.
|
||||
|
||||
lv_threshold = iv_target * 3.
|
||||
lv_threshold = lv_threshold / 2.
|
||||
IF iv_sales <= lv_threshold.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_top = iv_sales - lv_threshold.
|
||||
rv_part = lv_top * c_rate_top.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_to_cents.
|
||||
DATA lv_cents TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
lv_cents = round( val = iv_value dec = 2 ).
|
||||
rv_value = lv_cents.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
IF iv_years >= 10.
|
||||
rv_bonus = c_bonus_10.
|
||||
ELSEIF iv_years >= 5.
|
||||
rv_bonus = c_bonus_5.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
113
tasks_gen/eval/G0164/faulty/m1_commission_calc.clas.abap
Normal file
113
tasks_gen/eval/G0164/faulty/m1_commission_calc.clas.abap
Normal file
@@ -0,0 +1,113 @@
|
||||
CLASS {{p}}commission_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_commission.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_exact TYPE p LENGTH 15 DECIMALS 4.
|
||||
|
||||
CONSTANTS:
|
||||
c_rate_base TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0100',
|
||||
c_rate_mid TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0300',
|
||||
c_rate_top TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0500',
|
||||
c_bonus_5 TYPE {{p}}if_commission=>ty_amount VALUE '200',
|
||||
c_bonus_10 TYPE {{p}}if_commission=>ty_amount VALUE '500',
|
||||
c_cap TYPE {{p}}if_commission=>ty_amount VALUE '5000'.
|
||||
|
||||
METHODS base_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS extra_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS top_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS round_to_cents
|
||||
IMPORTING iv_value TYPE ty_exact
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_commission=>ty_amount.
|
||||
METHODS loyalty_bonus
|
||||
IMPORTING iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE {{p}}if_commission=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}commission_calc IMPLEMENTATION.
|
||||
METHOD {{p}}if_commission~calculate.
|
||||
DATA: lv_exact TYPE ty_exact,
|
||||
lv_bonus TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
IF iv_sales <= 0 OR iv_target <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_sales / 2 < iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_exact = base_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + extra_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + top_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
|
||||
lv_bonus = round_to_cents( lv_exact ) + loyalty_bonus( iv_years ).
|
||||
IF lv_bonus > c_cap.
|
||||
lv_bonus = c_cap.
|
||||
ENDIF.
|
||||
rv_bonus = lv_bonus.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_commission.
|
||||
DATA lv_base TYPE ty_exact.
|
||||
|
||||
IF iv_sales < iv_target.
|
||||
lv_base = iv_sales.
|
||||
ELSE.
|
||||
lv_base = iv_target.
|
||||
ENDIF.
|
||||
rv_part = lv_base * c_rate_base.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_commission.
|
||||
DATA: lv_excess TYPE ty_exact,
|
||||
lv_limit TYPE ty_exact.
|
||||
|
||||
IF iv_sales <= iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_excess = iv_sales - iv_target.
|
||||
lv_limit = iv_target / 2.
|
||||
IF lv_excess > lv_limit.
|
||||
lv_excess = lv_limit.
|
||||
ENDIF.
|
||||
rv_part = lv_excess * c_rate_mid.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_commission.
|
||||
DATA: lv_threshold TYPE ty_exact,
|
||||
lv_top TYPE ty_exact.
|
||||
|
||||
lv_threshold = iv_target * 3.
|
||||
lv_threshold = lv_threshold / 2.
|
||||
IF iv_sales <= lv_threshold.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_top = iv_sales - lv_threshold.
|
||||
rv_part = lv_top * c_rate_top.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_to_cents.
|
||||
DATA lv_cents TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
lv_cents = round( val = iv_value dec = 2 ).
|
||||
rv_value = lv_cents.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
IF iv_years >= 10.
|
||||
rv_bonus = c_bonus_10.
|
||||
ELSEIF iv_years >= 5.
|
||||
rv_bonus = c_bonus_5.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
113
tasks_gen/eval/G0164/faulty/m2_commission_calc.clas.abap
Normal file
113
tasks_gen/eval/G0164/faulty/m2_commission_calc.clas.abap
Normal file
@@ -0,0 +1,113 @@
|
||||
CLASS {{p}}commission_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_commission.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_exact TYPE p LENGTH 15 DECIMALS 4.
|
||||
|
||||
CONSTANTS:
|
||||
c_rate_base TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0100',
|
||||
c_rate_mid TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0300',
|
||||
c_rate_top TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0500',
|
||||
c_bonus_5 TYPE {{p}}if_commission=>ty_amount VALUE '200',
|
||||
c_bonus_10 TYPE {{p}}if_commission=>ty_amount VALUE '500',
|
||||
c_cap TYPE {{p}}if_commission=>ty_amount VALUE '5000'.
|
||||
|
||||
METHODS base_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS extra_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS top_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS round_to_cents
|
||||
IMPORTING iv_value TYPE ty_exact
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_commission=>ty_amount.
|
||||
METHODS loyalty_bonus
|
||||
IMPORTING iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE {{p}}if_commission=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}commission_calc IMPLEMENTATION.
|
||||
METHOD {{p}}if_commission~calculate.
|
||||
DATA: lv_exact TYPE ty_exact,
|
||||
lv_bonus TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
IF iv_sales <= 0 OR iv_target <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_sales * 2 < iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_exact = base_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + extra_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + top_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
|
||||
lv_bonus = round_to_cents( lv_exact ) + loyalty_bonus( iv_years ).
|
||||
IF lv_bonus > c_cap.
|
||||
lv_bonus = c_cap.
|
||||
ENDIF.
|
||||
rv_bonus = lv_bonus.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_commission.
|
||||
DATA lv_base TYPE ty_exact.
|
||||
|
||||
IF iv_sales < iv_target.
|
||||
lv_base = iv_sales.
|
||||
ELSE.
|
||||
lv_base = iv_target.
|
||||
ENDIF.
|
||||
rv_part = lv_base * c_rate_base.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_commission.
|
||||
DATA: lv_excess TYPE ty_exact,
|
||||
lv_limit TYPE ty_exact.
|
||||
|
||||
IF iv_sales <= iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_excess = iv_sales - iv_target.
|
||||
lv_limit = iv_target / 2.
|
||||
IF lv_excess > lv_limit.
|
||||
lv_excess = lv_limit.
|
||||
ENDIF.
|
||||
rv_part = lv_excess * c_rate_mid.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_commission.
|
||||
DATA: lv_threshold TYPE ty_exact,
|
||||
lv_top TYPE ty_exact.
|
||||
|
||||
lv_threshold = iv_target * 3.
|
||||
lv_threshold = lv_threshold / 2.
|
||||
IF iv_sales > lv_threshold.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_top = iv_sales - lv_threshold.
|
||||
rv_part = lv_top * c_rate_top.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_to_cents.
|
||||
DATA lv_cents TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
lv_cents = round( val = iv_value dec = 2 ).
|
||||
rv_value = lv_cents.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
IF iv_years >= 10.
|
||||
rv_bonus = c_bonus_10.
|
||||
ELSEIF iv_years >= 5.
|
||||
rv_bonus = c_bonus_5.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
113
tasks_gen/eval/G0164/faulty/m3_commission_calc.clas.abap
Normal file
113
tasks_gen/eval/G0164/faulty/m3_commission_calc.clas.abap
Normal file
@@ -0,0 +1,113 @@
|
||||
CLASS {{p}}commission_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_commission.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_exact TYPE p LENGTH 15 DECIMALS 4.
|
||||
|
||||
CONSTANTS:
|
||||
c_rate_base TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0100',
|
||||
c_rate_mid TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0300',
|
||||
c_rate_top TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0500',
|
||||
c_bonus_5 TYPE {{p}}if_commission=>ty_amount VALUE '200',
|
||||
c_bonus_10 TYPE {{p}}if_commission=>ty_amount VALUE '500',
|
||||
c_cap TYPE {{p}}if_commission=>ty_amount VALUE '5000'.
|
||||
|
||||
METHODS base_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS extra_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS top_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS round_to_cents
|
||||
IMPORTING iv_value TYPE ty_exact
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_commission=>ty_amount.
|
||||
METHODS loyalty_bonus
|
||||
IMPORTING iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE {{p}}if_commission=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}commission_calc IMPLEMENTATION.
|
||||
METHOD {{p}}if_commission~calculate.
|
||||
DATA: lv_exact TYPE ty_exact,
|
||||
lv_bonus TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
IF iv_sales <= 0 OR iv_target <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_sales * 2 < iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_exact = base_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + extra_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + top_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
|
||||
lv_bonus = round_to_cents( lv_exact ) + loyalty_bonus( iv_years ).
|
||||
IF lv_bonus > c_cap.
|
||||
lv_bonus = c_cap.
|
||||
ENDIF.
|
||||
rv_bonus = lv_bonus.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_commission.
|
||||
DATA lv_base TYPE ty_exact.
|
||||
|
||||
IF iv_sales < iv_target.
|
||||
lv_base = iv_sales.
|
||||
ELSE.
|
||||
lv_base = iv_target.
|
||||
ENDIF.
|
||||
rv_part = lv_base * c_rate_base.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_commission.
|
||||
DATA: lv_excess TYPE ty_exact,
|
||||
lv_limit TYPE ty_exact.
|
||||
|
||||
IF iv_sales <= iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_excess = iv_sales - iv_target.
|
||||
lv_limit = iv_target / 2.
|
||||
IF lv_excess > lv_limit.
|
||||
lv_excess = lv_limit.
|
||||
ENDIF.
|
||||
rv_part = lv_excess * c_rate_mid.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_commission.
|
||||
DATA: lv_threshold TYPE ty_exact,
|
||||
lv_top TYPE ty_exact.
|
||||
|
||||
lv_threshold = iv_target * 3.
|
||||
lv_threshold = lv_threshold / 2.
|
||||
IF iv_sales <= lv_threshold.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_top = iv_sales + lv_threshold.
|
||||
rv_part = lv_top * c_rate_top.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_to_cents.
|
||||
DATA lv_cents TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
lv_cents = round( val = iv_value dec = 2 ).
|
||||
rv_value = lv_cents.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
IF iv_years >= 10.
|
||||
rv_bonus = c_bonus_10.
|
||||
ELSEIF iv_years >= 5.
|
||||
rv_bonus = c_bonus_5.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
33
tasks_gen/eval/G0164/generation.json
Normal file
33
tasks_gen/eval/G0164/generation.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"id": "G0164",
|
||||
"pool": "eval",
|
||||
"object_type": "CLAS",
|
||||
"category": "G",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"hidden/t42_hidden.clas.abap line 57: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"assert_bonus\"",
|
||||
"hidden/t42_hidden.clas.abap line 57: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"99\"",
|
||||
"hidden/t42_hidden.clas.abap line 82: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"assert_bonus\"",
|
||||
"hidden/t42_hidden.clas.abap line 82: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"35\"",
|
||||
"hidden/t42_hidden.clas.abap line 82: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"55\"",
|
||||
"hidden/t42_hidden.clas.abap line 82: syntax error for release v740sp05 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"55\""
|
||||
],
|
||||
"by_check": {
|
||||
"abaplint": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 4,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
101
tasks_gen/eval/G0164/hidden/t42_hidden.clas.abap
Normal file
101
tasks_gen/eval/G0164/hidden/t42_hidden.clas.abap
Normal file
@@ -0,0 +1,101 @@
|
||||
CLASS {{p}}t42_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_commission.
|
||||
METHODS setup.
|
||||
METHODS assert_bonus
|
||||
IMPORTING iv_expected TYPE {{p}}if_commission=>ty_amount
|
||||
iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
iv_years TYPE i
|
||||
iv_msg TYPE string.
|
||||
METHODS zero_sales FOR TESTING.
|
||||
METHODS zero_target FOR TESTING.
|
||||
METHODS negative_sales FOR TESTING.
|
||||
METHODS below_half_target FOR TESTING.
|
||||
METHODS exactly_half_target FOR TESTING.
|
||||
METHODS at_target FOR TESTING.
|
||||
METHODS above_target FOR TESTING.
|
||||
METHODS top_tier FOR TESTING.
|
||||
METHODS rounds_to_cent FOR TESTING.
|
||||
METHODS loyalty_five_years FOR TESTING.
|
||||
METHODS loyalty_ten_years FOR TESTING.
|
||||
METHODS cap_applied FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t42_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}commission_calc( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_bonus.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_expected
|
||||
act = mo_cut->calculate( iv_sales = iv_sales
|
||||
iv_target = iv_target
|
||||
iv_years = iv_years )
|
||||
msg = iv_msg ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_sales.
|
||||
assert_bonus( iv_expected = 0 iv_sales = 0 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'zero sales' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_target.
|
||||
assert_bonus( iv_expected = 0 iv_sales = 1000 iv_target = 0
|
||||
iv_years = 0 iv_msg = 'zero target' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_sales.
|
||||
assert_bonus( iv_expected = 0 iv_sales = -100 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'negative sales' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD below_half_target.
|
||||
assert_bonus( iv_expected = 0 iv_sales = '499.99' iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'below half target' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exactly_half_target.
|
||||
assert_bonus( iv_expected = 5 iv_sales = 500 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'exactly half target' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD at_target.
|
||||
assert_bonus( iv_expected = 10 iv_sales = 1000 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'at target' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD above_target.
|
||||
assert_bonus( iv_expected = 16 iv_sales = 1200 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'above target' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_tier.
|
||||
assert_bonus( iv_expected = 50 iv_sales = 2000 iv_target = 1000
|
||||
iv_years = 0 iv_msg = 'top tier' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rounds_to_cent.
|
||||
assert_bonus( iv_expected = '12.35' iv_sales = '1234.55'
|
||||
iv_target = '1234.55'
|
||||
iv_years = 0 iv_msg = 'rounding' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_five_years.
|
||||
assert_bonus( iv_expected = 210 iv_sales = 1000 iv_target = 1000
|
||||
iv_years = 5 iv_msg = 'five years' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_ten_years.
|
||||
assert_bonus( iv_expected = 510 iv_sales = 1000 iv_target = 1000
|
||||
iv_years = 10 iv_msg = 'ten years' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD cap_applied.
|
||||
assert_bonus( iv_expected = 5000 iv_sales = 100000 iv_target = 1000
|
||||
iv_years = 10 iv_msg = 'cap' ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
64
tasks_gen/eval/G0164/mutation.json
Normal file
64
tasks_gen/eval/G0164/mutation.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"task": "G0164",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}COMMISSION_CALC",
|
||||
"mutant": "line 42: OR -> AND (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "11/12",
|
||||
"failed_tests": [
|
||||
"ZERO_TARGET"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}COMMISSION_CALC",
|
||||
"mutant": "line 45: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "6/12",
|
||||
"failed_tests": [
|
||||
"ABOVE_TARGET",
|
||||
"AT_TARGET",
|
||||
"EXACTLY_HALF_TARGET",
|
||||
"LOYALTY_FIVE_YEARS",
|
||||
"LOYALTY_TEN_YEARS",
|
||||
"ROUNDS_TO_CENT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}COMMISSION_CALC",
|
||||
"mutant": "line 92: <= -> > (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "4/12",
|
||||
"failed_tests": [
|
||||
"ABOVE_TARGET",
|
||||
"AT_TARGET",
|
||||
"CAP_APPLIED",
|
||||
"EXACTLY_HALF_TARGET",
|
||||
"LOYALTY_FIVE_YEARS",
|
||||
"LOYALTY_TEN_YEARS",
|
||||
"ROUNDS_TO_CENT",
|
||||
"TOP_TIER"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}COMMISSION_CALC",
|
||||
"mutant": "line 95: - -> + (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "11/12",
|
||||
"failed_tests": [
|
||||
"TOP_TIER"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}COMMISSION_CALC",
|
||||
"mutant": "line 102: 2 -> 3 (const)",
|
||||
"status": "survived",
|
||||
"hidden": "12/12",
|
||||
"failed_tests": []
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 4,
|
||||
"kill_rate": 0.8,
|
||||
"ok": true
|
||||
}
|
||||
113
tasks_gen/eval/G0164/reference/commission_calc.clas.abap
Normal file
113
tasks_gen/eval/G0164/reference/commission_calc.clas.abap
Normal file
@@ -0,0 +1,113 @@
|
||||
CLASS {{p}}commission_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_commission.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_exact TYPE p LENGTH 15 DECIMALS 4.
|
||||
|
||||
CONSTANTS:
|
||||
c_rate_base TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0100',
|
||||
c_rate_mid TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0300',
|
||||
c_rate_top TYPE p LENGTH 7 DECIMALS 4 VALUE '0.0500',
|
||||
c_bonus_5 TYPE {{p}}if_commission=>ty_amount VALUE '200',
|
||||
c_bonus_10 TYPE {{p}}if_commission=>ty_amount VALUE '500',
|
||||
c_cap TYPE {{p}}if_commission=>ty_amount VALUE '5000'.
|
||||
|
||||
METHODS base_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS extra_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS top_commission
|
||||
IMPORTING iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
RETURNING VALUE(rv_part) TYPE ty_exact.
|
||||
METHODS round_to_cents
|
||||
IMPORTING iv_value TYPE ty_exact
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_commission=>ty_amount.
|
||||
METHODS loyalty_bonus
|
||||
IMPORTING iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE {{p}}if_commission=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}commission_calc IMPLEMENTATION.
|
||||
METHOD {{p}}if_commission~calculate.
|
||||
DATA: lv_exact TYPE ty_exact,
|
||||
lv_bonus TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
IF iv_sales <= 0 OR iv_target <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_sales * 2 < iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_exact = base_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + extra_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
lv_exact = lv_exact + top_commission( iv_sales = iv_sales iv_target = iv_target ).
|
||||
|
||||
lv_bonus = round_to_cents( lv_exact ) + loyalty_bonus( iv_years ).
|
||||
IF lv_bonus > c_cap.
|
||||
lv_bonus = c_cap.
|
||||
ENDIF.
|
||||
rv_bonus = lv_bonus.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_commission.
|
||||
DATA lv_base TYPE ty_exact.
|
||||
|
||||
IF iv_sales < iv_target.
|
||||
lv_base = iv_sales.
|
||||
ELSE.
|
||||
lv_base = iv_target.
|
||||
ENDIF.
|
||||
rv_part = lv_base * c_rate_base.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_commission.
|
||||
DATA: lv_excess TYPE ty_exact,
|
||||
lv_limit TYPE ty_exact.
|
||||
|
||||
IF iv_sales <= iv_target.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_excess = iv_sales - iv_target.
|
||||
lv_limit = iv_target / 2.
|
||||
IF lv_excess > lv_limit.
|
||||
lv_excess = lv_limit.
|
||||
ENDIF.
|
||||
rv_part = lv_excess * c_rate_mid.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_commission.
|
||||
DATA: lv_threshold TYPE ty_exact,
|
||||
lv_top TYPE ty_exact.
|
||||
|
||||
lv_threshold = iv_target * 3.
|
||||
lv_threshold = lv_threshold / 2.
|
||||
IF iv_sales <= lv_threshold.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lv_top = iv_sales - lv_threshold.
|
||||
rv_part = lv_top * c_rate_top.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD round_to_cents.
|
||||
DATA lv_cents TYPE {{p}}if_commission=>ty_amount.
|
||||
|
||||
lv_cents = round( val = iv_value dec = 2 ).
|
||||
rv_value = lv_cents.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
IF iv_years >= 10.
|
||||
rv_bonus = c_bonus_10.
|
||||
ELSEIF iv_years >= 5.
|
||||
rv_bonus = c_bonus_5.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,63 @@
|
||||
CLASS ltc_commission DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_commission.
|
||||
METHODS setup.
|
||||
METHODS assert_bonus
|
||||
IMPORTING iv_expected TYPE {{p}}if_commission=>ty_amount
|
||||
iv_sales TYPE {{p}}if_commission=>ty_amount
|
||||
iv_target TYPE {{p}}if_commission=>ty_amount
|
||||
iv_years TYPE i.
|
||||
METHODS zero_or_negative FOR TESTING.
|
||||
METHODS below_half_target FOR TESTING.
|
||||
METHODS at_target FOR TESTING.
|
||||
METHODS above_target FOR TESTING.
|
||||
METHODS top_tier FOR TESTING.
|
||||
METHODS loyalty_bonus FOR TESTING.
|
||||
METHODS cap_applied FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_commission IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}commission_calc( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_bonus.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_expected
|
||||
act = mo_cut->calculate( iv_sales = iv_sales
|
||||
iv_target = iv_target
|
||||
iv_years = iv_years ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_or_negative.
|
||||
assert_bonus( iv_expected = 0 iv_sales = 0 iv_target = 1000 iv_years = 0 ).
|
||||
assert_bonus( iv_expected = 0 iv_sales = -100 iv_target = 1000 iv_years = 0 ).
|
||||
assert_bonus( iv_expected = 0 iv_sales = 1000 iv_target = 0 iv_years = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD below_half_target.
|
||||
assert_bonus( iv_expected = 0 iv_sales = 400 iv_target = 1000 iv_years = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD at_target.
|
||||
assert_bonus( iv_expected = 10 iv_sales = 1000 iv_target = 1000 iv_years = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD above_target.
|
||||
assert_bonus( iv_expected = 16 iv_sales = 1200 iv_target = 1000 iv_years = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD top_tier.
|
||||
assert_bonus( iv_expected = 50 iv_sales = 2000 iv_target = 1000 iv_years = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD loyalty_bonus.
|
||||
assert_bonus( iv_expected = 210 iv_sales = 1000 iv_target = 1000 iv_years = 5 ).
|
||||
assert_bonus( iv_expected = 510 iv_sales = 1000 iv_target = 1000 iv_years = 10 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD cap_applied.
|
||||
assert_bonus( iv_expected = 5000 iv_sales = 100000 iv_target = 1000 iv_years = 10 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
8
tasks_gen/eval/G0164/seed/if_commission.intf.abap
Normal file
8
tasks_gen/eval/G0164/seed/if_commission.intf.abap
Normal file
@@ -0,0 +1,8 @@
|
||||
INTERFACE {{p}}if_commission PUBLIC.
|
||||
TYPES ty_amount TYPE p LENGTH 15 DECIMALS 2.
|
||||
METHODS calculate
|
||||
IMPORTING iv_sales TYPE ty_amount
|
||||
iv_target TYPE ty_amount
|
||||
iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE ty_amount.
|
||||
ENDINTERFACE.
|
||||
68
tasks_gen/eval/G0164/spec.md
Normal file
68
tasks_gen/eval/G0164/spec.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 1. Goal
|
||||
|
||||
A company pays a monthly commission to its sales agents. A payroll program
|
||||
calls one calculation for each agent and each month. The calculation returns
|
||||
the commission of one agent.
|
||||
|
||||
# 2. Open questions
|
||||
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
|
||||
- The interface {{P}}IF_COMMISSION exists in package $TMP. It is active.
|
||||
- The interface contains the type TY_AMOUNT. TY_AMOUNT is a packed number
|
||||
with length 15 and 2 decimal places.
|
||||
- The interface contains one method:
|
||||
|
||||
CALCULATE
|
||||
IMPORTING iv_sales TYPE ty_amount
|
||||
iv_target TYPE ty_amount
|
||||
iv_years TYPE i
|
||||
RETURNING VALUE(rv_bonus) TYPE ty_amount
|
||||
|
||||
- iv_sales is the sales volume of the month.
|
||||
- iv_target is the monthly target of the agent.
|
||||
- iv_years is the number of completed years of service of the agent.
|
||||
|
||||
# 4. Contract
|
||||
|
||||
- Create the class {{P}}COMMISSION_CALC in package $TMP.
|
||||
- The class is public and final. The class has a public constructor without
|
||||
parameters.
|
||||
- The class implements the interface {{P}}IF_COMMISSION.
|
||||
- Do not add other public methods.
|
||||
|
||||
# 5. Business rules
|
||||
|
||||
Apply the rules in this sequence.
|
||||
|
||||
1. If iv_sales is zero or negative, or if iv_target is zero or negative,
|
||||
return 0.
|
||||
2. If two times iv_sales is less than iv_target, return 0.
|
||||
3. Calculate the commission. Keep the full precision. Round only in rule 4.
|
||||
a. Add 1 percent of the part of iv_sales that is at most iv_target.
|
||||
b. If iv_sales is more than iv_target, add 3 percent of the part of
|
||||
iv_sales that is more than iv_target. Use at most half of iv_target
|
||||
for this part.
|
||||
c. If iv_sales is more than 1.5 times iv_target, add 5 percent of the
|
||||
part of iv_sales that is more than 1.5 times iv_target.
|
||||
4. Round the commission to 2 decimal places. Use commercial rounding.
|
||||
5. Add the loyalty bonus. Add 500 if iv_years is 10 or more. Add 200 if
|
||||
iv_years is 5 or more. Add 0 in all other cases.
|
||||
6. If the result is more than 5000, return 5000.
|
||||
7. Return the result.
|
||||
|
||||
# 6. Constraints
|
||||
|
||||
- Release target: 7.40 SP05. Use only language elements that this release
|
||||
supports. Do not use language elements of a later release.
|
||||
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
||||
variables. No comment that restates the code.
|
||||
- Out of scope: do not change the interface {{P}}IF_COMMISSION.
|
||||
|
||||
# 7. Acceptance
|
||||
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
51
tasks_gen/eval/G0164/task.json
Normal file
51
tasks_gen/eval/G0164/task.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"id": "G0164",
|
||||
"category": "G",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v740sp05",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "INTF",
|
||||
"name": "{{P}}IF_COMMISSION",
|
||||
"file": "seed/if_commission.intf.abap",
|
||||
"description": "Commission calculation contract"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}COMMISSION_CALC",
|
||||
"implements": "{{P}}IF_COMMISSION"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}IF_COMMISSION"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T42_HIDDEN",
|
||||
"file": "hidden/t42_hidden.clas.abap",
|
||||
"description": "T42 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}COMMISSION_CALC",
|
||||
"file": "reference/commission_calc.clas.abap",
|
||||
"description": "Commission calculation",
|
||||
"testclasses_file": "reference/commission_calc.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"no_newer_syntax"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user