Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
93
tasks_gen/eval/G0116/reference/departure_planner.clas.abap
Normal file
93
tasks_gen/eval/G0116/reference/departure_planner.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}departure_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_stop TYPE c LENGTH 4.
|
||||
TYPES ty_line TYPE c LENGTH 6.
|
||||
TYPES ty_depot TYPE c LENGTH 4.
|
||||
TYPES ty_time TYPE t.
|
||||
TYPES:
|
||||
BEGIN OF ty_departure,
|
||||
stop TYPE ty_stop,
|
||||
line TYPE ty_line,
|
||||
depart TYPE ty_time,
|
||||
depot TYPE ty_depot,
|
||||
END OF ty_departure,
|
||||
tt_departures TYPE STANDARD TABLE OF ty_departure WITH EMPTY KEY.
|
||||
|
||||
METHODS constructor.
|
||||
METHODS add_depot
|
||||
IMPORTING iv_depot TYPE ty_depot
|
||||
it_departures TYPE tt_departures.
|
||||
METHODS next_departure
|
||||
IMPORTING iv_stop TYPE ty_stop
|
||||
iv_from TYPE ty_time
|
||||
RETURNING VALUE(rs_departure) TYPE ty_departure.
|
||||
METHODS departures_at_stop
|
||||
IMPORTING iv_stop TYPE ty_stop
|
||||
RETURNING VALUE(rt_departures) TYPE tt_departures.
|
||||
METHODS count
|
||||
RETURNING VALUE(rv_count) TYPE i.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_store TYPE SORTED TABLE OF ty_departure
|
||||
WITH UNIQUE KEY stop depart line.
|
||||
DATA mt_store TYPE tt_store.
|
||||
|
||||
METHODS first_index_of_stop
|
||||
IMPORTING iv_stop TYPE ty_stop
|
||||
RETURNING VALUE(rv_index) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}departure_planner IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
CLEAR mt_store.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_depot.
|
||||
LOOP AT it_departures INTO DATA(ls_departure).
|
||||
DATA(ls_store) = ls_departure.
|
||||
ls_store-depot = iv_depot.
|
||||
INSERT ls_store INTO TABLE mt_store.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD next_departure.
|
||||
DATA(lv_start) = first_index_of_stop( iv_stop ).
|
||||
IF lv_start = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
LOOP AT mt_store INTO DATA(ls_departure) FROM lv_start.
|
||||
IF ls_departure-stop <> iv_stop.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
IF ls_departure-depart >= iv_from.
|
||||
rs_departure = ls_departure.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD departures_at_stop.
|
||||
DATA(lv_start) = first_index_of_stop( iv_stop ).
|
||||
IF lv_start = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
LOOP AT mt_store INTO DATA(ls_departure) FROM lv_start.
|
||||
IF ls_departure-stop <> iv_stop.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
APPEND ls_departure TO rt_departures.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD count.
|
||||
rv_count = lines( mt_store ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD first_index_of_stop.
|
||||
READ TABLE mt_store TRANSPORTING NO FIELDS WITH KEY stop = iv_stop.
|
||||
IF sy-subrc = 0.
|
||||
rv_index = sy-tabix.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,73 @@
|
||||
CLASS ltc_departure_planner DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}departure_planner.
|
||||
METHODS setup.
|
||||
METHODS stores_depot FOR TESTING.
|
||||
METHODS ignores_duplicate FOR TESTING.
|
||||
METHODS next_departure_ok FOR TESTING.
|
||||
METHODS next_departure_none FOR TESTING.
|
||||
METHODS stop_list_ok FOR TESTING.
|
||||
METHODS empty_input_ok FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_departure_planner IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}departure_planner( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stores_depot.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ).
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = mo_cut->count( ) ).
|
||||
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
|
||||
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '000000' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'D1' act = ls_next-depot ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ignores_duplicate.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ).
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
mo_cut->add_depot( iv_depot = 'D2' it_departures = lt_input ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = mo_cut->count( ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD next_departure_ok.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' )
|
||||
( stop = 'A100' line = 'L20' depart = '083000' ) ).
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
|
||||
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '080001' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'L20' act = ls_next-line ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD next_departure_none.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ).
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
|
||||
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '090000' ).
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_next-stop ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stop_list_ok.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_input = VALUE #( ( stop = 'A100' line = 'L20' depart = '083000' )
|
||||
( stop = 'A100' line = 'L10' depart = '080000' ) ).
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
DATA lt_stop TYPE {{p}}departure_planner=>tt_departures.
|
||||
lt_stop = mo_cut->departures_at_stop( 'A100' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_stop ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = '080000' act = lt_stop[ 1 ]-depart ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_input_ok.
|
||||
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
|
||||
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = mo_cut->count( ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user