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:
91
tasks_gen/eval/G0123/faulty/m0_lift_stats.func.abap
Normal file
91
tasks_gen/eval/G0123/faulty/m0_lift_stats.func.abap
Normal file
@@ -0,0 +1,91 @@
|
||||
FUNCTION {{p}}lift_stats
|
||||
IMPORTING
|
||||
iv_scans TYPE string
|
||||
iv_lifts TYPE string
|
||||
EXPORTING
|
||||
ev_rides TYPE i
|
||||
ev_passes TYPE i
|
||||
ev_report TYPE string
|
||||
EXCEPTIONS
|
||||
no_lifts.
|
||||
|
||||
TYPES: BEGIN OF ty_lift,
|
||||
lift TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_lift,
|
||||
BEGIN OF ty_scan,
|
||||
pass TYPE string,
|
||||
lift TYPE string,
|
||||
END OF ty_scan,
|
||||
BEGIN OF ty_pass_area,
|
||||
pass TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_pass_area,
|
||||
BEGIN OF ty_pass,
|
||||
pass TYPE string,
|
||||
rides TYPE i,
|
||||
areas TYPE i,
|
||||
END OF ty_pass,
|
||||
ty_lines TYPE STANDARD TABLE OF string WITH EMPTY KEY.
|
||||
|
||||
DATA lt_lift_lines TYPE ty_lines.
|
||||
DATA lt_scan_lines TYPE ty_lines.
|
||||
DATA lt_lifts TYPE HASHED TABLE OF ty_lift WITH UNIQUE KEY lift.
|
||||
DATA lt_scans TYPE SORTED TABLE OF ty_scan WITH UNIQUE KEY pass lift.
|
||||
DATA lt_pass_areas TYPE SORTED TABLE OF ty_pass_area WITH UNIQUE KEY pass area.
|
||||
DATA lt_passes TYPE SORTED TABLE OF ty_pass WITH UNIQUE KEY pass.
|
||||
DATA ls_lift TYPE ty_lift.
|
||||
DATA ls_scan TYPE ty_scan.
|
||||
DATA ls_pass_area TYPE ty_pass_area.
|
||||
DATA lv_line TYPE string.
|
||||
DATA lv_key TYPE string.
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_sep TYPE string.
|
||||
|
||||
SPLIT iv_lifts AT cl_abap_char_utilities=>newline INTO TABLE lt_lift_lines.
|
||||
LOOP AT lt_lift_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL AND lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( lift = lv_key area = lv_value ) INTO TABLE lt_lifts.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_lifts ) = 0.
|
||||
RAISE no_lifts.
|
||||
ENDIF.
|
||||
|
||||
SPLIT iv_scans AT cl_abap_char_utilities=>newline INTO TABLE lt_scan_lines.
|
||||
LOOP AT lt_scan_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF NOT line_exists( lt_lifts[ lift = lv_value ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( pass = lv_key lift = lv_value ) INTO TABLE lt_scans.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_scans INTO ls_scan.
|
||||
READ TABLE lt_lifts INTO ls_lift WITH TABLE KEY lift = ls_scan-lift.
|
||||
INSERT VALUE #( pass = ls_scan-pass ) INTO TABLE lt_passes.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_pass>) WITH TABLE KEY pass = ls_scan-pass.
|
||||
<ls_pass>-rides = <ls_pass>-rides + 1.
|
||||
INSERT VALUE #( pass = ls_scan-pass area = ls_lift-area ) INTO TABLE lt_pass_areas.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_pass_areas INTO ls_pass_area.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_area_pass>) WITH TABLE KEY pass = ls_pass_area-pass.
|
||||
<ls_area_pass>-areas = <ls_area_pass>-areas + 1.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_passes ASSIGNING FIELD-SYMBOL(<ls_out>).
|
||||
ev_report = ev_report && lv_sep && |{ <ls_out>-pass };{ <ls_out>-rides };{ <ls_out>-areas }|.
|
||||
lv_sep = cl_abap_char_utilities=>newline.
|
||||
ENDLOOP.
|
||||
|
||||
ev_rides = lines( lt_scans ).
|
||||
ev_passes = lines( lt_passes ).
|
||||
|
||||
ENDFUNCTION.
|
||||
91
tasks_gen/eval/G0123/faulty/m1_lift_stats.func.abap
Normal file
91
tasks_gen/eval/G0123/faulty/m1_lift_stats.func.abap
Normal file
@@ -0,0 +1,91 @@
|
||||
FUNCTION {{p}}lift_stats
|
||||
IMPORTING
|
||||
iv_scans TYPE string
|
||||
iv_lifts TYPE string
|
||||
EXPORTING
|
||||
ev_rides TYPE i
|
||||
ev_passes TYPE i
|
||||
ev_report TYPE string
|
||||
EXCEPTIONS
|
||||
no_lifts.
|
||||
|
||||
TYPES: BEGIN OF ty_lift,
|
||||
lift TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_lift,
|
||||
BEGIN OF ty_scan,
|
||||
pass TYPE string,
|
||||
lift TYPE string,
|
||||
END OF ty_scan,
|
||||
BEGIN OF ty_pass_area,
|
||||
pass TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_pass_area,
|
||||
BEGIN OF ty_pass,
|
||||
pass TYPE string,
|
||||
rides TYPE i,
|
||||
areas TYPE i,
|
||||
END OF ty_pass,
|
||||
ty_lines TYPE STANDARD TABLE OF string WITH EMPTY KEY.
|
||||
|
||||
DATA lt_lift_lines TYPE ty_lines.
|
||||
DATA lt_scan_lines TYPE ty_lines.
|
||||
DATA lt_lifts TYPE HASHED TABLE OF ty_lift WITH UNIQUE KEY lift.
|
||||
DATA lt_scans TYPE SORTED TABLE OF ty_scan WITH UNIQUE KEY pass lift.
|
||||
DATA lt_pass_areas TYPE SORTED TABLE OF ty_pass_area WITH UNIQUE KEY pass area.
|
||||
DATA lt_passes TYPE SORTED TABLE OF ty_pass WITH UNIQUE KEY pass.
|
||||
DATA ls_lift TYPE ty_lift.
|
||||
DATA ls_scan TYPE ty_scan.
|
||||
DATA ls_pass_area TYPE ty_pass_area.
|
||||
DATA lv_line TYPE string.
|
||||
DATA lv_key TYPE string.
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_sep TYPE string.
|
||||
|
||||
SPLIT iv_lifts AT cl_abap_char_utilities=>newline INTO TABLE lt_lift_lines.
|
||||
LOOP AT lt_lift_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL AND lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( lift = lv_key area = lv_value ) INTO TABLE lt_lifts.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_lifts ) = 0.
|
||||
RAISE no_lifts.
|
||||
ENDIF.
|
||||
|
||||
SPLIT iv_scans AT cl_abap_char_utilities=>newline INTO TABLE lt_scan_lines.
|
||||
LOOP AT lt_scan_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF NOT line_exists( lt_lifts[ lift = lv_value ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( pass = lv_key lift = lv_value ) INTO TABLE lt_scans.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_scans INTO ls_scan.
|
||||
READ TABLE lt_lifts INTO ls_lift WITH TABLE KEY lift = ls_scan-lift.
|
||||
INSERT VALUE #( pass = ls_scan-pass ) INTO TABLE lt_passes.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_pass>) WITH TABLE KEY pass = ls_scan-pass.
|
||||
<ls_pass>-rides = <ls_pass>-rides + 1.
|
||||
INSERT VALUE #( pass = ls_scan-pass area = ls_lift-area ) INTO TABLE lt_pass_areas.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_pass_areas INTO ls_pass_area.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_area_pass>) WITH TABLE KEY pass = ls_pass_area-pass.
|
||||
<ls_area_pass>-areas = <ls_area_pass>-areas + 1.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_passes ASSIGNING FIELD-SYMBOL(<ls_out>).
|
||||
ev_report = ev_report && lv_sep && |{ <ls_out>-pass };{ <ls_out>-rides };{ <ls_out>-areas }|.
|
||||
lv_sep = cl_abap_char_utilities=>newline.
|
||||
ENDLOOP.
|
||||
|
||||
ev_rides = lines( lt_scans ).
|
||||
ev_passes = lines( lt_passes ).
|
||||
|
||||
ENDFUNCTION.
|
||||
91
tasks_gen/eval/G0123/faulty/m2_lift_stats.func.abap
Normal file
91
tasks_gen/eval/G0123/faulty/m2_lift_stats.func.abap
Normal file
@@ -0,0 +1,91 @@
|
||||
FUNCTION {{p}}lift_stats
|
||||
IMPORTING
|
||||
iv_scans TYPE string
|
||||
iv_lifts TYPE string
|
||||
EXPORTING
|
||||
ev_rides TYPE i
|
||||
ev_passes TYPE i
|
||||
ev_report TYPE string
|
||||
EXCEPTIONS
|
||||
no_lifts.
|
||||
|
||||
TYPES: BEGIN OF ty_lift,
|
||||
lift TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_lift,
|
||||
BEGIN OF ty_scan,
|
||||
pass TYPE string,
|
||||
lift TYPE string,
|
||||
END OF ty_scan,
|
||||
BEGIN OF ty_pass_area,
|
||||
pass TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_pass_area,
|
||||
BEGIN OF ty_pass,
|
||||
pass TYPE string,
|
||||
rides TYPE i,
|
||||
areas TYPE i,
|
||||
END OF ty_pass,
|
||||
ty_lines TYPE STANDARD TABLE OF string WITH EMPTY KEY.
|
||||
|
||||
DATA lt_lift_lines TYPE ty_lines.
|
||||
DATA lt_scan_lines TYPE ty_lines.
|
||||
DATA lt_lifts TYPE HASHED TABLE OF ty_lift WITH UNIQUE KEY lift.
|
||||
DATA lt_scans TYPE SORTED TABLE OF ty_scan WITH UNIQUE KEY pass lift.
|
||||
DATA lt_pass_areas TYPE SORTED TABLE OF ty_pass_area WITH UNIQUE KEY pass area.
|
||||
DATA lt_passes TYPE SORTED TABLE OF ty_pass WITH UNIQUE KEY pass.
|
||||
DATA ls_lift TYPE ty_lift.
|
||||
DATA ls_scan TYPE ty_scan.
|
||||
DATA ls_pass_area TYPE ty_pass_area.
|
||||
DATA lv_line TYPE string.
|
||||
DATA lv_key TYPE string.
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_sep TYPE string.
|
||||
|
||||
SPLIT iv_lifts AT cl_abap_char_utilities=>newline INTO TABLE lt_lift_lines.
|
||||
LOOP AT lt_lift_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( lift = lv_key area = lv_value ) INTO TABLE lt_lifts.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_lifts ) = 0.
|
||||
RAISE no_lifts.
|
||||
ENDIF.
|
||||
|
||||
SPLIT iv_scans AT cl_abap_char_utilities=>newline INTO TABLE lt_scan_lines.
|
||||
LOOP AT lt_scan_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL AND lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF NOT line_exists( lt_lifts[ lift = lv_value ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( pass = lv_key lift = lv_value ) INTO TABLE lt_scans.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_scans INTO ls_scan.
|
||||
READ TABLE lt_lifts INTO ls_lift WITH TABLE KEY lift = ls_scan-lift.
|
||||
INSERT VALUE #( pass = ls_scan-pass ) INTO TABLE lt_passes.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_pass>) WITH TABLE KEY pass = ls_scan-pass.
|
||||
<ls_pass>-rides = <ls_pass>-rides + 1.
|
||||
INSERT VALUE #( pass = ls_scan-pass area = ls_lift-area ) INTO TABLE lt_pass_areas.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_pass_areas INTO ls_pass_area.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_area_pass>) WITH TABLE KEY pass = ls_pass_area-pass.
|
||||
<ls_area_pass>-areas = <ls_area_pass>-areas + 1.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_passes ASSIGNING FIELD-SYMBOL(<ls_out>).
|
||||
ev_report = ev_report && lv_sep && |{ <ls_out>-pass };{ <ls_out>-rides };{ <ls_out>-areas }|.
|
||||
lv_sep = cl_abap_char_utilities=>newline.
|
||||
ENDLOOP.
|
||||
|
||||
ev_rides = lines( lt_scans ).
|
||||
ev_passes = lines( lt_passes ).
|
||||
|
||||
ENDFUNCTION.
|
||||
91
tasks_gen/eval/G0123/faulty/m4_lift_stats.func.abap
Normal file
91
tasks_gen/eval/G0123/faulty/m4_lift_stats.func.abap
Normal file
@@ -0,0 +1,91 @@
|
||||
FUNCTION {{p}}lift_stats
|
||||
IMPORTING
|
||||
iv_scans TYPE string
|
||||
iv_lifts TYPE string
|
||||
EXPORTING
|
||||
ev_rides TYPE i
|
||||
ev_passes TYPE i
|
||||
ev_report TYPE string
|
||||
EXCEPTIONS
|
||||
no_lifts.
|
||||
|
||||
TYPES: BEGIN OF ty_lift,
|
||||
lift TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_lift,
|
||||
BEGIN OF ty_scan,
|
||||
pass TYPE string,
|
||||
lift TYPE string,
|
||||
END OF ty_scan,
|
||||
BEGIN OF ty_pass_area,
|
||||
pass TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_pass_area,
|
||||
BEGIN OF ty_pass,
|
||||
pass TYPE string,
|
||||
rides TYPE i,
|
||||
areas TYPE i,
|
||||
END OF ty_pass,
|
||||
ty_lines TYPE STANDARD TABLE OF string WITH EMPTY KEY.
|
||||
|
||||
DATA lt_lift_lines TYPE ty_lines.
|
||||
DATA lt_scan_lines TYPE ty_lines.
|
||||
DATA lt_lifts TYPE HASHED TABLE OF ty_lift WITH UNIQUE KEY lift.
|
||||
DATA lt_scans TYPE SORTED TABLE OF ty_scan WITH UNIQUE KEY pass lift.
|
||||
DATA lt_pass_areas TYPE SORTED TABLE OF ty_pass_area WITH UNIQUE KEY pass area.
|
||||
DATA lt_passes TYPE SORTED TABLE OF ty_pass WITH UNIQUE KEY pass.
|
||||
DATA ls_lift TYPE ty_lift.
|
||||
DATA ls_scan TYPE ty_scan.
|
||||
DATA ls_pass_area TYPE ty_pass_area.
|
||||
DATA lv_line TYPE string.
|
||||
DATA lv_key TYPE string.
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_sep TYPE string.
|
||||
|
||||
SPLIT iv_lifts AT cl_abap_char_utilities=>newline INTO TABLE lt_lift_lines.
|
||||
LOOP AT lt_lift_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( lift = lv_key area = lv_value ) INTO TABLE lt_lifts.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_lifts ) = 0.
|
||||
RAISE no_lifts.
|
||||
ENDIF.
|
||||
|
||||
SPLIT iv_scans AT cl_abap_char_utilities=>newline INTO TABLE lt_scan_lines.
|
||||
LOOP AT lt_scan_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF NOT line_exists( lt_lifts[ lift = lv_value ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( pass = lv_key lift = lv_value ) INTO TABLE lt_scans.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_scans INTO ls_scan.
|
||||
READ TABLE lt_lifts INTO ls_lift WITH TABLE KEY lift = ls_scan-lift.
|
||||
INSERT VALUE #( pass = ls_scan-pass ) INTO TABLE lt_passes.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_pass>) WITH TABLE KEY pass = ls_scan-pass.
|
||||
<ls_pass>-rides = <ls_pass>-rides - 1.
|
||||
INSERT VALUE #( pass = ls_scan-pass area = ls_lift-area ) INTO TABLE lt_pass_areas.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_pass_areas INTO ls_pass_area.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_area_pass>) WITH TABLE KEY pass = ls_pass_area-pass.
|
||||
<ls_area_pass>-areas = <ls_area_pass>-areas + 1.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_passes ASSIGNING FIELD-SYMBOL(<ls_out>).
|
||||
ev_report = ev_report && lv_sep && |{ <ls_out>-pass };{ <ls_out>-rides };{ <ls_out>-areas }|.
|
||||
lv_sep = cl_abap_char_utilities=>newline.
|
||||
ENDLOOP.
|
||||
|
||||
ev_rides = lines( lt_scans ).
|
||||
ev_passes = lines( lt_passes ).
|
||||
|
||||
ENDFUNCTION.
|
||||
29
tasks_gen/eval/G0123/generation.json
Normal file
29
tasks_gen/eval/G0123/generation.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"id": "G0123",
|
||||
"pool": "eval",
|
||||
"object_type": "FUNC",
|
||||
"category": "C",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 4,
|
||||
"killed": 2,
|
||||
"ok": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 4,
|
||||
"killed": 4,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
125
tasks_gen/eval/G0123/hidden/t21_hidden.clas.abap
Normal file
125
tasks_gen/eval/G0123/hidden/t21_hidden.clas.abap
Normal file
@@ -0,0 +1,125 @@
|
||||
CLASS {{p}}t21_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS call IMPORTING iv_scans TYPE string iv_lifts TYPE string
|
||||
EXPORTING ev_rides TYPE i ev_passes TYPE i ev_report TYPE string
|
||||
ev_subrc TYPE sysubrc.
|
||||
METHODS empty_scans FOR TESTING.
|
||||
METHODS one_scan FOR TESTING.
|
||||
METHODS duplicate_scan FOR TESTING.
|
||||
METHODS unknown_lift FOR TESTING.
|
||||
METHODS invalid_lines FOR TESTING.
|
||||
METHODS sorted_report FOR TESTING.
|
||||
METHODS distinct_areas FOR TESTING.
|
||||
METHODS duplicate_lift FOR TESTING.
|
||||
METHODS two_passes FOR TESTING.
|
||||
METHODS missing_lift_list FOR TESTING.
|
||||
METHODS bad_lift_line FOR TESTING.
|
||||
METHODS empty_lift_name FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t21_hidden IMPLEMENTATION.
|
||||
METHOD call.
|
||||
CALL FUNCTION '{{P}}LIFT_STATS'
|
||||
EXPORTING
|
||||
iv_scans = iv_scans
|
||||
iv_lifts = iv_lifts
|
||||
IMPORTING
|
||||
ev_rides = ev_rides
|
||||
ev_passes = ev_passes
|
||||
ev_report = ev_report
|
||||
EXCEPTIONS
|
||||
no_lifts = 1
|
||||
OTHERS = 2.
|
||||
ev_subrc = sy-subrc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_scans.
|
||||
call( EXPORTING iv_scans = `` iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD one_scan.
|
||||
call( EXPORTING iv_scans = `P1;L1` iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;1;1` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD duplicate_scan.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1;L1| iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;1;1` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_lift.
|
||||
call( EXPORTING iv_scans = `P1;L9` iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_lines.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1L1\n;L1\nP1;\nP1;L1;X\nP2;L1| iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = |P1;1;1\nP2;1;1| act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_report.
|
||||
call( EXPORTING iv_scans = |P3;L1\nP1;L1\nP2;L1| iv_lifts = `L1;North`
|
||||
IMPORTING ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = |P1;1;1\nP2;1;1\nP3;1;1| act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD distinct_areas.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1;L2\nP1;L3| iv_lifts = |L1;North\nL2;North\nL3;South|
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;3;2` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD duplicate_lift.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1;L2| iv_lifts = |L1;North\nL2;North\nL1;South|
|
||||
IMPORTING ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;2;1` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD two_passes.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1;L2\nP2;L2| iv_lifts = |L1;North\nL2;South|
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = |P1;2;2\nP2;1;1| act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD missing_lift_list.
|
||||
call( EXPORTING iv_scans = `P1;L1` iv_lifts = ``
|
||||
IMPORTING ev_subrc = DATA(lv_subrc) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV sysubrc( 1 ) act = lv_subrc ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_lift_line.
|
||||
call( EXPORTING iv_scans = |P1;L1\nP1;L2| iv_lifts = |L1\nL2;South|
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_passes = DATA(lv_passes) ev_report = DATA(lv_report) ev_subrc = DATA(lv_subrc) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV sysubrc( 0 ) act = lv_subrc ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_passes ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;1;1` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_lift_name.
|
||||
call( EXPORTING iv_scans = `P1;L1` iv_lifts = `;North`
|
||||
IMPORTING ev_subrc = DATA(lv_subrc) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV sysubrc( 1 ) act = lv_subrc ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
60
tasks_gen/eval/G0123/mutation.json
Normal file
60
tasks_gen/eval/G0123/mutation.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"task": "G0123",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}LIFT_STATS",
|
||||
"mutant": "line 48: OR -> AND (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "10/12",
|
||||
"failed_tests": [
|
||||
"BAD_LIFT_LINE",
|
||||
"EMPTY_LIFT_NAME"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LIFT_STATS",
|
||||
"mutant": "line 48: OR -> AND (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "11/12",
|
||||
"failed_tests": [
|
||||
"BAD_LIFT_LINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LIFT_STATS",
|
||||
"mutant": "line 61: OR -> AND (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "11/12",
|
||||
"failed_tests": [
|
||||
"INVALID_LINES"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LIFT_STATS",
|
||||
"mutant": "line 64: = -> <> (eq)",
|
||||
"status": "invalid",
|
||||
"hidden": "0/0",
|
||||
"failed_tests": []
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LIFT_STATS",
|
||||
"mutant": "line 74: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "4/12",
|
||||
"failed_tests": [
|
||||
"BAD_LIFT_LINE",
|
||||
"DISTINCT_AREAS",
|
||||
"DUPLICATE_LIFT",
|
||||
"DUPLICATE_SCAN",
|
||||
"INVALID_LINES",
|
||||
"ONE_SCAN",
|
||||
"SORTED_REPORT",
|
||||
"TWO_PASSES"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 4,
|
||||
"killed": 4,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
91
tasks_gen/eval/G0123/reference/lift_stats.func.abap
Normal file
91
tasks_gen/eval/G0123/reference/lift_stats.func.abap
Normal file
@@ -0,0 +1,91 @@
|
||||
FUNCTION {{p}}lift_stats
|
||||
IMPORTING
|
||||
iv_scans TYPE string
|
||||
iv_lifts TYPE string
|
||||
EXPORTING
|
||||
ev_rides TYPE i
|
||||
ev_passes TYPE i
|
||||
ev_report TYPE string
|
||||
EXCEPTIONS
|
||||
no_lifts.
|
||||
|
||||
TYPES: BEGIN OF ty_lift,
|
||||
lift TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_lift,
|
||||
BEGIN OF ty_scan,
|
||||
pass TYPE string,
|
||||
lift TYPE string,
|
||||
END OF ty_scan,
|
||||
BEGIN OF ty_pass_area,
|
||||
pass TYPE string,
|
||||
area TYPE string,
|
||||
END OF ty_pass_area,
|
||||
BEGIN OF ty_pass,
|
||||
pass TYPE string,
|
||||
rides TYPE i,
|
||||
areas TYPE i,
|
||||
END OF ty_pass,
|
||||
ty_lines TYPE STANDARD TABLE OF string WITH EMPTY KEY.
|
||||
|
||||
DATA lt_lift_lines TYPE ty_lines.
|
||||
DATA lt_scan_lines TYPE ty_lines.
|
||||
DATA lt_lifts TYPE HASHED TABLE OF ty_lift WITH UNIQUE KEY lift.
|
||||
DATA lt_scans TYPE SORTED TABLE OF ty_scan WITH UNIQUE KEY pass lift.
|
||||
DATA lt_pass_areas TYPE SORTED TABLE OF ty_pass_area WITH UNIQUE KEY pass area.
|
||||
DATA lt_passes TYPE SORTED TABLE OF ty_pass WITH UNIQUE KEY pass.
|
||||
DATA ls_lift TYPE ty_lift.
|
||||
DATA ls_scan TYPE ty_scan.
|
||||
DATA ls_pass_area TYPE ty_pass_area.
|
||||
DATA lv_line TYPE string.
|
||||
DATA lv_key TYPE string.
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_sep TYPE string.
|
||||
|
||||
SPLIT iv_lifts AT cl_abap_char_utilities=>newline INTO TABLE lt_lift_lines.
|
||||
LOOP AT lt_lift_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( lift = lv_key area = lv_value ) INTO TABLE lt_lifts.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_lifts ) = 0.
|
||||
RAISE no_lifts.
|
||||
ENDIF.
|
||||
|
||||
SPLIT iv_scans AT cl_abap_char_utilities=>newline INTO TABLE lt_scan_lines.
|
||||
LOOP AT lt_scan_lines INTO lv_line.
|
||||
SPLIT lv_line AT ';' INTO lv_key lv_value.
|
||||
IF lv_key IS INITIAL OR lv_value IS INITIAL OR lv_value CA ';'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF NOT line_exists( lt_lifts[ lift = lv_value ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT VALUE #( pass = lv_key lift = lv_value ) INTO TABLE lt_scans.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_scans INTO ls_scan.
|
||||
READ TABLE lt_lifts INTO ls_lift WITH TABLE KEY lift = ls_scan-lift.
|
||||
INSERT VALUE #( pass = ls_scan-pass ) INTO TABLE lt_passes.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_pass>) WITH TABLE KEY pass = ls_scan-pass.
|
||||
<ls_pass>-rides = <ls_pass>-rides + 1.
|
||||
INSERT VALUE #( pass = ls_scan-pass area = ls_lift-area ) INTO TABLE lt_pass_areas.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_pass_areas INTO ls_pass_area.
|
||||
READ TABLE lt_passes ASSIGNING FIELD-SYMBOL(<ls_area_pass>) WITH TABLE KEY pass = ls_pass_area-pass.
|
||||
<ls_area_pass>-areas = <ls_area_pass>-areas + 1.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_passes ASSIGNING FIELD-SYMBOL(<ls_out>).
|
||||
ev_report = ev_report && lv_sep && |{ <ls_out>-pass };{ <ls_out>-rides };{ <ls_out>-areas }|.
|
||||
lv_sep = cl_abap_char_utilities=>newline.
|
||||
ENDLOOP.
|
||||
|
||||
ev_rides = lines( lt_scans ).
|
||||
ev_passes = lines( lt_passes ).
|
||||
|
||||
ENDFUNCTION.
|
||||
53
tasks_gen/eval/G0123/reference/t21_test.clas.abap
Normal file
53
tasks_gen/eval/G0123/reference/t21_test.clas.abap
Normal file
@@ -0,0 +1,53 @@
|
||||
CLASS {{p}}t21_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS stats IMPORTING iv_scans TYPE string iv_lifts TYPE string
|
||||
EXPORTING ev_rides TYPE i ev_passes TYPE i ev_report TYPE string.
|
||||
METHODS one_pass FOR TESTING.
|
||||
METHODS duplicates FOR TESTING.
|
||||
METHODS unknown_lift FOR TESTING.
|
||||
METHODS sorted_report FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t21_test IMPLEMENTATION.
|
||||
METHOD stats.
|
||||
CALL FUNCTION '{{P}}LIFT_STATS'
|
||||
EXPORTING
|
||||
iv_scans = iv_scans
|
||||
iv_lifts = iv_lifts
|
||||
IMPORTING
|
||||
ev_rides = ev_rides
|
||||
ev_passes = ev_passes
|
||||
ev_report = ev_report
|
||||
EXCEPTIONS
|
||||
no_lifts = 1
|
||||
OTHERS = 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD one_pass.
|
||||
stats( EXPORTING iv_scans = `P1;L1` iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `P1;1;1` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD duplicates.
|
||||
stats( EXPORTING iv_scans = |P1;L1\nP1;L1| iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rides ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_lift.
|
||||
stats( EXPORTING iv_scans = `P1;L9` iv_lifts = `L1;North`
|
||||
IMPORTING ev_rides = DATA(lv_rides) ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rides ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `` act = lv_report ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_report.
|
||||
stats( EXPORTING iv_scans = |P2;L1\nP1;L1| iv_lifts = `L1;North`
|
||||
IMPORTING ev_report = DATA(lv_report) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = |P1;1;1\nP2;1;1| act = lv_report ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
55
tasks_gen/eval/G0123/spec.md
Normal file
55
tasks_gen/eval/G0123/spec.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 1. Goal
|
||||
Summarise the lift pass scans of one day at a ski resort. The operations team
|
||||
needs one function module. The function module reads the scans and the lift
|
||||
list. It returns the statistics and a report.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- Function group {{P}}FG_LIFT exists in package $TMP.
|
||||
- The turnstile system sends the scans of the day as a text. Each line of this
|
||||
text has the format `pass;lift`.
|
||||
- The resort keeps a list of its lifts. Each line of this list has the format
|
||||
`lift;area`.
|
||||
- The lines of both texts are separated by the newline character
|
||||
(cl_abap_char_utilities=>newline).
|
||||
|
||||
# 4. Contract
|
||||
- Create the function module {{P}}LIFT_STATS in function group {{P}}FG_LIFT.
|
||||
- Interface:
|
||||
- Importing: iv_scans TYPE string, iv_lifts TYPE string
|
||||
- Exporting: ev_rides TYPE i, ev_passes TYPE i, ev_report TYPE string
|
||||
- Exceptions: no_lifts
|
||||
|
||||
# 5. Business rules
|
||||
1. A line of a text is valid if it contains exactly one `;` and the text
|
||||
before and the text after this `;` are both not empty. Ignore every other
|
||||
line.
|
||||
2. If iv_lifts contains no valid line, raise the exception no_lifts. Do not
|
||||
change the exporting parameters in this case.
|
||||
3. The lift list gives the area of a lift. If a lift occurs more than once,
|
||||
the first line wins.
|
||||
4. Ignore a scan if its lift is not in the lift list.
|
||||
5. Count a scan once for a pass and a lift. If the same pass and the same lift
|
||||
occur more than once, they count once.
|
||||
6. For each pass, count its rides and its areas. The rides are the number of
|
||||
the distinct lifts of the pass. The areas are the number of the distinct
|
||||
areas of these lifts.
|
||||
7. ev_rides is the total number of counted scans. ev_passes is the number of
|
||||
passes.
|
||||
8. ev_report has one line for each pass. Sort the lines by pass in ascending
|
||||
order. A line has the format `pass;rides;areas`. Separate the lines by the
|
||||
newline character. Do not put a newline character after the last line. If
|
||||
there is no pass, ev_report is empty.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 8.16.
|
||||
- Package: $TMP. Do not use transports.
|
||||
- Coding standard: Clean ABAP. Keep every procedure below 40 statements.
|
||||
- Out of scope: none.
|
||||
|
||||
# 7. Acceptance
|
||||
- The function module is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write ABAP Unit tests for the function module in a global test class.
|
||||
76
tasks_gen/eval/G0123/task.json
Normal file
76
tasks_gen/eval/G0123/task.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"id": "G0123",
|
||||
"category": "C",
|
||||
"object_type": "FUNC",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "FUGR",
|
||||
"name": "{{P}}FG_LIFT",
|
||||
"description": "Function group for the lift statistics"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}LIFT_STATS",
|
||||
"functionGroup": "{{P}}FG_LIFT",
|
||||
"params": [
|
||||
{
|
||||
"name": "iv_scans",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "iv_lifts",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "ev_rides",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "ev_passes",
|
||||
"type": "i"
|
||||
},
|
||||
{
|
||||
"name": "ev_report",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"out_of_scope": [],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T21_HIDDEN",
|
||||
"file": "hidden/t21_hidden.clas.abap",
|
||||
"description": "T21 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "FUNC",
|
||||
"name": "{{P}}LIFT_STATS",
|
||||
"functionGroup": "{{P}}FG_LIFT",
|
||||
"file": "reference/lift_stats.func.abap",
|
||||
"description": "Lift statistics"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T21_TEST",
|
||||
"file": "reference/t21_test.clas.abap",
|
||||
"description": "T21 own tests"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"no_nested_loops"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user