Step F first pass: 81/92 accepted; budget floor 60 calls; rejected slots moved for regeneration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
194
tasks_gen/eval/G0162/faulty/m0_planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/faulty/m0_planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets / ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date >= p_from
|
||||
AND show_id IN s_show
|
||||
AND tickets > 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
194
tasks_gen/eval/G0162/faulty/m1_planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/faulty/m1_planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets * ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date < p_from
|
||||
AND show_id IN s_show
|
||||
AND tickets > 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
194
tasks_gen/eval/G0162/faulty/m2_planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/faulty/m2_planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets * ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date >= p_from
|
||||
OR show_id IN s_show
|
||||
AND tickets > 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
194
tasks_gen/eval/G0162/faulty/m3_planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/faulty/m3_planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets * ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date >= p_from
|
||||
AND show_id IN s_show
|
||||
OR tickets > 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
194
tasks_gen/eval/G0162/faulty/m4_planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/faulty/m4_planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets * ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date >= p_from
|
||||
AND show_id IN s_show
|
||||
AND tickets <= 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
43
tasks_gen/eval/G0162/generation.json
Normal file
43
tasks_gen/eval/G0162/generation.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"id": "G0162",
|
||||
"pool": "eval",
|
||||
"object_type": "PROG",
|
||||
"category": "G",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"seed/visit_seed.clas.abap line 9: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"INSERT\"",
|
||||
"hidden/t60_hidden.clas.abap line 52: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"ASSIGN\"",
|
||||
"hidden/t60_hidden.clas.abap line 53: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"ASSIGN\"",
|
||||
"hidden/t60_hidden.clas.abap line 55: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"rv_value\"",
|
||||
"hidden/t60_hidden.clas.abap line 105: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"DATA\"",
|
||||
"hidden/t60_hidden.clas.abap line 112: syntax error for release v702 (abaplint): Statement does not exist in the configured ABAP version(or a parser error), \"DATA\""
|
||||
],
|
||||
"by_check": {
|
||||
"abaplint": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 0,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 67.5,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
243
tasks_gen/eval/G0162/hidden/t60_hidden.clas.abap
Normal file
243
tasks_gen/eval/G0162/hidden/t60_hidden.clas.abap
Normal file
@@ -0,0 +1,243 @@
|
||||
CLASS {{p}}t60_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_show TYPE RANGE OF {{p}}visit-show_id.
|
||||
METHODS run
|
||||
IMPORTING iv_from TYPE d
|
||||
it_show TYPE tt_show 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 canon
|
||||
IMPORTING iv_text TYPE string
|
||||
RETURNING VALUE(rv_canon) TYPE string.
|
||||
METHODS lines_of
|
||||
IMPORTING ir_data TYPE REF TO data
|
||||
RETURNING VALUE(rv_lines) TYPE i.
|
||||
METHODS all_shows FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS revenue_values FOR TESTING.
|
||||
METHODS ticket_sums FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
METHODS date_filter FOR TESTING.
|
||||
METHODS date_boundary FOR TESTING.
|
||||
METHODS show_filter FOR TESTING.
|
||||
METHODS zero_tickets_excluded FOR TESTING.
|
||||
METHODS no_data FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t60_hidden IMPLEMENTATION.
|
||||
METHOD run.
|
||||
cl_salv_bs_runtime_info=>set( display = abap_false metadata = abap_false data = abap_true ).
|
||||
SUBMIT {{p}}planetarium WITH p_from = iv_from WITH s_show IN it_show 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.
|
||||
DATA lv_lines TYPE i.
|
||||
IF ir_data IS BOUND.
|
||||
ASSIGN ir_data->* TO <lt_data>.
|
||||
lv_lines = lines( <lt_data> ).
|
||||
ENDIF.
|
||||
rv_lines = lv_lines.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD value_of.
|
||||
FIELD-SYMBOLS: <lt_data> TYPE STANDARD TABLE,
|
||||
<ls_line> TYPE any,
|
||||
<lv_value> TYPE any.
|
||||
DATA: lv_index TYPE i,
|
||||
lv_text TYPE string.
|
||||
|
||||
ASSIGN ir_data->* TO <lt_data>.
|
||||
lv_index = iv_row.
|
||||
READ TABLE <lt_data> ASSIGNING <ls_line> INDEX lv_index.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Row is missing' ).
|
||||
ASSIGN COMPONENT iv_col OF STRUCTURE <ls_line> TO <lv_value>.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Column is missing' ).
|
||||
lv_text = <lv_value>.
|
||||
CONDENSE lv_text.
|
||||
rv_value = lv_text.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD canon.
|
||||
DATA: lv_len TYPE i,
|
||||
lv_pos TYPE i,
|
||||
lv_ch TYPE c LENGTH 1,
|
||||
lv_int TYPE string,
|
||||
lv_frac TYPE string,
|
||||
lv_after TYPE c LENGTH 1,
|
||||
lv_sign TYPE string,
|
||||
lv_tail TYPE i.
|
||||
|
||||
lv_len = strlen( iv_text ).
|
||||
DO lv_len TIMES.
|
||||
lv_pos = sy-index - 1.
|
||||
lv_ch = iv_text+lv_pos(1).
|
||||
IF lv_ch CA '0123456789'.
|
||||
IF lv_after = 'X'.
|
||||
CONCATENATE lv_frac lv_ch INTO lv_frac.
|
||||
ELSE.
|
||||
CONCATENATE lv_int lv_ch INTO lv_int.
|
||||
ENDIF.
|
||||
ELSEIF lv_ch = '.' OR lv_ch = ','.
|
||||
lv_after = 'X'.
|
||||
ELSEIF lv_ch = '-'.
|
||||
lv_sign = '-'.
|
||||
ENDIF.
|
||||
ENDDO.
|
||||
|
||||
WHILE strlen( lv_int ) > 1 AND lv_int(1) = '0'.
|
||||
lv_int = lv_int+1.
|
||||
ENDWHILE.
|
||||
IF lv_int IS INITIAL.
|
||||
lv_int = '0'.
|
||||
ENDIF.
|
||||
|
||||
lv_tail = strlen( lv_frac ).
|
||||
WHILE lv_tail > 0.
|
||||
lv_pos = lv_tail - 1.
|
||||
IF lv_frac+lv_pos(1) <> '0'.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
lv_tail = lv_tail - 1.
|
||||
ENDWHILE.
|
||||
lv_frac = lv_frac(lv_tail).
|
||||
|
||||
CONCATENATE lv_sign lv_int '.' lv_frac INTO rv_canon.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD all_shows.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_lines TYPE i.
|
||||
lr_data = run( '20260101' ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 5 act = lv_lines ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260101' ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 1 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'ROCK' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 2 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'PLNT' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 3 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'KIDS' act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD revenue_values.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260101' ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 1 iv_col = 'REVENUE' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '190.00' ) act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 2 iv_col = 'REVENUE' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '180.00' ) act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 3 iv_col = 'REVENUE' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '150.00' ) act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ticket_sums.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260101' ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 1 iv_col = 'TICKETS' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '20' ) act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 2 iv_col = 'TICKETS' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '15' ) act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 3 iv_col = 'TICKETS' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '30' ) act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260101' ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 4 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'LASR' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 5 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'MAGI' act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD date_filter.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_lines TYPE i,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260109' ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_lines ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 1 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'KIDS' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 2 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'MAGI' act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD date_boundary.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_lines TYPE i,
|
||||
lv_val TYPE string.
|
||||
lr_data = run( '20260106' ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 5 act = lv_lines ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 1 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'ROCK' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 2 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'KIDS' act = lv_val ).
|
||||
lv_val = value_of( ir_data = lr_data iv_row = 5 iv_col = 'SHOW_ID' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'PLNT' act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 5 iv_col = 'TICKETS' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '5' ) act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD show_filter.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lt_show TYPE tt_show,
|
||||
ls_show TYPE LINE OF tt_show,
|
||||
lv_lines TYPE i,
|
||||
lv_val TYPE string.
|
||||
ls_show-sign = 'I'.
|
||||
ls_show-option = 'EQ'.
|
||||
ls_show-low = 'ROCK'.
|
||||
APPEND ls_show TO lt_show.
|
||||
lr_data = run( iv_from = '20260101' it_show = lt_show ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_lines ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 1 iv_col = 'TICKETS' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '20' ) act = lv_val ).
|
||||
lv_val = canon( value_of( ir_data = lr_data iv_row = 1 iv_col = 'REVENUE' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = canon( '190.00' ) act = lv_val ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_tickets_excluded.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lt_show TYPE tt_show,
|
||||
ls_show TYPE LINE OF tt_show,
|
||||
lv_lines TYPE i.
|
||||
ls_show-sign = 'I'.
|
||||
ls_show-option = 'EQ'.
|
||||
ls_show-low = 'OPER'.
|
||||
APPEND ls_show TO lt_show.
|
||||
lr_data = run( iv_from = '20260101' it_show = lt_show ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_lines ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD no_data.
|
||||
DATA: lr_data TYPE REF TO data,
|
||||
lv_lines TYPE i.
|
||||
lr_data = run( '20260201' ).
|
||||
lv_lines = lines_of( lr_data ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_lines ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
86
tasks_gen/eval/G0162/mutation.json
Normal file
86
tasks_gen/eval/G0162/mutation.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"task": "G0162",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}PLANETARIUM",
|
||||
"mutant": "line 40: * -> / (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "7/10",
|
||||
"failed_tests": [
|
||||
"REVENUE_VALUES",
|
||||
"SORTED_BY_REVENUE",
|
||||
"TICKET_SUMS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PLANETARIUM",
|
||||
"mutant": "line 77: >= -> < (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "1/10",
|
||||
"failed_tests": [
|
||||
"ALL_SHOWS",
|
||||
"DATE_BOUNDARY",
|
||||
"DATE_FILTER",
|
||||
"NO_DATA",
|
||||
"REVENUE_VALUES",
|
||||
"SHOW_FILTER",
|
||||
"SORTED_BY_REVENUE",
|
||||
"TICKET_SUMS",
|
||||
"TIE_BREAK_BY_SHOW"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PLANETARIUM",
|
||||
"mutant": "line 78: AND -> OR (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "2/10",
|
||||
"failed_tests": [
|
||||
"ALL_SHOWS",
|
||||
"DATE_BOUNDARY",
|
||||
"DATE_FILTER",
|
||||
"NO_DATA",
|
||||
"REVENUE_VALUES",
|
||||
"SHOW_FILTER",
|
||||
"TICKET_SUMS",
|
||||
"ZERO_TICKETS_EXCLUDED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PLANETARIUM",
|
||||
"mutant": "line 79: AND -> OR (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "2/10",
|
||||
"failed_tests": [
|
||||
"ALL_SHOWS",
|
||||
"DATE_BOUNDARY",
|
||||
"DATE_FILTER",
|
||||
"NO_DATA",
|
||||
"REVENUE_VALUES",
|
||||
"SHOW_FILTER",
|
||||
"TICKET_SUMS",
|
||||
"ZERO_TICKETS_EXCLUDED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}PLANETARIUM",
|
||||
"mutant": "line 79: > -> <= (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "1/10",
|
||||
"failed_tests": [
|
||||
"ALL_SHOWS",
|
||||
"DATE_BOUNDARY",
|
||||
"DATE_FILTER",
|
||||
"REVENUE_VALUES",
|
||||
"SHOW_FILTER",
|
||||
"SORTED_BY_REVENUE",
|
||||
"TICKET_SUMS",
|
||||
"TIE_BREAK_BY_SHOW",
|
||||
"ZERO_TICKETS_EXCLUDED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
194
tasks_gen/eval/G0162/reference/planetarium.prog.abap
Normal file
194
tasks_gen/eval/G0162/reference/planetarium.prog.abap
Normal file
@@ -0,0 +1,194 @@
|
||||
REPORT {{p}}planetarium.
|
||||
|
||||
TYPES: BEGIN OF ty_visit,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE {{p}}visit-tickets,
|
||||
ticket_price TYPE {{p}}visit-ticket_price,
|
||||
END OF ty_visit.
|
||||
TYPES tt_visit TYPE STANDARD TABLE OF ty_visit.
|
||||
|
||||
TYPES: BEGIN OF ty_line,
|
||||
show_id TYPE {{p}}visit-show_id,
|
||||
tickets TYPE i,
|
||||
revenue TYPE p LENGTH 15 DECIMALS 2,
|
||||
END OF ty_line.
|
||||
TYPES tt_line TYPE STANDARD TABLE OF ty_line.
|
||||
|
||||
DATA gv_show_id TYPE {{p}}visit-show_id.
|
||||
|
||||
PARAMETERS p_from TYPE d OBLIGATORY.
|
||||
SELECT-OPTIONS s_show FOR gv_show_id.
|
||||
|
||||
CLASS lcl_report DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS aggregate
|
||||
IMPORTING it_visits TYPE tt_visit
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
METHODS display
|
||||
CHANGING ct_lines TYPE tt_line.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_report IMPLEMENTATION.
|
||||
METHOD aggregate.
|
||||
DATA: ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line.
|
||||
|
||||
LOOP AT it_visits INTO ls_visit.
|
||||
READ TABLE ct_lines INTO ls_line WITH KEY show_id = ls_visit-show_id.
|
||||
IF sy-subrc = 0.
|
||||
ls_line-tickets = ls_line-tickets + ls_visit-tickets.
|
||||
ls_line-revenue = ls_line-revenue + ls_visit-tickets * ls_visit-ticket_price.
|
||||
MODIFY ct_lines FROM ls_line INDEX sy-tabix.
|
||||
ELSE.
|
||||
CLEAR ls_line.
|
||||
ls_line-show_id = ls_visit-show_id.
|
||||
ls_line-tickets = ls_visit-tickets.
|
||||
ls_line-revenue = ls_visit-tickets * ls_visit-ticket_price.
|
||||
APPEND ls_line TO ct_lines.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT ct_lines BY revenue DESCENDING show_id ASCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD display.
|
||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||
lx_error TYPE REF TO cx_salv_msg.
|
||||
|
||||
TRY.
|
||||
cl_salv_table=>factory(
|
||||
IMPORTING r_salv_table = lo_alv
|
||||
CHANGING t_table = ct_lines ).
|
||||
lo_alv->display( ).
|
||||
CATCH cx_salv_msg INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
START-OF-SELECTION.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
SELECT show_id tickets ticket_price
|
||||
FROM {{p}}visit
|
||||
INTO TABLE lt_visits
|
||||
WHERE visit_date >= p_from
|
||||
AND show_id IN s_show
|
||||
AND tickets > 0.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
lo_report->display( CHANGING ct_lines = lt_lines ).
|
||||
|
||||
CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS sums_by_show FOR TESTING.
|
||||
METHODS sorted_by_revenue FOR TESTING.
|
||||
METHODS tie_break_by_show FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_report IMPLEMENTATION.
|
||||
METHOD sums_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lv_exp TYPE p LENGTH 15 DECIMALS 2,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'B'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 15 act = ls_line-tickets ).
|
||||
lv_exp = 15 * 12.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'B' act = ls_line-show_id ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-tickets ).
|
||||
lv_exp = 4 * 15.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = ls_line-revenue ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_revenue.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'C'.
|
||||
ls_visit-tickets = 1.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'D'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD tie_break_by_show.
|
||||
DATA: lt_visits TYPE tt_visit,
|
||||
lt_lines TYPE tt_line,
|
||||
ls_visit TYPE ty_visit,
|
||||
ls_line TYPE ty_line,
|
||||
lo_report TYPE REF TO lcl_report.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'Z'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-show_id = 'A'.
|
||||
ls_visit-tickets = 2.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visits.
|
||||
|
||||
CREATE OBJECT lo_report.
|
||||
lo_report->aggregate( EXPORTING it_visits = lt_visits
|
||||
CHANGING ct_lines = lt_lines ).
|
||||
|
||||
READ TABLE lt_lines INTO ls_line INDEX 1.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'A' act = ls_line-show_id ).
|
||||
READ TABLE lt_lines INTO ls_line INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'Z' act = ls_line-show_id ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
13
tasks_gen/eval/G0162/seed/visit.tabl.asabap
Normal file
13
tasks_gen/eval/G0162/seed/visit.tabl.asabap
Normal file
@@ -0,0 +1,13 @@
|
||||
@EndUserText.label : 'Planetarium visits'
|
||||
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
|
||||
@AbapCatalog.tableCategory : #TRANSPARENT
|
||||
@AbapCatalog.deliveryClass : #A
|
||||
@AbapCatalog.dataMaintenance : #RESTRICTED
|
||||
define table {{p}}visit {
|
||||
key client : abap.clnt not null;
|
||||
key visit_id : abap.int4 not null;
|
||||
show_id : abap.char(4);
|
||||
visit_date : abap.dats;
|
||||
tickets : abap.int4;
|
||||
ticket_price : abap.dec(7,2);
|
||||
}
|
||||
89
tasks_gen/eval/G0162/seed/visit_seed.clas.abap
Normal file
89
tasks_gen/eval/G0162/seed/visit_seed.clas.abap
Normal file
@@ -0,0 +1,89 @@
|
||||
CLASS {{p}}visit_seed DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES if_oo_adt_classrun.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS {{p}}visit_seed IMPLEMENTATION.
|
||||
METHOD if_oo_adt_classrun~main.
|
||||
DATA: lt_visit TYPE STANDARD TABLE OF {{p}}visit,
|
||||
ls_visit TYPE {{p}}visit.
|
||||
|
||||
DELETE FROM {{p}}visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 1.
|
||||
ls_visit-show_id = 'PLNT'.
|
||||
ls_visit-visit_date = '20260105'.
|
||||
ls_visit-tickets = 10.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 2.
|
||||
ls_visit-show_id = 'PLNT'.
|
||||
ls_visit-visit_date = '20260106'.
|
||||
ls_visit-tickets = 5.
|
||||
ls_visit-ticket_price = '12.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 3.
|
||||
ls_visit-show_id = 'ROCK'.
|
||||
ls_visit-visit_date = '20260106'.
|
||||
ls_visit-tickets = 20.
|
||||
ls_visit-ticket_price = '9.50'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 4.
|
||||
ls_visit-show_id = 'ROCK'.
|
||||
ls_visit-visit_date = '20251220'.
|
||||
ls_visit-tickets = 8.
|
||||
ls_visit-ticket_price = '9.50'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 5.
|
||||
ls_visit-show_id = 'LASR'.
|
||||
ls_visit-visit_date = '20260107'.
|
||||
ls_visit-tickets = 0.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 6.
|
||||
ls_visit-show_id = 'LASR'.
|
||||
ls_visit-visit_date = '20260108'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 7.
|
||||
ls_visit-show_id = 'KIDS'.
|
||||
ls_visit-visit_date = '20260109'.
|
||||
ls_visit-tickets = 30.
|
||||
ls_visit-ticket_price = '5.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 8.
|
||||
ls_visit-show_id = 'OPER'.
|
||||
ls_visit-visit_date = '20260110'.
|
||||
ls_visit-tickets = 0.
|
||||
ls_visit-ticket_price = '20.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
CLEAR ls_visit.
|
||||
ls_visit-visit_id = 9.
|
||||
ls_visit-show_id = 'MAGI'.
|
||||
ls_visit-visit_date = '20260111'.
|
||||
ls_visit-tickets = 4.
|
||||
ls_visit-ticket_price = '15.00'.
|
||||
APPEND ls_visit TO lt_visit.
|
||||
|
||||
INSERT {{p}}visit FROM TABLE lt_visit.
|
||||
|
||||
out->write( sy-dbcnt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
48
tasks_gen/eval/G0162/spec.md
Normal file
48
tasks_gen/eval/G0162/spec.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 1. Goal
|
||||
Show the ticket sales of each planetarium show in an ALV list. The operations
|
||||
team uses the list to compare the shows of a period.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The table {{P}}VISIT exists in package $TMP. The table contains data.
|
||||
The fields are:
|
||||
- VISIT_ID (INT4, key): the number of the visit.
|
||||
- SHOW_ID (CHAR 4): the show. Every show ID has exactly 4 characters.
|
||||
- VISIT_DATE (DATS): the date of the visit.
|
||||
- TICKETS (INT4): the number of tickets that were sold.
|
||||
- TICKET_PRICE (DEC 7,2): the price of one ticket.
|
||||
|
||||
# 4. Contract
|
||||
- Create the executable program {{P}}PLANETARIUM in package $TMP.
|
||||
- The selection screen has these fields:
|
||||
- The parameter P_FROM. Type DATS. Mandatory. It is the first visit date to
|
||||
include.
|
||||
- The select-option S_SHOW for the show ID.
|
||||
- Show the result with CL_SALV_TABLE. The output table has these columns:
|
||||
- SHOW_ID. Type CHAR 4. The show.
|
||||
- TICKETS. Type INT4. The sum of the tickets of the show.
|
||||
- REVENUE. Type DEC with length 15 and 2 decimal places. The sum of the
|
||||
revenue of the show.
|
||||
|
||||
# 5. Business rules
|
||||
1. Include a visit only if VISIT_DATE is on or after P_FROM.
|
||||
2. Include a visit only if SHOW_ID is in S_SHOW.
|
||||
3. Include a visit only if TICKETS is greater than zero.
|
||||
4. The revenue of a visit is TICKETS multiplied by TICKET_PRICE.
|
||||
5. Show one line for each show that has at least one included visit.
|
||||
6. Sort the lines by REVENUE. The highest revenue comes first.
|
||||
7. If two shows have the same revenue, sort these two shows by SHOW_ID in
|
||||
ascending order.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 7.02. The program must compile on release 7.02. Do not use
|
||||
syntax that is newer than release 7.02.
|
||||
- Coding standards: Clean ABAP. A method has fewer than 40 statements.
|
||||
- Out of scope: do not change the table {{P}}VISIT.
|
||||
|
||||
# 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/eval/G0162/task.json
Normal file
60
tasks_gen/eval/G0162/task.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"id": "G0162",
|
||||
"category": "G",
|
||||
"object_type": "PROG",
|
||||
"difficulty": 2,
|
||||
"release_target": "v702",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 40,
|
||||
"max_activations": 10
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "TABL",
|
||||
"name": "{{P}}VISIT",
|
||||
"file": "seed/visit.tabl.asabap",
|
||||
"description": "Planetarium visits"
|
||||
},
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}VISIT_SEED",
|
||||
"file": "seed/visit_seed.clas.abap",
|
||||
"description": "T60 seed data",
|
||||
"run": true
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "PROG",
|
||||
"name": "{{P}}PLANETARIUM",
|
||||
"parameters": [
|
||||
"p_from",
|
||||
"s_show"
|
||||
]
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}VISIT"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T60_HIDDEN",
|
||||
"file": "hidden/t60_hidden.clas.abap",
|
||||
"description": "T60 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "PROG",
|
||||
"name": "{{P}}PLANETARIUM",
|
||||
"file": "reference/planetarium.prog.abap",
|
||||
"description": "Ticket sales per show"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"no_newer_syntax",
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user