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:
44
tasks_gen/eval/G0156/faulty/m0_repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/faulty/m0_repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours >= 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member = abap_true.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 100 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee + iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
44
tasks_gen/eval/G0156/faulty/m1_repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/faulty/m1_repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours < 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member <> abap_true.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 100 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee + iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
44
tasks_gen/eval/G0156/faulty/m2_repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/faulty/m2_repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours < 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member = abap_false.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 100 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee + iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
44
tasks_gen/eval/G0156/faulty/m3_repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/faulty/m3_repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours < 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member = abap_true.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 101 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee + iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
44
tasks_gen/eval/G0156/faulty/m4_repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/faulty/m4_repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours < 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member = abap_true.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 100 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee - iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
19
tasks_gen/eval/G0156/generation.json
Normal file
19
tasks_gen/eval/G0156/generation.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "G0156",
|
||||
"pool": "eval",
|
||||
"object_type": "FUNC",
|
||||
"category": "G",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
160
tasks_gen/eval/G0156/hidden/t21_hidden.clas.abap
Normal file
160
tasks_gen/eval/G0156/hidden/t21_hidden.clas.abap
Normal file
@@ -0,0 +1,160 @@
|
||||
CLASS {{p}}t21_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS fee_of
|
||||
IMPORTING
|
||||
iv_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts TYPE decfloat34
|
||||
iv_member TYPE abap_bool DEFAULT abap_false
|
||||
EXPORTING
|
||||
ev_labour TYPE decfloat34
|
||||
ev_total TYPE decfloat34
|
||||
ev_subrc TYPE sysubrc.
|
||||
METHODS brake_rate FOR TESTING.
|
||||
METHODS gear_rate FOR TESTING.
|
||||
METHODS wheel_rate FOR TESTING.
|
||||
METHODS other_rate FOR TESTING.
|
||||
METHODS labour_rounding FOR TESTING.
|
||||
METHODS minimum_total FOR TESTING.
|
||||
METHODS member_discount FOR TESTING.
|
||||
METHODS member_minimum FOR TESTING.
|
||||
METHODS negative_hours FOR TESTING.
|
||||
METHODS zero_hours FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t21_hidden IMPLEMENTATION.
|
||||
METHOD fee_of.
|
||||
ev_labour = 0.
|
||||
ev_total = 0.
|
||||
CALL FUNCTION '{{P}}REPAIR_FEE'
|
||||
EXPORTING
|
||||
iv_repair_type = iv_type
|
||||
iv_hours = iv_hours
|
||||
iv_parts_cost = iv_parts
|
||||
iv_member = iv_member
|
||||
IMPORTING
|
||||
ev_labour_fee = ev_labour
|
||||
ev_total_fee = ev_total
|
||||
EXCEPTIONS
|
||||
invalid_hours = 1
|
||||
OTHERS = 2.
|
||||
ev_subrc = sy-subrc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD brake_rate.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'BR' iv_hours = '1.5' iv_parts = '20'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '90.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '110.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD gear_rate.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'GE' iv_hours = '2' iv_parts = '0'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '90.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD wheel_rate.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'WH' iv_hours = '1' iv_parts = '5'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '30.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '35.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD other_rate.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'XX' iv_hours = '1' iv_parts = '0'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '40.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD labour_rounding.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'GE' iv_hours = '0.333' iv_parts = '20'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '14.99'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '34.99'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_total.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'WH' iv_hours = '0.5' iv_parts = '1'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '15.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '25.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD member_discount.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'BR' iv_hours = '1.5' iv_parts = '20' iv_member = abap_true
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '81.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '101.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD member_minimum.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'WH' iv_hours = '0.5' iv_parts = '0' iv_member = abap_true
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ).
|
||||
lv_exp = '13.50'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '25.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_hours.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
fee_of( EXPORTING iv_type = 'BR' iv_hours = '-1' iv_parts = '0'
|
||||
IMPORTING ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_subrc ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_hours.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
DATA lv_subrc TYPE sysubrc.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
fee_of( EXPORTING iv_type = 'BR' iv_hours = '0' iv_parts = '30'
|
||||
IMPORTING ev_labour = lv_labour ev_total = lv_total ev_subrc = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
||||
lv_exp = '0.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_labour ).
|
||||
lv_exp = '30.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_total ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
82
tasks_gen/eval/G0156/mutation.json
Normal file
82
tasks_gen/eval/G0156/mutation.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"task": "G0156",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}REPAIR_FEE",
|
||||
"mutant": "line 16: < -> >= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "0/10",
|
||||
"failed_tests": [
|
||||
"BRAKE_RATE",
|
||||
"GEAR_RATE",
|
||||
"LABOUR_ROUNDING",
|
||||
"MEMBER_DISCOUNT",
|
||||
"MEMBER_MINIMUM",
|
||||
"MINIMUM_TOTAL",
|
||||
"NEGATIVE_HOURS",
|
||||
"OTHER_RATE",
|
||||
"WHEEL_RATE",
|
||||
"ZERO_HOURS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}REPAIR_FEE",
|
||||
"mutant": "line 33: = -> <> (eq)",
|
||||
"status": "killed",
|
||||
"hidden": "2/10",
|
||||
"failed_tests": [
|
||||
"BRAKE_RATE",
|
||||
"GEAR_RATE",
|
||||
"LABOUR_ROUNDING",
|
||||
"MEMBER_DISCOUNT",
|
||||
"MEMBER_MINIMUM",
|
||||
"MINIMUM_TOTAL",
|
||||
"OTHER_RATE",
|
||||
"WHEEL_RATE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}REPAIR_FEE",
|
||||
"mutant": "line 33: abap_true -> abap_false (bool)",
|
||||
"status": "killed",
|
||||
"hidden": "2/10",
|
||||
"failed_tests": [
|
||||
"BRAKE_RATE",
|
||||
"GEAR_RATE",
|
||||
"LABOUR_ROUNDING",
|
||||
"MEMBER_DISCOUNT",
|
||||
"MEMBER_MINIMUM",
|
||||
"MINIMUM_TOTAL",
|
||||
"OTHER_RATE",
|
||||
"WHEEL_RATE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}REPAIR_FEE",
|
||||
"mutant": "line 34: 100 -> 101 (const)",
|
||||
"status": "killed",
|
||||
"hidden": "8/10",
|
||||
"failed_tests": [
|
||||
"MEMBER_DISCOUNT",
|
||||
"MEMBER_MINIMUM"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}REPAIR_FEE",
|
||||
"mutant": "line 38: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "5/10",
|
||||
"failed_tests": [
|
||||
"BRAKE_RATE",
|
||||
"LABOUR_ROUNDING",
|
||||
"MEMBER_DISCOUNT",
|
||||
"WHEEL_RATE",
|
||||
"ZERO_HOURS"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
44
tasks_gen/eval/G0156/reference/repair_fee.func.abap
Normal file
44
tasks_gen/eval/G0156/reference/repair_fee.func.abap
Normal file
@@ -0,0 +1,44 @@
|
||||
FUNCTION {{p}}repair_fee
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
DATA lv_rate TYPE decfloat34.
|
||||
DATA lv_discount TYPE decfloat34.
|
||||
|
||||
IF iv_hours < 0.
|
||||
RAISE invalid_hours.
|
||||
ENDIF.
|
||||
|
||||
CASE iv_repair_type.
|
||||
WHEN 'BR'.
|
||||
lv_rate = 60.
|
||||
WHEN 'GE'.
|
||||
lv_rate = 45.
|
||||
WHEN 'WH'.
|
||||
lv_rate = 30.
|
||||
WHEN OTHERS.
|
||||
lv_rate = 40.
|
||||
ENDCASE.
|
||||
|
||||
ev_labour_fee = round( val = iv_hours * lv_rate dec = 2 ).
|
||||
|
||||
IF iv_member = abap_true.
|
||||
lv_discount = round( val = ev_labour_fee * 10 / 100 dec = 2 ).
|
||||
ev_labour_fee = ev_labour_fee - lv_discount.
|
||||
ENDIF.
|
||||
|
||||
ev_total_fee = ev_labour_fee + iv_parts_cost.
|
||||
|
||||
IF ev_total_fee < 25.
|
||||
ev_total_fee = 25.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
73
tasks_gen/eval/G0156/reference/t21_test.clas.abap
Normal file
73
tasks_gen/eval/G0156/reference/t21_test.clas.abap
Normal file
@@ -0,0 +1,73 @@
|
||||
CLASS {{p}}t21_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS fee_of
|
||||
IMPORTING
|
||||
iv_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts TYPE decfloat34
|
||||
iv_member TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(rv_total) TYPE decfloat34.
|
||||
METHODS brake_fee FOR TESTING.
|
||||
METHODS minimum_fee FOR TESTING.
|
||||
METHODS member_fee FOR TESTING.
|
||||
METHODS negative_hours FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t21_test IMPLEMENTATION.
|
||||
METHOD fee_of.
|
||||
DATA lv_labour TYPE decfloat34.
|
||||
CALL FUNCTION '{{P}}REPAIR_FEE'
|
||||
EXPORTING
|
||||
iv_repair_type = iv_type
|
||||
iv_hours = iv_hours
|
||||
iv_parts_cost = iv_parts
|
||||
iv_member = iv_member
|
||||
IMPORTING
|
||||
ev_labour_fee = lv_labour
|
||||
ev_total_fee = rv_total
|
||||
EXCEPTIONS
|
||||
invalid_hours = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD brake_fee.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
lv_exp = '110.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp
|
||||
act = fee_of( iv_type = 'BR' iv_hours = '1.5' iv_parts = '20' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_fee.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
lv_exp = '25.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp
|
||||
act = fee_of( iv_type = 'WH' iv_hours = '0.5' iv_parts = '1' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD member_fee.
|
||||
DATA lv_exp TYPE decfloat34.
|
||||
lv_exp = '101.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp
|
||||
act = fee_of( iv_type = 'BR' iv_hours = '1.5' iv_parts = '20' iv_member = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_hours.
|
||||
DATA lv_total TYPE decfloat34.
|
||||
CALL FUNCTION '{{P}}REPAIR_FEE'
|
||||
EXPORTING
|
||||
iv_repair_type = 'BR'
|
||||
iv_hours = '-1'
|
||||
iv_parts_cost = '0'
|
||||
iv_member = abap_false
|
||||
IMPORTING
|
||||
ev_total_fee = lv_total
|
||||
EXCEPTIONS
|
||||
invalid_hours = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
16
tasks_gen/eval/G0156/seed/repair_sample.func.abap
Normal file
16
tasks_gen/eval/G0156/seed/repair_sample.func.abap
Normal file
@@ -0,0 +1,16 @@
|
||||
FUNCTION {{p}}repair_sample
|
||||
IMPORTING
|
||||
iv_repair_type TYPE string
|
||||
iv_hours TYPE decfloat34
|
||||
iv_parts_cost TYPE decfloat34
|
||||
iv_member TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_labour_fee TYPE decfloat34
|
||||
ev_total_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_hours.
|
||||
|
||||
ev_labour_fee = 0.
|
||||
ev_total_fee = 0.
|
||||
|
||||
ENDFUNCTION.
|
||||
45
tasks_gen/eval/G0156/spec.md
Normal file
45
tasks_gen/eval/G0156/spec.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# 1. Goal
|
||||
A bicycle repair shop prices repair jobs. The workshop program calls one function
|
||||
module for each repair job before it prints the work order. The new function
|
||||
module must have the same interface as the sample pricing module, because the
|
||||
workshop program calls all pricing modules in the same way.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- Function group {{P}}FG_REPAIR exists in package $TMP.
|
||||
- Function module {{P}}REPAIR_SAMPLE exists in this group. It is the sample
|
||||
pricing module. Its interface is the interface that all pricing modules must
|
||||
use.
|
||||
|
||||
# 4. Contract
|
||||
- Create the function module {{P}}REPAIR_FEE in function group {{P}}FG_REPAIR.
|
||||
- Use exactly the interface of {{P}}REPAIR_SAMPLE: the same parameter names,
|
||||
kinds, types, and exceptions.
|
||||
|
||||
# 5. Business rules
|
||||
1. If the hours are less than zero, raise the exception INVALID_HOURS.
|
||||
2. The hourly rate depends on the repair type:
|
||||
- 'BR' brake repair: 60.00
|
||||
- 'GE' gear repair: 45.00
|
||||
- 'WH' wheel repair: 30.00
|
||||
- every other type: 40.00
|
||||
3. The labour fee is the hours multiplied by the hourly rate. Round the labour
|
||||
fee half up to 2 decimals. Return it in ev_labour_fee.
|
||||
4. If the customer is a club member, reduce the labour fee by 10 %. Round the
|
||||
reduction half up to 2 decimals. Return the reduced labour fee in
|
||||
ev_labour_fee.
|
||||
5. The total fee is the labour fee from rule 3 or rule 4 plus the parts cost.
|
||||
Return it in ev_total_fee.
|
||||
6. If the total fee is less than 25.00, set the total fee to 25.00.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 7.02. Use only syntax that release 7.02 supports.
|
||||
- Coding standards: Clean ABAP. Keep every method below 40 statements.
|
||||
- Out of scope: do not change {{P}}REPAIR_SAMPLE.
|
||||
|
||||
# 7. Acceptance
|
||||
- The function module is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write ABAP Unit tests for the function module in a global test class.
|
||||
88
tasks_gen/eval/G0156/task.json
Normal file
88
tasks_gen/eval/G0156/task.json
Normal file
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"id": "G0156",
|
||||
"category": "G",
|
||||
"object_type": "FUNC",
|
||||
"difficulty": 2,
|
||||
"release_target": "v702",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "FUGR",
|
||||
"name": "{{P}}FG_REPAIR",
|
||||
"description": "Repair pricing"
|
||||
},
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}REPAIR_SAMPLE",
|
||||
"functionGroup": "{{P}}FG_REPAIR",
|
||||
"file": "seed/repair_sample.func.abap",
|
||||
"description": "Sample pricing module"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}REPAIR_FEE",
|
||||
"functionGroup": "{{P}}FG_REPAIR",
|
||||
"params": [
|
||||
{
|
||||
"name": "iv_repair_type",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "iv_hours",
|
||||
"type": "decfloat34"
|
||||
},
|
||||
{
|
||||
"name": "iv_parts_cost",
|
||||
"type": "decfloat34"
|
||||
},
|
||||
{
|
||||
"name": "iv_member",
|
||||
"type": "abap_bool"
|
||||
},
|
||||
{
|
||||
"name": "ev_labour_fee",
|
||||
"type": "decfloat34"
|
||||
},
|
||||
{
|
||||
"name": "ev_total_fee",
|
||||
"type": "decfloat34"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}REPAIR_SAMPLE"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T21_HIDDEN",
|
||||
"file": "hidden/t21_hidden.clas.abap",
|
||||
"description": "T21 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}REPAIR_FEE",
|
||||
"functionGroup": "{{P}}FG_REPAIR",
|
||||
"file": "reference/repair_fee.func.abap",
|
||||
"description": "Repair fee module"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T21_TEST",
|
||||
"file": "reference/t21_test.clas.abap",
|
||||
"description": "T21 own tests"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user