Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
139
tasks_gen/train/G1138/faulty/m0_line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/faulty/m0_line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date <> iv_date
|
||||
AND shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles + ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops + 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
139
tasks_gen/train/G1138/faulty/m1_line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/faulty/m1_line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date = iv_date
|
||||
OR shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles + ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops + 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
139
tasks_gen/train/G1138/faulty/m2_line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/faulty/m2_line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date = iv_date
|
||||
AND shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min <= 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles + ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops + 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
139
tasks_gen/train/G1138/faulty/m3_line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/faulty/m3_line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date = iv_date
|
||||
AND shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles - ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops + 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
139
tasks_gen/train/G1138/faulty/m4_line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/faulty/m4_line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date = iv_date
|
||||
AND shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles + ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops - 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
24
tasks_gen/train/G1138/generation.json
Normal file
24
tasks_gen/train/G1138/generation.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": "G1138",
|
||||
"pool": "train",
|
||||
"object_type": "PROG",
|
||||
"category": "G",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 71.7,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
94
tasks_gen/train/G1138/hidden/line_out_hid.clas.abap
Normal file
94
tasks_gen/train/G1138/hidden/line_out_hid.clas.abap
Normal file
@@ -0,0 +1,94 @@
|
||||
CLASS {{p}}line_out_hid DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
METHODS run
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift OPTIONAL
|
||||
RETURNING VALUE(rr_data) TYPE REF TO data.
|
||||
METHODS value_of
|
||||
IMPORTING ir_data TYPE REF TO data
|
||||
iv_row TYPE i
|
||||
iv_col TYPE string
|
||||
RETURNING VALUE(rv_value) TYPE string.
|
||||
METHODS lines_of
|
||||
IMPORTING ir_data TYPE REF TO data
|
||||
RETURNING VALUE(rv_lines) TYPE i.
|
||||
METHODS all_lines FOR TESTING.
|
||||
METHODS sort_order FOR TESTING.
|
||||
METHODS bottles_sum FOR TESTING.
|
||||
METHODS stops_count FOR TESTING.
|
||||
METHODS date_filter FOR TESTING.
|
||||
METHODS shift_filter FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}line_out_hid IMPLEMENTATION.
|
||||
METHOD run.
|
||||
cl_salv_bs_runtime_info=>set( display = abap_false metadata = abap_false data = abap_true ).
|
||||
SUBMIT {{p}}line_output WITH p_date = iv_date WITH s_shift IN it_shift AND RETURN.
|
||||
TRY.
|
||||
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = rr_data ).
|
||||
CATCH cx_salv_bs_sc_runtime_info.
|
||||
ENDTRY.
|
||||
cl_salv_bs_runtime_info=>clear_all( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lines_of.
|
||||
FIELD-SYMBOLS <lt_data> TYPE STANDARD TABLE.
|
||||
IF ir_data IS BOUND.
|
||||
ASSIGN ir_data->* TO <lt_data>.
|
||||
rv_lines = lines( <lt_data> ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD value_of.
|
||||
FIELD-SYMBOLS <lt_data> TYPE STANDARD TABLE.
|
||||
ASSIGN ir_data->* TO <lt_data>.
|
||||
ASSIGN <lt_data>[ iv_row ] TO FIELD-SYMBOL(<ls_line>).
|
||||
ASSIGN COMPONENT iv_col OF STRUCTURE <ls_line> TO FIELD-SYMBOL(<lv_value>).
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 msg = |Column { iv_col } missing| ).
|
||||
rv_value = condense( CONV string( <lv_value> ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD all_lines.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = lines_of( run( '20260401' ) ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sort_order.
|
||||
DATA(lr_data) = run( '20260401' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L4` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `LINE_NO` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L1` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `LINE_NO` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L2` act = value_of( ir_data = lr_data iv_row = 3 iv_col = `LINE_NO` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L3` act = value_of( ir_data = lr_data iv_row = 4 iv_col = `LINE_NO` ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bottles_sum.
|
||||
DATA(lr_data) = run( '20260401' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `1600` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `BOTTLES` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `1500` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `BOTTLES` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `300` act = value_of( ir_data = lr_data iv_row = 4 iv_col = `BOTTLES` ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stops_count.
|
||||
DATA(lr_data) = run( '20260401' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `1` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `STOPS` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `1` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `STOPS` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `0` act = value_of( ir_data = lr_data iv_row = 4 iv_col = `STOPS` ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD date_filter.
|
||||
DATA(lr_data) = run( '20260402' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines_of( lr_data ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L1` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `LINE_NO` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `900` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `BOTTLES` ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shift_filter.
|
||||
DATA(lr_data) = run( iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines_of( lr_data ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L4` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `LINE_NO` ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = `L1` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `LINE_NO` ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
64
tasks_gen/train/G1138/mutation.json
Normal file
64
tasks_gen/train/G1138/mutation.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"task": "G1138",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}LINE_OUTPUT",
|
||||
"mutant": "line 42: = -> <> (eq)",
|
||||
"status": "killed",
|
||||
"hidden": "0/6",
|
||||
"failed_tests": [
|
||||
"ALL_LINES",
|
||||
"BOTTLES_SUM",
|
||||
"DATE_FILTER",
|
||||
"SHIFT_FILTER",
|
||||
"SORT_ORDER",
|
||||
"STOPS_COUNT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LINE_OUTPUT",
|
||||
"mutant": "line 43: AND -> OR (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "2/6",
|
||||
"failed_tests": [
|
||||
"BOTTLES_SUM",
|
||||
"DATE_FILTER",
|
||||
"SHIFT_FILTER",
|
||||
"SORT_ORDER"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LINE_OUTPUT",
|
||||
"mutant": "line 56: > -> <= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "5/6",
|
||||
"failed_tests": [
|
||||
"STOPS_COUNT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LINE_OUTPUT",
|
||||
"mutant": "line 61: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "3/6",
|
||||
"failed_tests": [
|
||||
"BOTTLES_SUM",
|
||||
"SORT_ORDER",
|
||||
"STOPS_COUNT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}LINE_OUTPUT",
|
||||
"mutant": "line 63: + -> - (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "5/6",
|
||||
"failed_tests": [
|
||||
"STOPS_COUNT"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
139
tasks_gen/train/G1138/reference/line_output.prog.abap
Normal file
139
tasks_gen/train/G1138/reference/line_output.prog.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
REPORT {{p}}line_output.
|
||||
|
||||
TYPES: BEGIN OF ty_record,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
shift_no TYPE {{p}}bottle-shift_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stop_min TYPE {{p}}bottle-stop_min,
|
||||
END OF ty_record,
|
||||
tt_record TYPE STANDARD TABLE OF ty_record WITH DEFAULT KEY.
|
||||
|
||||
TYPES tt_shift TYPE RANGE OF {{p}}bottle-shift_no.
|
||||
|
||||
DATA gv_shift TYPE {{p}}bottle-shift_no.
|
||||
|
||||
PARAMETERS p_date TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_shift FOR gv_shift.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_line,
|
||||
line_no TYPE {{p}}bottle-line_no,
|
||||
bottles TYPE {{p}}bottle-bottles,
|
||||
stops TYPE i,
|
||||
END OF ty_line,
|
||||
tt_line TYPE STANDARD TABLE OF ty_line WITH DEFAULT KEY.
|
||||
METHODS read_records
|
||||
IMPORTING iv_date TYPE d
|
||||
it_shift TYPE tt_shift
|
||||
RETURNING VALUE(rt_records) TYPE tt_record.
|
||||
METHODS build_lines
|
||||
IMPORTING it_records TYPE tt_record
|
||||
RETURNING VALUE(rt_lines) TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD read_records.
|
||||
SELECT line_no shift_no bottles stop_min
|
||||
FROM {{p}}bottle
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_records
|
||||
WHERE prod_date = iv_date
|
||||
AND shift_no IN it_shift.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_lines.
|
||||
DATA ls_record TYPE ty_record.
|
||||
DATA ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_records INTO ls_record.
|
||||
READ TABLE rt_lines INTO ls_line WITH KEY line_no = ls_record-line_no.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_line.
|
||||
ls_line-line_no = ls_record-line_no.
|
||||
ls_line-bottles = ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = 1.
|
||||
ENDIF.
|
||||
APPEND ls_line TO rt_lines.
|
||||
ELSE.
|
||||
ls_line-bottles = ls_line-bottles + ls_record-bottles.
|
||||
IF ls_record-stop_min > 0.
|
||||
ls_line-stops = ls_line-stops + 1.
|
||||
ENDIF.
|
||||
MODIFY rt_lines FROM ls_line INDEX sy-tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_lines BY bottles DESCENDING line_no ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = DATA(lo_alv)
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO DATA(lx_error).
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA(go_report) = NEW lcl_report( ).
|
||||
DATA(gt_records) = go_report->read_records( iv_date = p_date it_shift = s_shift[] ).
|
||||
DATA(gt_lines) = go_report->build_lines( gt_records ).
|
||||
go_report->display( CHANGING ct_lines = gt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_env TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS sums_bottles FOR TESTING.
|
||||
METHODS counts_stops FOR TESTING.
|
||||
METHODS filters_shift FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
go_env = cl_osql_test_environment=>create( i_dependency_list = VALUE #( ( '{{P}}BOTTLE' ) ) ).
|
||||
DATA lt_bottle TYPE STANDARD TABLE OF {{p}}bottle WITH DEFAULT KEY.
|
||||
lt_bottle = VALUE #(
|
||||
( rec_id = 1 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'A' prod_date = '20260401' shift_no = '1' bottles = 50 stop_min = 10 )
|
||||
( rec_id = 3 line_no = 'B' prod_date = '20260401' shift_no = '2' bottles = 200 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'C' prod_date = '20260402' shift_no = '1' bottles = 300 stop_min = 0 ) ).
|
||||
go_env->insert_test_data( lt_bottle ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
go_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_bottles.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 200 act = lt_lines[ 1 ]-bottles ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 150 act = lt_lines[ 2 ]-bottles ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_stops.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records( iv_date = '20260401' it_shift = VALUE #( ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_lines[ 1 ]-stops ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_lines[ 2 ]-stops ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filters_shift.
|
||||
DATA(lt_records) = NEW lcl_report( )->read_records(
|
||||
iv_date = '20260401'
|
||||
it_shift = VALUE #( ( sign = 'I' option = 'EQ' low = '1' ) ) ).
|
||||
DATA(lt_lines) = NEW lcl_report( )->build_lines( lt_records ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_lines[ 1 ]-line_no ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
14
tasks_gen/train/G1138/seed/bottle.tabl.asabap
Normal file
14
tasks_gen/train/G1138/seed/bottle.tabl.asabap
Normal file
@@ -0,0 +1,14 @@
|
||||
@EndUserText.label : 'Bottle filling records'
|
||||
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
|
||||
@AbapCatalog.tableCategory : #TRANSPARENT
|
||||
@AbapCatalog.deliveryClass : #A
|
||||
@AbapCatalog.dataMaintenance : #RESTRICTED
|
||||
define table {{p}}bottle {
|
||||
key client : abap.clnt not null;
|
||||
key rec_id : abap.int4 not null;
|
||||
line_no : abap.char(4);
|
||||
prod_date : abap.dats;
|
||||
shift_no : abap.char(1);
|
||||
bottles : abap.int4;
|
||||
stop_min : abap.int4;
|
||||
}
|
||||
20
tasks_gen/train/G1138/seed/seed_bottle.clas.abap
Normal file
20
tasks_gen/train/G1138/seed/seed_bottle.clas.abap
Normal file
@@ -0,0 +1,20 @@
|
||||
CLASS {{p}}seed_bottle DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES if_oo_adt_classrun.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS {{p}}seed_bottle IMPLEMENTATION.
|
||||
METHOD if_oo_adt_classrun~main.
|
||||
DELETE FROM {{p}}bottle.
|
||||
INSERT {{p}}bottle FROM TABLE @( VALUE #(
|
||||
( rec_id = 1 line_no = 'L1' prod_date = '20260401' shift_no = '1' bottles = 1000 stop_min = 0 )
|
||||
( rec_id = 2 line_no = 'L1' prod_date = '20260401' shift_no = '1' bottles = 500 stop_min = 15 )
|
||||
( rec_id = 3 line_no = 'L2' prod_date = '20260401' shift_no = '2' bottles = 800 stop_min = 0 )
|
||||
( rec_id = 4 line_no = 'L2' prod_date = '20260401' shift_no = '2' bottles = 700 stop_min = 5 )
|
||||
( rec_id = 5 line_no = 'L3' prod_date = '20260401' shift_no = '3' bottles = 300 stop_min = 0 )
|
||||
( rec_id = 6 line_no = 'L1' prod_date = '20260402' shift_no = '1' bottles = 900 stop_min = 0 )
|
||||
( rec_id = 7 line_no = 'L4' prod_date = '20260401' shift_no = '1' bottles = 1500 stop_min = 0 )
|
||||
( rec_id = 8 line_no = 'L4' prod_date = '20260401' shift_no = '1' bottles = 100 stop_min = 30 ) ) ).
|
||||
out->write( sy-dbcnt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
47
tasks_gen/train/G1138/spec.md
Normal file
47
tasks_gen/train/G1138/spec.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# 1. Goal
|
||||
A beverage bottling plant fills bottles on several filling lines. Show the output of
|
||||
each filling line for one production day in an ALV list. The shift supervisor uses
|
||||
the list to compare the filling lines.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- Table {{P}}BOTTLE exists in package $TMP. It contains data.
|
||||
Fields:
|
||||
- REC_ID (INT4, key): the number of the record.
|
||||
- LINE_NO (CHAR 4): the number of the filling line.
|
||||
- PROD_DATE (DATS): the production day.
|
||||
- SHIFT_NO (CHAR 1): the shift.
|
||||
- BOTTLES (INT4): the number of bottles that the line filled in this record.
|
||||
- STOP_MIN (INT4): the minutes that the line stopped in this record.
|
||||
|
||||
# 4. Contract
|
||||
- Create the executable program {{P}}LINE_OUTPUT in package $TMP.
|
||||
- Selection screen:
|
||||
- Parameter P_DATE, type DATS, mandatory: the production day to show.
|
||||
- Select-option S_SHIFT for the shift number.
|
||||
- Show the result with CL_SALV_TABLE. The output table has these columns with these
|
||||
names:
|
||||
- LINE_NO: the number of the filling line.
|
||||
- BOTTLES: the total number of bottles that the line filled.
|
||||
- STOPS: the number of records of the line that have a stop.
|
||||
|
||||
# 5. Business rules
|
||||
1. Include a record only if PROD_DATE is equal to P_DATE and SHIFT_NO is in S_SHIFT.
|
||||
2. Show one line for each filling line that has at least one included record.
|
||||
3. BOTTLES is the sum of the BOTTLES values of the included records of the line.
|
||||
4. STOPS is the number of included records of the line where STOP_MIN is greater
|
||||
than zero.
|
||||
5. Sort the lines by BOTTLES, the highest number first. If two lines have the same
|
||||
BOTTLES value, sort them by LINE_NO in ascending order.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 7.40 SP05. Use only syntax that this release supports.
|
||||
- Coding standards: Clean ABAP. Read the records with one database access.
|
||||
- Out of scope: do not change {{P}}BOTTLE.
|
||||
|
||||
# 7. Acceptance
|
||||
- The program is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write ABAP Unit tests as local test classes in the program.
|
||||
60
tasks_gen/train/G1138/task.json
Normal file
60
tasks_gen/train/G1138/task.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"id": "G1138",
|
||||
"category": "G",
|
||||
"object_type": "PROG",
|
||||
"difficulty": 2,
|
||||
"release_target": "v740sp05",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 60,
|
||||
"max_activations": 15
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "TABL",
|
||||
"name": "{{P}}BOTTLE",
|
||||
"file": "seed/bottle.tabl.asabap",
|
||||
"description": "Bottle filling records of the filling lines"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}SEED_BOTTLE",
|
||||
"file": "seed/seed_bottle.clas.abap",
|
||||
"description": "Seed data for {{P}}BOTTLE",
|
||||
"run": true
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "PROG",
|
||||
"name": "{{P}}LINE_OUTPUT",
|
||||
"parameters": [
|
||||
"p_date",
|
||||
"s_shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}BOTTLE"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}LINE_OUT_HID",
|
||||
"file": "hidden/line_out_hid.clas.abap",
|
||||
"description": "Hidden tests for {{P}}LINE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "PROG",
|
||||
"name": "{{P}}LINE_OUTPUT",
|
||||
"file": "reference/line_output.prog.abap",
|
||||
"description": "Output of each filling line for one production day"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"db_operation_in_loop",
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user