Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
51
tasks_gen/train/G1078/faulty/m0_sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/faulty/m0_sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_true.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer = abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres > 1000.
|
||||
lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee + lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
51
tasks_gen/train/G1078/faulty/m1_sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/faulty/m1_sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer <> abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres > 1000.
|
||||
lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee + lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
51
tasks_gen/train/G1078/faulty/m2_sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/faulty/m2_sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer = abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres <= 1000.
|
||||
lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee + lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
51
tasks_gen/train/G1078/faulty/m3_sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/faulty/m3_sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer = abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres > 1000.
|
||||
lv_steps = ( iv_tank_litres - 1002 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee + lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
51
tasks_gen/train/G1078/faulty/m4_sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/faulty/m4_sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer = abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres > 1000.
|
||||
lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee - lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
30
tasks_gen/train/G1078/generation.json
Normal file
30
tasks_gen/train/G1078/generation.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"id": "G1078",
|
||||
"pool": "train",
|
||||
"object_type": "FUNC",
|
||||
"category": "G",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"Too close to task T13 (similarity spec 0.68, rules 0.62, names 0.33). Choose a different business topic and different object names.",
|
||||
"Too close to task G0151 (similarity spec 0.66, rules 0.61, names 0.33). Choose a different business topic and different object names.",
|
||||
"Too close to task G0156 (similarity spec 0.65, rules 0.60, names 0.33). Choose a different business topic and different object names."
|
||||
],
|
||||
"by_check": {
|
||||
"extra": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
97
tasks_gen/train/G1078/hidden/sewer_hidden.clas.abap
Normal file
97
tasks_gen/train/G1078/hidden/sewer_hidden.clas.abap
Normal file
@@ -0,0 +1,97 @@
|
||||
CLASS {{p}}sewer_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS call
|
||||
IMPORTING
|
||||
iv_litres TYPE i
|
||||
iv_km TYPE i DEFAULT 0
|
||||
iv_mains TYPE abap_bool DEFAULT abap_false
|
||||
iv_fee TYPE decfloat34 DEFAULT 7
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
ev_fee TYPE decfloat34
|
||||
ev_subrc TYPE sysubrc.
|
||||
METHODS base_fee FOR TESTING.
|
||||
METHODS volume_steps FOR TESTING.
|
||||
METHODS travel_fee FOR TESTING.
|
||||
METHODS travel_cap FOR TESTING.
|
||||
METHODS large_tank FOR TESTING.
|
||||
METHODS fee_cap FOR TESTING.
|
||||
METHODS mains_sewer_skips FOR TESTING.
|
||||
METHODS skip_false FOR TESTING.
|
||||
METHODS invalid_litres FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}sewer_hidden IMPLEMENTATION.
|
||||
METHOD call.
|
||||
ev_fee = iv_fee.
|
||||
CALL FUNCTION '{{P}}SEWER_FEE'
|
||||
EXPORTING
|
||||
iv_tank_litres = iv_litres
|
||||
iv_distance_km = iv_km
|
||||
iv_mains_sewer = iv_mains
|
||||
IMPORTING
|
||||
ev_skip = ev_skip
|
||||
CHANGING
|
||||
cv_fee = ev_fee
|
||||
EXCEPTIONS
|
||||
invalid_litres = 1
|
||||
OTHERS = 2.
|
||||
ev_subrc = sy-subrc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_fee.
|
||||
call( EXPORTING iv_litres = 800
|
||||
IMPORTING ev_fee = DATA(lv_fee) ev_skip = DATA(lv_skip) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 75 ) act = lv_fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_skip ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_steps.
|
||||
call( EXPORTING iv_litres = 1001 IMPORTING ev_fee = DATA(lv_a) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 95 ) act = lv_a ).
|
||||
call( EXPORTING iv_litres = 1500 IMPORTING ev_fee = DATA(lv_b) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 95 ) act = lv_b ).
|
||||
call( EXPORTING iv_litres = 1501 IMPORTING ev_fee = DATA(lv_c) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 115 ) act = lv_c ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
call( EXPORTING iv_litres = 1000 iv_km = 10 IMPORTING ev_fee = DATA(lv_fee) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 90 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_cap.
|
||||
call( EXPORTING iv_litres = 1000 iv_km = 50 IMPORTING ev_fee = DATA(lv_fee) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 135 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD large_tank.
|
||||
call( EXPORTING iv_litres = 20000 IMPORTING ev_fee = DATA(lv_fee) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 835 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_cap.
|
||||
call( EXPORTING iv_litres = 30000 IMPORTING ev_fee = DATA(lv_fee) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 900 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mains_sewer_skips.
|
||||
call( EXPORTING iv_litres = 2000 iv_km = 20 iv_mains = abap_true iv_fee = 7
|
||||
IMPORTING ev_skip = DATA(lv_skip) ev_fee = DATA(lv_fee) ).
|
||||
cl_abap_unit_assert=>assert_true( lv_skip ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 7 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD skip_false.
|
||||
call( EXPORTING iv_litres = 1000 iv_km = 5
|
||||
IMPORTING ev_skip = DATA(lv_skip) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_skip ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_litres.
|
||||
call( EXPORTING iv_litres = 0 IMPORTING ev_subrc = DATA(lv_rc) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
66
tasks_gen/train/G1078/mutation.json
Normal file
66
tasks_gen/train/G1078/mutation.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"task": "G1078",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}SEWER_FEE",
|
||||
"mutant": "line 22: abap_false -> abap_true (bool)",
|
||||
"status": "killed",
|
||||
"hidden": "7/9",
|
||||
"failed_tests": [
|
||||
"BASE_FEE",
|
||||
"SKIP_FALSE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}SEWER_FEE",
|
||||
"mutant": "line 28: = -> <> (eq)",
|
||||
"status": "killed",
|
||||
"hidden": "1/9",
|
||||
"failed_tests": [
|
||||
"BASE_FEE",
|
||||
"FEE_CAP",
|
||||
"LARGE_TANK",
|
||||
"MAINS_SEWER_SKIPS",
|
||||
"SKIP_FALSE",
|
||||
"TRAVEL_CAP",
|
||||
"TRAVEL_FEE",
|
||||
"VOLUME_STEPS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}SEWER_FEE",
|
||||
"mutant": "line 34: > -> <= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "6/9",
|
||||
"failed_tests": [
|
||||
"FEE_CAP",
|
||||
"LARGE_TANK",
|
||||
"VOLUME_STEPS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}SEWER_FEE",
|
||||
"mutant": "line 35: 1001 -> 1002 (const)",
|
||||
"status": "killed",
|
||||
"hidden": "8/9",
|
||||
"failed_tests": [
|
||||
"VOLUME_STEPS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}SEWER_FEE",
|
||||
"mutant": "line 36: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "6/9",
|
||||
"failed_tests": [
|
||||
"FEE_CAP",
|
||||
"LARGE_TANK",
|
||||
"VOLUME_STEPS"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
51
tasks_gen/train/G1078/reference/sewer_fee.func.abap
Normal file
51
tasks_gen/train/G1078/reference/sewer_fee.func.abap
Normal file
@@ -0,0 +1,51 @@
|
||||
FUNCTION {{p}}sewer_fee
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'.
|
||||
CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'.
|
||||
CONSTANTS c_step_litres TYPE i VALUE 500.
|
||||
CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'.
|
||||
CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'.
|
||||
CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'.
|
||||
DATA lv_steps TYPE i.
|
||||
DATA lv_travel TYPE decfloat34.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
IF iv_tank_litres < 1.
|
||||
RAISE invalid_litres.
|
||||
ENDIF.
|
||||
|
||||
IF iv_mains_sewer = abap_true.
|
||||
ev_skip = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
cv_fee = c_base_fee.
|
||||
IF iv_tank_litres > 1000.
|
||||
lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1.
|
||||
cv_fee = cv_fee + lv_steps * c_step_fee.
|
||||
ENDIF.
|
||||
|
||||
IF iv_distance_km > 0.
|
||||
lv_travel = iv_distance_km * c_km_rate.
|
||||
IF lv_travel > c_travel_max.
|
||||
lv_travel = c_travel_max.
|
||||
ENDIF.
|
||||
cv_fee = cv_fee + lv_travel.
|
||||
ENDIF.
|
||||
|
||||
IF cv_fee > c_fee_max.
|
||||
cv_fee = c_fee_max.
|
||||
ENDIF.
|
||||
|
||||
ENDFUNCTION.
|
||||
93
tasks_gen/train/G1078/reference/sewer_test.clas.abap
Normal file
93
tasks_gen/train/G1078/reference/sewer_test.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}sewer_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS fee_for
|
||||
IMPORTING
|
||||
iv_litres TYPE i
|
||||
iv_km TYPE i DEFAULT 0
|
||||
RETURNING VALUE(rv_fee) TYPE decfloat34.
|
||||
METHODS base_fee FOR TESTING.
|
||||
METHODS volume_steps FOR TESTING.
|
||||
METHODS travel_fee FOR TESTING.
|
||||
METHODS fee_cap FOR TESTING.
|
||||
METHODS mains_sewer FOR TESTING.
|
||||
METHODS invalid_litres FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}sewer_test IMPLEMENTATION.
|
||||
METHOD fee_for.
|
||||
DATA lv_skip TYPE abap_bool.
|
||||
CALL FUNCTION '{{P}}SEWER_FEE'
|
||||
EXPORTING
|
||||
iv_tank_litres = iv_litres
|
||||
iv_distance_km = iv_km
|
||||
iv_mains_sewer = abap_false
|
||||
IMPORTING
|
||||
ev_skip = lv_skip
|
||||
CHANGING
|
||||
cv_fee = rv_fee
|
||||
EXCEPTIONS
|
||||
invalid_litres = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV decfloat34( 75 )
|
||||
act = fee_for( iv_litres = 1000 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_steps.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV decfloat34( 95 )
|
||||
act = fee_for( iv_litres = 1500 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV decfloat34( 115 )
|
||||
act = fee_for( iv_litres = 1501 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV decfloat34( 90 )
|
||||
act = fee_for( iv_litres = 1000 iv_km = 10 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee_cap.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV decfloat34( 900 )
|
||||
act = fee_for( iv_litres = 30000 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mains_sewer.
|
||||
DATA lv_fee TYPE decfloat34 VALUE 7.
|
||||
DATA lv_skip TYPE abap_bool.
|
||||
CALL FUNCTION '{{P}}SEWER_FEE'
|
||||
EXPORTING
|
||||
iv_tank_litres = 2000
|
||||
iv_distance_km = 20
|
||||
iv_mains_sewer = abap_true
|
||||
IMPORTING
|
||||
ev_skip = lv_skip
|
||||
CHANGING
|
||||
cv_fee = lv_fee.
|
||||
cl_abap_unit_assert=>assert_true( lv_skip ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 7 ) act = lv_fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_litres.
|
||||
DATA lv_fee TYPE decfloat34.
|
||||
CALL FUNCTION '{{P}}SEWER_FEE'
|
||||
EXPORTING
|
||||
iv_tank_litres = 0
|
||||
iv_distance_km = 0
|
||||
iv_mains_sewer = abap_false
|
||||
CHANGING
|
||||
cv_fee = lv_fee
|
||||
EXCEPTIONS
|
||||
invalid_litres = 1
|
||||
OTHERS = 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
15
tasks_gen/train/G1078/seed/sewer_sample.func.abap
Normal file
15
tasks_gen/train/G1078/seed/sewer_sample.func.abap
Normal file
@@ -0,0 +1,15 @@
|
||||
FUNCTION {{p}}sewer_sample
|
||||
IMPORTING
|
||||
iv_tank_litres TYPE i
|
||||
iv_distance_km TYPE i
|
||||
iv_mains_sewer TYPE abap_bool
|
||||
EXPORTING
|
||||
ev_skip TYPE abap_bool
|
||||
CHANGING
|
||||
cv_fee TYPE decfloat34
|
||||
EXCEPTIONS
|
||||
invalid_litres.
|
||||
|
||||
ev_skip = abap_false.
|
||||
|
||||
ENDFUNCTION.
|
||||
54
tasks_gen/train/G1078/spec.md
Normal file
54
tasks_gen/train/G1078/spec.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 1. Goal
|
||||
Calculate the emptying fee for one septic tank. The depot program calls one
|
||||
function module for each emptying job. The function module must have the same
|
||||
interface as the sample function module, because the depot program calls all fee
|
||||
modules in the same way.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- Function group {{P}}FG_SEWER exists in package $TMP.
|
||||
- Function module {{P}}SEWER_SAMPLE exists in this group. It is the sample fee
|
||||
module. Its interface is the interface that all fee modules must use.
|
||||
- A drainage company empties septic tanks. The depot program sends the size of
|
||||
the tank, the distance from the depot, and the connection type of the
|
||||
property.
|
||||
|
||||
# 4. Contract
|
||||
- Create the function module {{P}}SEWER_FEE in function group {{P}}FG_SEWER.
|
||||
- Use exactly the interface of {{P}}SEWER_SAMPLE:
|
||||
- importing iv_tank_litres type i
|
||||
- importing iv_distance_km type i
|
||||
- importing iv_mains_sewer type abap_bool
|
||||
- exporting ev_skip type abap_bool
|
||||
- changing cv_fee type decfloat34
|
||||
- exception invalid_litres
|
||||
|
||||
# 5. Business rules
|
||||
1. If iv_tank_litres is less than 1, raise the exception INVALID_LITRES.
|
||||
2. Set the skip flag to false. Rule 4 is the only exception.
|
||||
3. The base fee is 75.00. The base fee covers the first 1000 litres of the
|
||||
tank.
|
||||
4. If the property is connected to the mains sewer, no emptying is necessary.
|
||||
Set the skip flag to true and do not change the fee. Do not apply rules 5
|
||||
to 7.
|
||||
5. Each started 500 litres above 1000 litres adds 20.00 to the fee. Example:
|
||||
1000 litres add 0.00, 1001 litres add 20.00, 1500 litres add 20.00, and
|
||||
1501 litres add 40.00.
|
||||
6. The travel fee is 1.50 for each kilometre of iv_distance_km. The travel fee
|
||||
is not more than 60.00.
|
||||
7. The fee is the base fee of rule 3 plus the volume fee of rule 5 plus the
|
||||
travel fee of rule 6. The fee is not more than 900.00.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 7.40 SP05. Use only syntax that exists in 7.40 SP05. Do not
|
||||
use syntax that is newer than 7.40 SP05.
|
||||
- Out of scope: do not change {{P}}SEWER_SAMPLE.
|
||||
- Coding standards: Clean ABAP. A method has less than 40 statements.
|
||||
- Out of scope: no database access, no ALV, no dynpro.
|
||||
|
||||
# 7. Acceptance
|
||||
- The function module {{P}}SEWER_FEE is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write ABAP Unit tests for the function module in a global test class.
|
||||
85
tasks_gen/train/G1078/task.json
Normal file
85
tasks_gen/train/G1078/task.json
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"id": "G1078",
|
||||
"category": "G",
|
||||
"object_type": "FUNC",
|
||||
"difficulty": 2,
|
||||
"release_target": "v740sp05",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 60,
|
||||
"max_activations": 15
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "FUGR",
|
||||
"name": "{{P}}FG_SEWER",
|
||||
"description": "Fee modules of the drainage company"
|
||||
},
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}SEWER_SAMPLE",
|
||||
"functionGroup": "{{P}}FG_SEWER",
|
||||
"file": "seed/sewer_sample.func.abap",
|
||||
"description": "Sample fee module with the interface of all fee modules"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}SEWER_FEE",
|
||||
"functionGroup": "{{P}}FG_SEWER",
|
||||
"params": [
|
||||
{
|
||||
"name": "iv_tank_litres",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "iv_distance_km",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "iv_mains_sewer",
|
||||
"type": "abap_bool"
|
||||
},
|
||||
{
|
||||
"name": "ev_skip",
|
||||
"type": "abap_bool"
|
||||
},
|
||||
{
|
||||
"name": "cv_fee",
|
||||
"type": "decfloat34"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}SEWER_SAMPLE"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}SEWER_HIDDEN",
|
||||
"file": "hidden/sewer_hidden.clas.abap",
|
||||
"description": "Hidden tests for {{P}}SEWER_FEE"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}SEWER_FEE",
|
||||
"functionGroup": "{{P}}FG_SEWER",
|
||||
"file": "reference/sewer_fee.func.abap",
|
||||
"description": "Emptying fee module"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}SEWER_TEST",
|
||||
"file": "reference/sewer_test.clas.abap",
|
||||
"description": "Own tests for {{P}}SEWER_FEE"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"no_newer_syntax"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user