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:
74
tasks_gen/eval/G0167/faulty/m0_move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/faulty/m0_move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_false.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing = abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor > 0.
|
||||
rv_surcharge = iv_floor * c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
74
tasks_gen/eval/G0167/faulty/m1_move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/faulty/m1_move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_true.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing <> abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor > 0.
|
||||
rv_surcharge = iv_floor * c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
74
tasks_gen/eval/G0167/faulty/m2_move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/faulty/m2_move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_true.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing = abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor <= 0.
|
||||
rv_surcharge = iv_floor * c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
74
tasks_gen/eval/G0167/faulty/m3_move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/faulty/m3_move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_true.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing = abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor > 0.
|
||||
rv_surcharge = iv_floor / c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
74
tasks_gen/eval/G0167/faulty/m4_move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/faulty/m4_move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_true.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing = abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor > 0.
|
||||
rv_surcharge = iv_floor * c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal / c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
19
tasks_gen/eval/G0167/generation.json
Normal file
19
tasks_gen/eval/G0167/generation.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "G0167",
|
||||
"pool": "eval",
|
||||
"object_type": "CLAS",
|
||||
"category": "I",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
142
tasks_gen/eval/G0167/hidden/move_pricer_hidden.clas.abap
Normal file
142
tasks_gen/eval/G0167/hidden/move_pricer_hidden.clas.abap
Normal file
@@ -0,0 +1,142 @@
|
||||
CLASS {{p}}move_pricer_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}move_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS base_fee_only FOR TESTING.
|
||||
METHODS volume_fee FOR TESTING.
|
||||
METHODS distance_15_km FOR TESTING.
|
||||
METHODS first_floor_surcharge FOR TESTING.
|
||||
METHODS third_floor_surcharge FOR TESTING.
|
||||
METHODS packing_fee FOR TESTING.
|
||||
METHODS weekend_on_subtotal FOR TESTING.
|
||||
METHODS weekend_with_packing FOR TESTING.
|
||||
METHODS no_weekend_no_surcharge FOR TESTING.
|
||||
METHODS combined_move FOR TESTING.
|
||||
METHODS constants_unchanged FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}move_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_fee_only.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '250.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '410.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 4
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_15_km.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '268.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 15
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD first_floor_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '265.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 1
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD third_floor_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '295.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 3
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD packing_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '430.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_on_subtotal.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '441.28' )
|
||||
act = mo_cut->calculate( iv_distance_km = 20
|
||||
iv_volume_m3 = 3
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_with_packing.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '481.60' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD no_weekend_no_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '482.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 10
|
||||
iv_volume_m3 = 1
|
||||
iv_floor = 0
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD combined_move.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '669.76' )
|
||||
act = mo_cut->calculate( iv_distance_km = 15
|
||||
iv_volume_m3 = 3
|
||||
iv_floor = 2
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD constants_unchanged.
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '250.00' )
|
||||
act = {{p}}move_pricer=>c_base_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '40.00' )
|
||||
act = {{p}}move_pricer=>c_volume_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '1.20' )
|
||||
act = {{p}}move_pricer=>c_distance_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '15.00' )
|
||||
act = {{p}}move_pricer=>c_floor_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '180.00' )
|
||||
act = {{p}}move_pricer=>c_packing_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV ty_price( '0.12' )
|
||||
act = {{p}}move_pricer=>c_weekend_rate ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
78
tasks_gen/eval/G0167/mutation.json
Normal file
78
tasks_gen/eval/G0167/mutation.json
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"task": "G0167",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}MOVE_PRICER",
|
||||
"mutant": "line 47: abap_true -> abap_false (bool)",
|
||||
"status": "killed",
|
||||
"hidden": "1/11",
|
||||
"failed_tests": [
|
||||
"BASE_FEE_ONLY",
|
||||
"COMBINED_MOVE",
|
||||
"DISTANCE_15_KM",
|
||||
"FIRST_FLOOR_SURCHARGE",
|
||||
"NO_WEEKEND_NO_SURCHARGE",
|
||||
"PACKING_FEE",
|
||||
"THIRD_FLOOR_SURCHARGE",
|
||||
"VOLUME_FEE",
|
||||
"WEEKEND_ON_SUBTOTAL",
|
||||
"WEEKEND_WITH_PACKING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}MOVE_PRICER",
|
||||
"mutant": "line 56: = -> <> (eq)",
|
||||
"status": "killed",
|
||||
"hidden": "1/11",
|
||||
"failed_tests": [
|
||||
"BASE_FEE_ONLY",
|
||||
"COMBINED_MOVE",
|
||||
"DISTANCE_15_KM",
|
||||
"FIRST_FLOOR_SURCHARGE",
|
||||
"NO_WEEKEND_NO_SURCHARGE",
|
||||
"PACKING_FEE",
|
||||
"THIRD_FLOOR_SURCHARGE",
|
||||
"VOLUME_FEE",
|
||||
"WEEKEND_ON_SUBTOTAL",
|
||||
"WEEKEND_WITH_PACKING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}MOVE_PRICER",
|
||||
"mutant": "line 66: > -> <= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"COMBINED_MOVE",
|
||||
"FIRST_FLOOR_SURCHARGE",
|
||||
"THIRD_FLOOR_SURCHARGE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}MOVE_PRICER",
|
||||
"mutant": "line 67: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"COMBINED_MOVE",
|
||||
"FIRST_FLOOR_SURCHARGE",
|
||||
"THIRD_FLOOR_SURCHARGE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}MOVE_PRICER",
|
||||
"mutant": "line 72: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"COMBINED_MOVE",
|
||||
"WEEKEND_ON_SUBTOTAL",
|
||||
"WEEKEND_WITH_PACKING"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
74
tasks_gen/eval/G0167/reference/move_pricer.clas.abap
Normal file
74
tasks_gen/eval/G0167/reference/move_pricer.clas.abap
Normal file
@@ -0,0 +1,74 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS subtotal
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
METHODS floor_surcharge
|
||||
IMPORTING iv_floor TYPE i
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
METHODS weekend_surcharge
|
||||
IMPORTING iv_subtotal TYPE ty_price
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
||||
iv_volume_m3 = iv_volume_m3
|
||||
iv_floor = iv_floor
|
||||
iv_packing = iv_packing ).
|
||||
rv_price = lv_subtotal.
|
||||
IF iv_weekend = abap_true.
|
||||
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD subtotal.
|
||||
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
||||
+ distance_fee( iv_distance_km )
|
||||
+ floor_surcharge( iv_floor ).
|
||||
IF iv_packing = abap_true.
|
||||
rv_subtotal = rv_subtotal + c_packing_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = iv_distance_km * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_surcharge.
|
||||
IF iv_floor > 0.
|
||||
rv_surcharge = iv_floor * c_floor_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
81
tasks_gen/eval/G0167/reference/move_pricer.testclasses.abap
Normal file
81
tasks_gen/eval/G0167/reference/move_pricer.testclasses.abap
Normal file
@@ -0,0 +1,81 @@
|
||||
CLASS ltc_move_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}move_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS base_fee_only FOR TESTING.
|
||||
METHODS distance_fee FOR TESTING.
|
||||
METHODS first_floor FOR TESTING.
|
||||
METHODS packing_fee FOR TESTING.
|
||||
METHODS weekend_surcharge FOR TESTING.
|
||||
METHODS combined_move FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_move_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}move_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_fee_only.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '250.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '268.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 15
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD first_floor.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '265.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 1
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD packing_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '430.00' )
|
||||
act = mo_cut->calculate( iv_distance_km = 0
|
||||
iv_volume_m3 = 0
|
||||
iv_floor = 0
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '441.28' )
|
||||
act = mo_cut->calculate( iv_distance_km = 20
|
||||
iv_volume_m3 = 3
|
||||
iv_floor = 0
|
||||
iv_packing = abap_false
|
||||
iv_weekend = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD combined_move.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV ty_price( '669.76' )
|
||||
act = mo_cut->calculate( iv_distance_km = 15
|
||||
iv_volume_m3 = 3
|
||||
iv_floor = 2
|
||||
iv_packing = abap_true
|
||||
iv_weekend = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
48
tasks_gen/eval/G0167/seed/move_pricer.clas.abap
Normal file
48
tasks_gen/eval/G0167/seed/move_pricer.clas.abap
Normal file
@@ -0,0 +1,48 @@
|
||||
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS:
|
||||
c_base_fee TYPE ty_price VALUE '250.00',
|
||||
c_volume_fee TYPE ty_price VALUE '40.00',
|
||||
c_distance_fee TYPE ty_price VALUE '1.20',
|
||||
c_floor_fee TYPE ty_price VALUE '15.00',
|
||||
c_packing_fee TYPE ty_price VALUE '180.00',
|
||||
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS distance_fee
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}move_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA lv_price TYPE ty_price.
|
||||
lv_price = c_base_fee + iv_volume_m3 * c_volume_fee.
|
||||
lv_price = lv_price + distance_fee( iv_distance_km ).
|
||||
IF iv_floor > 0.
|
||||
lv_price = lv_price + ( iv_floor - 1 ) * c_floor_fee.
|
||||
ENDIF.
|
||||
IF iv_packing = abap_true.
|
||||
lv_price = lv_price + c_packing_fee.
|
||||
ENDIF.
|
||||
IF iv_weekend = abap_true.
|
||||
lv_price = lv_price + round( val = c_base_fee * c_weekend_rate dec = 2 ).
|
||||
ENDIF.
|
||||
rv_price = lv_price.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distance_fee.
|
||||
rv_fee = ( iv_distance_km DIV 10 ) * 10 * c_distance_fee.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
64
tasks_gen/eval/G0167/spec.md
Normal file
64
tasks_gen/eval/G0167/spec.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# 1. Goal
|
||||
The class {{P}}MOVE_PRICER calculates the price of a house move for a moving
|
||||
company. Users report three defects in the calculation. Fix the class. All other
|
||||
behavior stays the same.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The class {{P}}MOVE_PRICER exists in package $TMP. It is active.
|
||||
- The class is public and final. It has a public constructor without parameters.
|
||||
- The public section contains the type TY_PRICE and the constants C_BASE_FEE,
|
||||
C_VOLUME_FEE, C_DISTANCE_FEE, C_FLOOR_FEE, C_PACKING_FEE and C_WEEKEND_RATE.
|
||||
- The class has one public method:
|
||||
CALCULATE
|
||||
IMPORTING iv_distance_km TYPE i
|
||||
iv_volume_m3 TYPE i
|
||||
iv_floor TYPE i
|
||||
iv_packing TYPE abap_bool
|
||||
iv_weekend TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
- CALCULATE gives the price of one move. The price has these parts: a base fee, a
|
||||
volume fee, a distance fee, a floor surcharge, a packing fee and a weekend
|
||||
surcharge.
|
||||
|
||||
# 4. Contract
|
||||
- Fix the class {{P}}MOVE_PRICER in package $TMP.
|
||||
- Keep the public interface. The type TY_PRICE, the constants and the signature of
|
||||
CALCULATE stay the same.
|
||||
- Do not add public methods. Do not rename the class.
|
||||
|
||||
# 5. Business rules
|
||||
The price has these parts:
|
||||
1. Base fee: 250.00 EUR for each move.
|
||||
2. Volume fee: 40.00 EUR for each cubic metre of the move (iv_volume_m3).
|
||||
3. Distance fee: 1.20 EUR for each kilometre of the distance (iv_distance_km).
|
||||
4. Floor surcharge: 15.00 EUR for each floor above the ground floor. iv_floor is
|
||||
the floor number. Floor 0 is the ground floor. If iv_floor is 0 or less, the
|
||||
surcharge is 0.00 EUR.
|
||||
5. Packing fee: 180.00 EUR if iv_packing is abap_true. Else 0.00 EUR.
|
||||
6. Subtotal: the sum of the parts 1 to 5.
|
||||
7. Weekend surcharge: if iv_weekend is abap_true, add 12 % of the subtotal,
|
||||
rounded to 2 decimal places. Else add 0.00 EUR.
|
||||
8. The price is the subtotal plus the weekend surcharge.
|
||||
The input values are not negative.
|
||||
|
||||
Users report these defects:
|
||||
- A move over 15 km is charged a distance fee for only 10 km. Every kilometre
|
||||
must be charged.
|
||||
- A move to the first floor is free. The first floor must cost 15.00 EUR. A move
|
||||
to the third floor costs 30.00 EUR. It must cost 45.00 EUR.
|
||||
- A weekend move is always charged a weekend surcharge of 30.00 EUR. The
|
||||
surcharge must be 12 % of the subtotal.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: SAP_BASIS 8.16.
|
||||
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
||||
variables. No comment that restates the code.
|
||||
- Out of scope: no other objects.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
47
tasks_gen/eval/G0167/task.json
Normal file
47
tasks_gen/eval/G0167/task.json
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"id": "G0167",
|
||||
"category": "I",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}MOVE_PRICER",
|
||||
"file": "seed/move_pricer.clas.abap",
|
||||
"description": "Faulty move price class with three defects"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}MOVE_PRICER"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}MOVE_PRICER_HIDDEN",
|
||||
"file": "hidden/move_pricer_hidden.clas.abap",
|
||||
"description": "Hidden tests for the move price class"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}MOVE_PRICER",
|
||||
"file": "reference/move_pricer.clas.abap",
|
||||
"description": "Corrected move price class",
|
||||
"testclasses_file": "reference/move_pricer.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user