Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
100
tasks_gen/eval/G0105/faulty/m0_toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/faulty/m0_toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent - surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 2 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee < c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 1 OR iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
100
tasks_gen/eval/G0105/faulty/m1_toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/faulty/m1_toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent + surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 3 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee < c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 1 OR iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
100
tasks_gen/eval/G0105/faulty/m2_toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/faulty/m2_toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent + surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 2 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee >= c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 1 OR iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
100
tasks_gen/eval/G0105/faulty/m3_toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/faulty/m3_toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent + surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 2 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee < c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 2 OR iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
100
tasks_gen/eval/G0105/faulty/m4_toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/faulty/m4_toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent + surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 2 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee < c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 1 AND iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
33
tasks_gen/eval/G0105/generation.json
Normal file
33
tasks_gen/eval/G0105/generation.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"id": "G0105",
|
||||
"pool": "eval",
|
||||
"object_type": "FUNC",
|
||||
"category": "A",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 0,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"reference/toll_calc.testclasses.abap line 63: syntax error for release v758 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"cl_abap_unit_assert\""
|
||||
],
|
||||
"by_check": {
|
||||
"abaplint": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
140
tasks_gen/eval/G0105/hidden/t14_hidden.clas.abap
Normal file
140
tasks_gen/eval/G0105/hidden/t14_hidden.clas.abap
Normal file
@@ -0,0 +1,140 @@
|
||||
CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS fee_for
|
||||
IMPORTING iv_km TYPE decfloat34
|
||||
iv_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34.
|
||||
METHODS is_rejected
|
||||
IMPORTING iv_km TYPE decfloat34
|
||||
iv_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_rejected) TYPE abap_bool.
|
||||
METHODS fee_two_axles FOR TESTING.
|
||||
METHODS fee_three_axles FOR TESTING.
|
||||
METHODS fee_four_axles FOR TESTING.
|
||||
METHODS fee_five_axles FOR TESTING.
|
||||
METHODS rounding_half_up FOR TESTING.
|
||||
METHODS minimum_fee FOR TESTING.
|
||||
METHODS rejects_negative_km FOR TESTING.
|
||||
METHODS rejects_bad_class FOR TESTING.
|
||||
METHODS rejects_bad_axles FOR TESTING.
|
||||
METHODS func_returns_fee FOR TESTING.
|
||||
METHODS func_rejects_input FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t14_hidden IMPLEMENTATION.
|
||||
|
||||
METHOD fee_for.
|
||||
TRY.
|
||||
rv_fee = NEW {{p}}toll_calc( )->calculate(
|
||||
iv_distance_km = iv_km
|
||||
iv_weight_class = iv_class
|
||||
iv_axles = iv_axles ).
|
||||
CATCH cx_abap_invalid_value.
|
||||
rv_fee = -1.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_rejected.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = iv_km iv_class = iv_class iv_axles = iv_axles ).
|
||||
rv_rejected = boolc( lv_fee < 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_two_axles.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_three_axles.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 2 iv_axles = 3 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '14.70' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_four_axles.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 3 iv_axles = 4 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '19.80' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_five_axles.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 4 iv_axles = 5 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '25.30' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rounding_half_up.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 25 iv_class = 1 iv_axles = 3 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '2.63' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_fee.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 5 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1.00' ) act = lv_fee ).
|
||||
lv_fee = fee_for( iv_km = 0 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1.00' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_negative_km.
|
||||
DATA lv_rejected TYPE abap_bool.
|
||||
lv_rejected = is_rejected( iv_km = -1 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_bad_class.
|
||||
DATA lv_rejected TYPE abap_bool.
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 0 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 5 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_bad_axles.
|
||||
DATA lv_rejected TYPE abap_bool.
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 1 iv_axles = 1 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 1 iv_axles = 6 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD func_returns_fee.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
CALL FUNCTION '{{P}}TOLL_FEE'
|
||||
EXPORTING
|
||||
iv_distance_km = 100
|
||||
iv_weight_class = 3
|
||||
iv_axles = 4
|
||||
IMPORTING
|
||||
ev_fee = lv_fee
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '19.80' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD func_rejects_input.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
CALL FUNCTION '{{P}}TOLL_FEE'
|
||||
EXPORTING
|
||||
iv_distance_km = -1
|
||||
iv_weight_class = 1
|
||||
iv_axles = 2
|
||||
IMPORTING
|
||||
ev_fee = lv_fee
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ).
|
||||
cl_abap_unit_assert=>assert_initial( act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
66
tasks_gen/eval/G0105/mutation.json
Normal file
66
tasks_gen/eval/G0105/mutation.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"task": "G0105",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}TOLL_CALC",
|
||||
"mutant": "line 50: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "6/11",
|
||||
"failed_tests": [
|
||||
"FEE_FIVE_AXLES",
|
||||
"FEE_FOUR_AXLES",
|
||||
"FEE_THREE_AXLES",
|
||||
"FUNC_RETURNS_FEE",
|
||||
"ROUNDING_HALF_UP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TOLL_CALC",
|
||||
"mutant": "line 51: 2 -> 3 (const)",
|
||||
"status": "killed",
|
||||
"hidden": "10/11",
|
||||
"failed_tests": [
|
||||
"ROUNDING_HALF_UP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TOLL_CALC",
|
||||
"mutant": "line 53: < -> >= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "4/11",
|
||||
"failed_tests": [
|
||||
"FEE_FIVE_AXLES",
|
||||
"FEE_FOUR_AXLES",
|
||||
"FEE_THREE_AXLES",
|
||||
"FEE_TWO_AXLES",
|
||||
"FUNC_RETURNS_FEE",
|
||||
"MINIMUM_FEE",
|
||||
"ROUNDING_HALF_UP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TOLL_CALC",
|
||||
"mutant": "line 62: 1 -> 2 (const)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"FEE_TWO_AXLES",
|
||||
"MINIMUM_FEE",
|
||||
"ROUNDING_HALF_UP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TOLL_CALC",
|
||||
"mutant": "line 62: OR -> AND (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "10/11",
|
||||
"failed_tests": [
|
||||
"REJECTS_BAD_CLASS"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
62
tasks_gen/eval/G0105/reference/t14_test.clas.abap
Normal file
62
tasks_gen/eval/G0105/reference/t14_test.clas.abap
Normal file
@@ -0,0 +1,62 @@
|
||||
CLASS {{p}}t14_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS call_fee
|
||||
IMPORTING iv_km TYPE decfloat34
|
||||
iv_class TYPE i
|
||||
iv_axles TYPE i
|
||||
EXPORTING ev_fee TYPE decfloat34
|
||||
ev_subrc TYPE sysubrc.
|
||||
METHODS returns_fee FOR TESTING.
|
||||
METHODS rejects_input FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t14_test IMPLEMENTATION.
|
||||
|
||||
METHOD call_fee.
|
||||
CALL FUNCTION '{{P}}TOLL_FEE'
|
||||
EXPORTING
|
||||
iv_distance_km = iv_km
|
||||
iv_weight_class = iv_class
|
||||
iv_axles = iv_axles
|
||||
IMPORTING
|
||||
ev_fee = ev_fee
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
ev_subrc = sy-subrc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD returns_fee.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_rc TYPE sysubrc.
|
||||
call_fee(
|
||||
EXPORTING
|
||||
iv_km = 100
|
||||
iv_class = 2
|
||||
iv_axles = 3
|
||||
IMPORTING
|
||||
ev_fee = lv_fee
|
||||
ev_subrc = lv_rc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '14.70' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_input.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
DATA lv_rc TYPE sysubrc.
|
||||
call_fee(
|
||||
EXPORTING
|
||||
iv_km = -1
|
||||
iv_class = 1
|
||||
iv_axles = 2
|
||||
IMPORTING
|
||||
ev_fee = lv_fee
|
||||
ev_subrc = lv_rc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
|
||||
cl_abap_unit_assert=>assert_initial( act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
100
tasks_gen/eval/G0105/reference/toll_calc.clas.abap
Normal file
100
tasks_gen/eval/G0105/reference/toll_calc.clas.abap
Normal file
@@ -0,0 +1,100 @@
|
||||
CLASS {{p}}toll_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_percent TYPE decfloat34 VALUE '100'.
|
||||
CONSTANTS c_min_fee TYPE decfloat34 VALUE '1.00'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_rate,
|
||||
class_1 TYPE decfloat34 VALUE '0.10',
|
||||
class_2 TYPE decfloat34 VALUE '0.14',
|
||||
class_3 TYPE decfloat34 VALUE '0.18',
|
||||
class_4 TYPE decfloat34 VALUE '0.22',
|
||||
END OF c_rate.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_surcharge,
|
||||
axles_2 TYPE decfloat34 VALUE '0',
|
||||
axles_3 TYPE decfloat34 VALUE '5',
|
||||
axles_4 TYPE decfloat34 VALUE '10',
|
||||
axles_5 TYPE decfloat34 VALUE '15',
|
||||
END OF c_surcharge.
|
||||
|
||||
METHODS check_input
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RAISING cx_abap_invalid_value.
|
||||
METHODS base_rate
|
||||
IMPORTING iv_weight_class TYPE i
|
||||
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
||||
METHODS surcharge
|
||||
IMPORTING iv_axles TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD calculate.
|
||||
check_input(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
|
||||
DATA(lv_amount) = iv_distance_km * base_rate( iv_weight_class ).
|
||||
lv_amount = lv_amount * ( c_percent + surcharge( iv_axles ) ) / c_percent.
|
||||
rv_fee = round( val = lv_amount dec = 2 mode = cl_abap_math=>round_half_up ).
|
||||
|
||||
IF rv_fee < c_min_fee.
|
||||
rv_fee = c_min_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_input.
|
||||
IF iv_distance_km < 0.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_weight_class < 1 OR iv_weight_class > 4.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
IF iv_axles < 2 OR iv_axles > 5.
|
||||
RAISE EXCEPTION NEW cx_abap_invalid_value( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_rate.
|
||||
CASE iv_weight_class.
|
||||
WHEN 1.
|
||||
rv_rate = c_rate-class_1.
|
||||
WHEN 2.
|
||||
rv_rate = c_rate-class_2.
|
||||
WHEN 3.
|
||||
rv_rate = c_rate-class_3.
|
||||
WHEN 4.
|
||||
rv_rate = c_rate-class_4.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD surcharge.
|
||||
CASE iv_axles.
|
||||
WHEN 2.
|
||||
rv_percent = c_surcharge-axles_2.
|
||||
WHEN 3.
|
||||
rv_percent = c_surcharge-axles_3.
|
||||
WHEN 4.
|
||||
rv_percent = c_surcharge-axles_4.
|
||||
WHEN 5.
|
||||
rv_percent = c_surcharge-axles_5.
|
||||
WHEN OTHERS.
|
||||
rv_percent = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
65
tasks_gen/eval/G0105/reference/toll_calc.testclasses.abap
Normal file
65
tasks_gen/eval/G0105/reference/toll_calc.testclasses.abap
Normal file
@@ -0,0 +1,65 @@
|
||||
CLASS ltc_toll_calc DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS fee_for
|
||||
IMPORTING iv_km TYPE decfloat34
|
||||
iv_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34.
|
||||
METHODS is_rejected
|
||||
IMPORTING iv_km TYPE decfloat34
|
||||
iv_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_rejected) TYPE abap_bool.
|
||||
METHODS rate_and_surcharge FOR TESTING.
|
||||
METHODS minimum_fee FOR TESTING.
|
||||
METHODS rejects_invalid FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_toll_calc IMPLEMENTATION.
|
||||
|
||||
METHOD fee_for.
|
||||
TRY.
|
||||
rv_fee = NEW {{p}}toll_calc( )->calculate(
|
||||
iv_distance_km = iv_km
|
||||
iv_weight_class = iv_class
|
||||
iv_axles = iv_axles ).
|
||||
CATCH cx_abap_invalid_value.
|
||||
rv_fee = -1.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_rejected.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = iv_km iv_class = iv_class iv_axles = iv_axles ).
|
||||
rv_rejected = boolc( lv_fee < 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rate_and_surcharge.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = lv_fee ).
|
||||
lv_fee = fee_for( iv_km = 100 iv_class = 4 iv_axles = 5 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '25.30' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_fee.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
lv_fee = fee_for( iv_km = 1 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '1.00' ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_invalid.
|
||||
DATA lv_rejected TYPE abap_bool.
|
||||
lv_rejected = is_rejected( iv_km = -1 iv_class = 1 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 5 iv_axles = 2 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
lv_rejected = is_rejected( iv_km = 100 iv_class = 1 iv_axles = 6 ).
|
||||
cl_abap_unit_assert=>assert_true( act = lv_rejected ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
20
tasks_gen/eval/G0105/reference/toll_fee.func.abap
Normal file
20
tasks_gen/eval/G0105/reference/toll_fee.func.abap
Normal file
@@ -0,0 +1,20 @@
|
||||
FUNCTION {{p}}toll_fee
|
||||
IMPORTING
|
||||
iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
EXPORTING
|
||||
ev_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_input.
|
||||
|
||||
TRY.
|
||||
ev_fee = NEW {{p}}toll_calc( )->calculate(
|
||||
iv_distance_km = iv_distance_km
|
||||
iv_weight_class = iv_weight_class
|
||||
iv_axles = iv_axles ).
|
||||
CATCH cx_abap_invalid_value.
|
||||
RAISE invalid_input.
|
||||
ENDTRY.
|
||||
|
||||
ENDFUNCTION.
|
||||
86
tasks_gen/eval/G0105/spec.md
Normal file
86
tasks_gen/eval/G0105/spec.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# 1. Goal
|
||||
|
||||
A toll operator charges a fee for each truck trip on its road network. The trip
|
||||
log program calls one function module for each trip. The call happens before
|
||||
the program stores the trip. The fee depends only on the trip data that the
|
||||
caller passes.
|
||||
|
||||
# 2. Open questions
|
||||
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
|
||||
- Function group {{P}}FG_TOLL exists in package $TMP.
|
||||
- All objects of this task are in package $TMP.
|
||||
- The trip log program is not part of this task.
|
||||
|
||||
# 4. Contract
|
||||
|
||||
## 4.1 Function module {{P}}TOLL_FEE
|
||||
|
||||
Create the function module {{P}}TOLL_FEE in function group {{P}}FG_TOLL.
|
||||
The interface is exactly:
|
||||
|
||||
IMPORTING
|
||||
iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
EXPORTING
|
||||
ev_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_input
|
||||
|
||||
## 4.2 Class {{P}}TOLL_CALC
|
||||
|
||||
Create the global class {{P}}TOLL_CALC in package $TMP. The class is public and
|
||||
final. The class has a public instance constructor without parameters.
|
||||
The class has this public method:
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_distance_km TYPE decfloat34
|
||||
iv_weight_class TYPE i
|
||||
iv_axles TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34
|
||||
RAISING cx_abap_invalid_value.
|
||||
|
||||
# 5. Business rules
|
||||
|
||||
1. The distance is the length of the trip in kilometres. A distance below 0
|
||||
is invalid input.
|
||||
2. The weight class is 1, 2, 3, or 4. Every other value is invalid input.
|
||||
3. The number of axles is 2, 3, 4, or 5. Every other value is invalid input.
|
||||
4. Invalid input raises the exception INVALID_INPUT in {{P}}TOLL_FEE and the
|
||||
exception CX_ABAP_INVALID_VALUE in {{P}}TOLL_CALC. {{P}}TOLL_FEE does not
|
||||
set the fee in this case.
|
||||
5. The base rate per kilometre depends on the weight class:
|
||||
- Weight class 1: 0.10
|
||||
- Weight class 2: 0.14
|
||||
- Weight class 3: 0.18
|
||||
- Weight class 4: 0.22
|
||||
6. The number of axles adds a surcharge to the base amount:
|
||||
- 2 axles: 0 %
|
||||
- 3 axles: 5 %
|
||||
- 4 axles: 10 %
|
||||
- 5 axles: 15 %
|
||||
7. The base amount is the distance multiplied by the base rate. The fee is the
|
||||
base amount increased by the surcharge percentage. Round the fee half up to
|
||||
2 decimals.
|
||||
8. The minimum fee is 1.00. If the fee from rule 7 is below 1.00, the fee is
|
||||
1.00.
|
||||
9. {{P}}TOLL_FEE returns the fee that {{P}}TOLL_CALC calculates.
|
||||
|
||||
# 6. Constraints
|
||||
|
||||
- Release target: 7.58.
|
||||
- The calculation is pure logic. It reads no database table and no other
|
||||
external data.
|
||||
- Out of scope: the trip log program and every object that is not in the
|
||||
contract.
|
||||
|
||||
# 7. Acceptance
|
||||
|
||||
- {{P}}TOLL_FEE and {{P}}TOLL_CALC are active and have no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write ABAP Unit tests. Put local test classes in {{P}}TOLL_CALC. Write a
|
||||
global test class for {{P}}TOLL_FEE.
|
||||
82
tasks_gen/eval/G0105/task.json
Normal file
82
tasks_gen/eval/G0105/task.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"id": "G0105",
|
||||
"category": "A",
|
||||
"object_type": "FUNC",
|
||||
"difficulty": 2,
|
||||
"release_target": "v758",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "FUGR",
|
||||
"name": "{{P}}FG_TOLL",
|
||||
"description": "Toll fee function group"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}TOLL_FEE",
|
||||
"functionGroup": "{{P}}FG_TOLL",
|
||||
"params": [
|
||||
{
|
||||
"name": "iv_distance_km",
|
||||
"type": "decfloat34"
|
||||
},
|
||||
{
|
||||
"name": "iv_weight_class",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "iv_axles",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "ev_fee",
|
||||
"type": "decfloat34"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}TOLL_CALC"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T14_HIDDEN",
|
||||
"file": "hidden/t14_hidden.clas.abap",
|
||||
"description": "T14 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}TOLL_CALC",
|
||||
"file": "reference/toll_calc.clas.abap",
|
||||
"testclasses_file": "reference/toll_calc.testclasses.abap",
|
||||
"description": "Toll fee calculation"
|
||||
},
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}TOLL_FEE",
|
||||
"functionGroup": "{{P}}FG_TOLL",
|
||||
"file": "reference/toll_fee.func.abap",
|
||||
"description": "Toll fee function module"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T14_TEST",
|
||||
"file": "reference/t14_test.clas.abap",
|
||||
"description": "T14 own tests"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user