Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
105
tasks_gen/train/G1010/faulty/m0_phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/faulty/m0_phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price / device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price < c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express = abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
rv_price = rv_price * c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
105
tasks_gen/train/G1010/faulty/m1_phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/faulty/m1_phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price * device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price >= c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express = abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
rv_price = rv_price * c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
105
tasks_gen/train/G1010/faulty/m2_phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/faulty/m2_phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price * device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price < c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express <> abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
rv_price = rv_price * c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
105
tasks_gen/train/G1010/faulty/m3_phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/faulty/m3_phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price * device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price < c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express = abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_false.
|
||||
rv_price = rv_price * c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
105
tasks_gen/train/G1010/faulty/m4_phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/faulty/m4_phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price * device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price < c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express = abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
rv_price = rv_price / c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
28
tasks_gen/train/G1010/generation.json
Normal file
28
tasks_gen/train/G1010/generation.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"id": "G1010",
|
||||
"pool": "train",
|
||||
"object_type": "CLAS",
|
||||
"category": "E",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"reference/phone_repair_pricer.clas.abap line 27: syntax error for release v758 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"METHODS\""
|
||||
],
|
||||
"by_check": {
|
||||
"abaplint": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
137
tasks_gen/train/G1010/hidden/t31_hidden.clas.abap
Normal file
137
tasks_gen/train/G1010/hidden/t31_hidden.clas.abap
Normal file
@@ -0,0 +1,137 @@
|
||||
CLASS {{p}}t31_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_screen_basic TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_high_full TYPE ty_price VALUE '101.00'.
|
||||
CONSTANTS c_mid_board TYPE ty_price VALUE '163.90'.
|
||||
CONSTANTS c_minimum TYPE ty_price VALUE '25.00'.
|
||||
CONSTANTS c_zero TYPE ty_price VALUE '0.00'.
|
||||
CONSTANTS c_port_basic TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_camera_express TYPE ty_price VALUE '74.00'.
|
||||
CONSTANTS c_camera_full TYPE ty_price VALUE '59.20'.
|
||||
CONSTANTS c_port_high TYPE ty_price VALUE '61.25'.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}phone_repair_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS screen_basic_plain FOR TESTING.
|
||||
METHODS screen_high_express_warranty FOR TESTING.
|
||||
METHODS mid_device_surcharge FOR TESTING.
|
||||
METHODS battery_minimum_charge FOR TESTING.
|
||||
METHODS battery_warranty_minimum FOR TESTING.
|
||||
METHODS unknown_repair_is_zero FOR TESTING.
|
||||
METHODS unknown_repair_ignores_extras FOR TESTING.
|
||||
METHODS unknown_device_is_basic FOR TESTING.
|
||||
METHODS express_adds_fee FOR TESTING.
|
||||
METHODS warranty_after_express FOR TESTING.
|
||||
METHODS port_high_no_extras FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t31_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}phone_repair_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD screen_basic_plain.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_screen_basic
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'SCREEN'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD screen_high_express_warranty.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_high_full
|
||||
act = mo_cut->calculate_price( iv_device = 'HIGH'
|
||||
iv_repair = 'SCREEN'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mid_device_surcharge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_mid_board
|
||||
act = mo_cut->calculate_price( iv_device = 'MID'
|
||||
iv_repair = 'BOARD'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD battery_minimum_charge.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_minimum
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'BATTERY'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD battery_warranty_minimum.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_minimum
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'BATTERY'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_repair_is_zero.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_zero
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'SPEAKER'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_repair_ignores_extras.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_zero
|
||||
act = mo_cut->calculate_price( iv_device = 'HIGH'
|
||||
iv_repair = 'SPEAKER'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_device_is_basic.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_port_basic
|
||||
act = mo_cut->calculate_price( iv_device = 'ULTRA'
|
||||
iv_repair = 'PORT'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD express_adds_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_camera_express
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'CAMERA'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warranty_after_express.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_camera_full
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'CAMERA'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD port_high_no_extras.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_port_high
|
||||
act = mo_cut->calculate_price( iv_device = 'HIGH'
|
||||
iv_repair = 'PORT'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
79
tasks_gen/train/G1010/mutation.json
Normal file
79
tasks_gen/train/G1010/mutation.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"task": "G1010",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"mutant": "line 60: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"MID_DEVICE_SURCHARGE",
|
||||
"PORT_HIGH_NO_EXTRAS",
|
||||
"SCREEN_HIGH_EXPRESS_WARRANTY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"mutant": "line 65: < -> >= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "2/11",
|
||||
"failed_tests": [
|
||||
"BATTERY_MINIMUM_CHARGE",
|
||||
"BATTERY_WARRANTY_MINIMUM",
|
||||
"EXPRESS_ADDS_FEE",
|
||||
"MID_DEVICE_SURCHARGE",
|
||||
"PORT_HIGH_NO_EXTRAS",
|
||||
"SCREEN_BASIC_PLAIN",
|
||||
"SCREEN_HIGH_EXPRESS_WARRANTY",
|
||||
"UNKNOWN_DEVICE_IS_BASIC",
|
||||
"WARRANTY_AFTER_EXPRESS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"mutant": "line 98: = -> <> (eq)",
|
||||
"status": "killed",
|
||||
"hidden": "2/11",
|
||||
"failed_tests": [
|
||||
"BATTERY_MINIMUM_CHARGE",
|
||||
"BATTERY_WARRANTY_MINIMUM",
|
||||
"EXPRESS_ADDS_FEE",
|
||||
"MID_DEVICE_SURCHARGE",
|
||||
"PORT_HIGH_NO_EXTRAS",
|
||||
"SCREEN_BASIC_PLAIN",
|
||||
"SCREEN_HIGH_EXPRESS_WARRANTY",
|
||||
"UNKNOWN_DEVICE_IS_BASIC",
|
||||
"WARRANTY_AFTER_EXPRESS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"mutant": "line 101: abap_true -> abap_false (bool)",
|
||||
"status": "killed",
|
||||
"hidden": "4/11",
|
||||
"failed_tests": [
|
||||
"EXPRESS_ADDS_FEE",
|
||||
"MID_DEVICE_SURCHARGE",
|
||||
"PORT_HIGH_NO_EXTRAS",
|
||||
"SCREEN_BASIC_PLAIN",
|
||||
"SCREEN_HIGH_EXPRESS_WARRANTY",
|
||||
"UNKNOWN_DEVICE_IS_BASIC",
|
||||
"WARRANTY_AFTER_EXPRESS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"mutant": "line 102: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "9/11",
|
||||
"failed_tests": [
|
||||
"SCREEN_HIGH_EXPRESS_WARRANTY",
|
||||
"WARRANTY_AFTER_EXPRESS"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
105
tasks_gen/train/G1010/reference/phone_repair_pricer.clas.abap
Normal file
105
tasks_gen/train/G1010/reference/phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,105 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'.
|
||||
CONSTANTS c_base_board TYPE ty_price VALUE '149.00'.
|
||||
CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'.
|
||||
CONSTANTS c_base_port TYPE ty_price VALUE '49.00'.
|
||||
CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'.
|
||||
CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'.
|
||||
CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'.
|
||||
CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'.
|
||||
CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'.
|
||||
CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'.
|
||||
|
||||
METHODS base_price
|
||||
IMPORTING iv_repair TYPE ty_repair
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
|
||||
METHODS device_factor
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
RETURNING VALUE(rv_factor) TYPE ty_price.
|
||||
|
||||
METHODS price_with_extras
|
||||
IMPORTING iv_price TYPE ty_price
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
rv_price = base_price( iv_repair ).
|
||||
IF rv_price IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rv_price = rv_price * device_factor( iv_device ).
|
||||
rv_price = price_with_extras( iv_price = rv_price
|
||||
iv_express = iv_express
|
||||
iv_warranty = iv_warranty ).
|
||||
|
||||
IF rv_price < c_minimum_price.
|
||||
rv_price = c_minimum_price.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_repair.
|
||||
WHEN c_repair_screen.
|
||||
rv_price = c_base_screen.
|
||||
WHEN c_repair_battery.
|
||||
rv_price = c_base_battery.
|
||||
WHEN c_repair_board.
|
||||
rv_price = c_base_board.
|
||||
WHEN c_repair_camera.
|
||||
rv_price = c_base_camera.
|
||||
WHEN c_repair_port.
|
||||
rv_price = c_base_port.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor.
|
||||
CASE iv_device.
|
||||
WHEN c_device_mid.
|
||||
rv_factor = c_factor_mid.
|
||||
WHEN c_device_high.
|
||||
rv_factor = c_factor_high.
|
||||
WHEN OTHERS.
|
||||
rv_factor = c_factor_basic.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_with_extras.
|
||||
rv_price = iv_price.
|
||||
IF iv_express = abap_true.
|
||||
rv_price = rv_price + c_express_fee.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
rv_price = rv_price * c_warranty_rate.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,84 @@
|
||||
CLASS ltc_phone_repair_pricer DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_screen_basic TYPE ty_price VALUE '89.00'.
|
||||
CONSTANTS c_port_high TYPE ty_price VALUE '61.25'.
|
||||
CONSTANTS c_camera_express TYPE ty_price VALUE '74.00'.
|
||||
CONSTANTS c_camera_full TYPE ty_price VALUE '59.20'.
|
||||
CONSTANTS c_minimum TYPE ty_price VALUE '25.00'.
|
||||
CONSTANTS c_zero TYPE ty_price VALUE '0.00'.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}phone_repair_pricer.
|
||||
|
||||
METHODS setup.
|
||||
METHODS base_price_screen FOR TESTING.
|
||||
METHODS device_factor_high FOR TESTING.
|
||||
METHODS express_fee FOR TESTING.
|
||||
METHODS warranty_rate FOR TESTING.
|
||||
METHODS minimum_price FOR TESTING.
|
||||
METHODS unknown_repair FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}phone_repair_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price_screen.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_screen_basic
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'SCREEN'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD device_factor_high.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_port_high
|
||||
act = mo_cut->calculate_price( iv_device = 'HIGH'
|
||||
iv_repair = 'PORT'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD express_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_camera_express
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'CAMERA'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warranty_rate.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_camera_full
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'CAMERA'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_price.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_minimum
|
||||
act = mo_cut->calculate_price( iv_device = 'BASIC'
|
||||
iv_repair = 'BATTERY'
|
||||
iv_express = abap_false
|
||||
iv_warranty = abap_false ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_repair.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_zero
|
||||
act = mo_cut->calculate_price( iv_device = 'HIGH'
|
||||
iv_repair = 'SPEAKER'
|
||||
iv_express = abap_true
|
||||
iv_warranty = abap_true ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
90
tasks_gen/train/G1010/seed/phone_repair_pricer.clas.abap
Normal file
90
tasks_gen/train/G1010/seed/phone_repair_pricer.clas.abap
Normal file
@@ -0,0 +1,90 @@
|
||||
CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_device TYPE c LENGTH 6.
|
||||
TYPES ty_repair TYPE c LENGTH 8.
|
||||
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'.
|
||||
CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'.
|
||||
CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'.
|
||||
|
||||
CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'.
|
||||
CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'.
|
||||
CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'.
|
||||
CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'.
|
||||
CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_device TYPE ty_device
|
||||
iv_repair TYPE ty_repair
|
||||
iv_express TYPE abap_bool
|
||||
iv_warranty TYPE abap_bool
|
||||
RETURNING VALUE(rv_price) TYPE ty_price.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}phone_repair_pricer IMPLEMENTATION.
|
||||
METHOD calculate_price.
|
||||
DATA lv_price TYPE ty_price.
|
||||
DATA lv_factor TYPE ty_price.
|
||||
DATA lv_found TYPE abap_bool.
|
||||
|
||||
CLEAR lv_found.
|
||||
IF iv_repair = c_repair_screen.
|
||||
lv_price = '89.00'.
|
||||
lv_found = abap_true.
|
||||
ELSEIF iv_repair = c_repair_battery.
|
||||
lv_price = '19.00'.
|
||||
lv_found = abap_true.
|
||||
ELSEIF iv_repair = c_repair_board.
|
||||
lv_price = '149.00'.
|
||||
lv_found = abap_true.
|
||||
ELSEIF iv_repair = c_repair_camera.
|
||||
lv_price = '59.00'.
|
||||
lv_found = abap_true.
|
||||
ELSEIF iv_repair = c_repair_port.
|
||||
lv_price = '49.00'.
|
||||
lv_found = abap_true.
|
||||
ENDIF.
|
||||
|
||||
IF lv_found = abap_true.
|
||||
IF iv_device = c_device_high.
|
||||
lv_factor = '1.25'.
|
||||
lv_price = lv_price * lv_factor.
|
||||
IF iv_express = abap_true.
|
||||
lv_price = lv_price + 15.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
lv_factor = '0.80'.
|
||||
lv_price = lv_price * lv_factor.
|
||||
ENDIF.
|
||||
ELSEIF iv_device = c_device_mid.
|
||||
lv_factor = '1.10'.
|
||||
lv_price = lv_price * lv_factor.
|
||||
IF iv_express = abap_true.
|
||||
lv_price = lv_price + 15.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
lv_factor = '0.80'.
|
||||
lv_price = lv_price * lv_factor.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
IF iv_express = abap_true.
|
||||
lv_price = lv_price + 15.
|
||||
ENDIF.
|
||||
IF iv_warranty = abap_true.
|
||||
lv_factor = '0.80'.
|
||||
lv_price = lv_price * lv_factor.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF lv_price < 25.
|
||||
lv_price = 25.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
CLEAR lv_price.
|
||||
ENDIF.
|
||||
|
||||
rv_price = lv_price.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
55
tasks_gen/train/G1010/spec.md
Normal file
55
tasks_gen/train/G1010/spec.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 1. Goal
|
||||
A mobile phone repair shop prices repair orders. The checkout program of the
|
||||
shop calls the class {{P}}PHONE_REPAIR_PRICER for each order and prints the
|
||||
price that the class returns. The class works, but its code is legacy code: one
|
||||
long method, repeated blocks and prices that are hidden in the code. Refactor
|
||||
the class in place. The behavior must stay the same.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The class {{P}}PHONE_REPAIR_PRICER exists in package $TMP and is active. Its
|
||||
source code is the legacy code.
|
||||
- The checkout program calls the public method CALCULATE_PRICE. It passes the
|
||||
device class, the repair type, the express flag and the warranty flag, and it
|
||||
prints the returned price.
|
||||
- The class is in production. Its public interface must not change.
|
||||
- The class has no tests.
|
||||
|
||||
# 4. Contract
|
||||
- Refactor the class {{P}}PHONE_REPAIR_PRICER in package $TMP. Keep the name.
|
||||
Do not create a second class.
|
||||
- The class stays public and final. The constructor stays public and has no
|
||||
parameters.
|
||||
- The public section stays as it is:
|
||||
- the type TY_DEVICE (character 6), the type TY_REPAIR (character 8) and the
|
||||
type TY_PRICE (packed number, length 8, 2 decimals);
|
||||
- the constants C_DEVICE_BASIC, C_DEVICE_MID and C_DEVICE_HIGH of type
|
||||
TY_DEVICE;
|
||||
- the constants C_REPAIR_SCREEN, C_REPAIR_BATTERY, C_REPAIR_BOARD,
|
||||
C_REPAIR_CAMERA and C_REPAIR_PORT of type TY_REPAIR;
|
||||
- the method CALCULATE_PRICE with the importing parameters IV_DEVICE
|
||||
(TY_DEVICE), IV_REPAIR (TY_REPAIR), IV_EXPRESS (ABAP_BOOL) and IV_WARRANTY
|
||||
(ABAP_BOOL), and the returning parameter RV_PRICE (TY_PRICE).
|
||||
- Do not add other public methods, types, constants or attributes.
|
||||
|
||||
# 5. Business rules
|
||||
- The behavior of the class must not change. Every combination of the four
|
||||
input parameters must return the same price as before.
|
||||
- The rules are in the legacy source code of the class. Read the legacy code.
|
||||
Keep every rule and keep the sequence of the steps.
|
||||
- Do not add rules and do not remove rules.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: ABAP Platform 2025 (SAP_BASIS 816).
|
||||
- Coding standards: Clean ABAP. Methods below 40 statements. No global
|
||||
variables. No comment that restates the code. Replace the prices and the
|
||||
factors with named constants. Remove the repeated blocks. Use names that say
|
||||
what the data and the methods mean.
|
||||
- Out of scope: do not change the public interface of the class.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
49
tasks_gen/train/G1010/task.json
Normal file
49
tasks_gen/train/G1010/task.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"id": "G1010",
|
||||
"category": "E",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 60,
|
||||
"max_activations": 15
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"file": "seed/phone_repair_pricer.clas.abap",
|
||||
"description": "Legacy phone repair price calculator: one long method, repeated blocks, prices hidden in the code"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}PHONE_REPAIR_PRICER"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T31_HIDDEN",
|
||||
"file": "hidden/t31_hidden.clas.abap",
|
||||
"description": "Behavior tests for the refactored phone repair price calculator"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}PHONE_REPAIR_PRICER",
|
||||
"file": "reference/phone_repair_pricer.clas.abap",
|
||||
"description": "Refactored phone repair price calculator",
|
||||
"testclasses_file": "reference/phone_repair_pricer.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"duplicate_code",
|
||||
"magic_numbers"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user