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:
110
tasks_gen/eval/G0114/reference/dispatch_planner.clas.abap
Normal file
110
tasks_gen/eval/G0114/reference/dispatch_planner.clas.abap
Normal file
@@ -0,0 +1,110 @@
|
||||
CLASS {{p}}dispatch_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_delivery,
|
||||
delivery_id TYPE c LENGTH 10,
|
||||
district TYPE c LENGTH 4,
|
||||
parcels TYPE i,
|
||||
weight TYPE p LENGTH 8 DECIMALS 2,
|
||||
urgency TYPE i,
|
||||
END OF ty_delivery,
|
||||
tt_delivery TYPE STANDARD TABLE OF ty_delivery WITH EMPTY KEY,
|
||||
BEGIN OF ty_district,
|
||||
district TYPE c LENGTH 4,
|
||||
deliveries TYPE i,
|
||||
parcels TYPE i,
|
||||
weight TYPE p LENGTH 8 DECIMALS 2,
|
||||
top_urgency TYPE i,
|
||||
END OF ty_district,
|
||||
tt_district TYPE STANDARD TABLE OF ty_district WITH EMPTY KEY.
|
||||
|
||||
METHODS constructor.
|
||||
METHODS plan
|
||||
IMPORTING it_delivery TYPE tt_delivery
|
||||
RETURNING VALUE(rt_district) TYPE tt_district.
|
||||
METHODS merge
|
||||
IMPORTING it_left TYPE tt_district
|
||||
it_right TYPE tt_district
|
||||
RETURNING VALUE(rt_merged) TYPE tt_district.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_group TYPE SORTED TABLE OF ty_district WITH UNIQUE KEY district.
|
||||
|
||||
METHODS add_delivery
|
||||
IMPORTING is_delivery TYPE ty_delivery
|
||||
CHANGING ct_group TYPE tt_group.
|
||||
METHODS add_line
|
||||
IMPORTING is_line TYPE ty_district
|
||||
CHANGING ct_group TYPE tt_group.
|
||||
METHODS to_result
|
||||
IMPORTING it_group TYPE tt_group
|
||||
RETURNING VALUE(rt_result) TYPE tt_district.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}dispatch_planner IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan.
|
||||
DATA lt_group TYPE tt_group.
|
||||
LOOP AT it_delivery INTO DATA(ls_delivery).
|
||||
add_delivery( EXPORTING is_delivery = ls_delivery
|
||||
CHANGING ct_group = lt_group ).
|
||||
ENDLOOP.
|
||||
rt_district = to_result( lt_group ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merge.
|
||||
DATA lt_group TYPE tt_group.
|
||||
LOOP AT it_left INTO DATA(ls_left).
|
||||
add_line( EXPORTING is_line = ls_left
|
||||
CHANGING ct_group = lt_group ).
|
||||
ENDLOOP.
|
||||
LOOP AT it_right INTO DATA(ls_right).
|
||||
add_line( EXPORTING is_line = ls_right
|
||||
CHANGING ct_group = lt_group ).
|
||||
ENDLOOP.
|
||||
rt_merged = to_result( lt_group ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_delivery.
|
||||
IF is_delivery-parcels <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(ls_new) = VALUE ty_district( district = is_delivery-district
|
||||
deliveries = 1
|
||||
parcels = is_delivery-parcels
|
||||
weight = is_delivery-weight
|
||||
top_urgency = is_delivery-urgency ).
|
||||
READ TABLE ct_group WITH TABLE KEY district = is_delivery-district
|
||||
ASSIGNING FIELD-SYMBOL(<ls_group>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT ls_new INTO TABLE ct_group.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
<ls_group>-deliveries = <ls_group>-deliveries + ls_new-deliveries.
|
||||
<ls_group>-parcels = <ls_group>-parcels + ls_new-parcels.
|
||||
<ls_group>-weight = <ls_group>-weight + ls_new-weight.
|
||||
<ls_group>-top_urgency = nmin( val1 = <ls_group>-top_urgency
|
||||
val2 = ls_new-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_line.
|
||||
READ TABLE ct_group WITH TABLE KEY district = is_line-district
|
||||
ASSIGNING FIELD-SYMBOL(<ls_group>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT is_line INTO TABLE ct_group.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
<ls_group>-deliveries = <ls_group>-deliveries + is_line-deliveries.
|
||||
<ls_group>-parcels = <ls_group>-parcels + is_line-parcels.
|
||||
<ls_group>-weight = <ls_group>-weight + is_line-weight.
|
||||
<ls_group>-top_urgency = nmin( val1 = <ls_group>-top_urgency
|
||||
val2 = is_line-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_result.
|
||||
rt_result = it_group.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
126
tasks_gen/eval/G0114/reference/dispatch_planner.testclasses.abap
Normal file
126
tasks_gen/eval/G0114/reference/dispatch_planner.testclasses.abap
Normal file
@@ -0,0 +1,126 @@
|
||||
CLASS ltc_dispatch_planner DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_weight TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}dispatch_planner.
|
||||
|
||||
METHODS setup.
|
||||
METHODS plan_groups_districts FOR TESTING.
|
||||
METHODS plan_ignores_zero FOR TESTING.
|
||||
METHODS plan_sums_values FOR TESTING.
|
||||
METHODS plan_sorts_result FOR TESTING.
|
||||
METHODS plan_empty_input FOR TESTING.
|
||||
METHODS merge_adds_values FOR TESTING.
|
||||
METHODS merge_keeps_single FOR TESTING.
|
||||
METHODS merge_urgency_min FOR TESTING.
|
||||
METHODS merge_empty FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_dispatch_planner IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}dispatch_planner( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan_groups_districts.
|
||||
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
|
||||
lt_delivery = VALUE #(
|
||||
( delivery_id = 'D1' district = 'NORD' parcels = 2 weight = '5.00' urgency = 1 )
|
||||
( delivery_id = 'D2' district = 'SUED' parcels = 4 weight = '7.00' urgency = 3 )
|
||||
( delivery_id = 'D3' district = 'NORD' parcels = 1 weight = '2.00' urgency = 5 ) ).
|
||||
DATA(lt_result) = mo_cut->plan( lt_delivery ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ).
|
||||
DATA(ls_nord) = lt_result[ district = 'NORD' ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_nord-deliveries ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_nord-parcels ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan_ignores_zero.
|
||||
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
|
||||
lt_delivery = VALUE #(
|
||||
( delivery_id = 'D1' district = 'NORD' parcels = 0 weight = '5.00' urgency = 1 ) ).
|
||||
DATA(lt_result) = mo_cut->plan( lt_delivery ).
|
||||
cl_abap_unit_assert=>assert_initial( act = lt_result ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan_sums_values.
|
||||
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
|
||||
lt_delivery = VALUE #(
|
||||
( delivery_id = 'D1' district = 'NORD' parcels = 2 weight = '10.25' urgency = 1 )
|
||||
( delivery_id = 'D2' district = 'NORD' parcels = 3 weight = '4.75' urgency = 4 ) ).
|
||||
DATA(lt_result) = mo_cut->plan( lt_delivery ).
|
||||
DATA(ls_line) = lt_result[ district = 'NORD' ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 5 act = ls_line-parcels ).
|
||||
DATA lv_weight TYPE ty_weight.
|
||||
lv_weight = '15.00'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_weight act = ls_line-weight ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_line-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan_sorts_result.
|
||||
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
|
||||
lt_delivery = VALUE #(
|
||||
( delivery_id = 'D1' district = 'WEST' parcels = 1 weight = '1.00' urgency = 1 )
|
||||
( delivery_id = 'D2' district = 'NORD' parcels = 1 weight = '1.00' urgency = 1 ) ).
|
||||
DATA(lt_result) = mo_cut->plan( lt_delivery ).
|
||||
DATA(ls_first) = lt_result[ 1 ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'NORD' act = ls_first-district ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plan_empty_input.
|
||||
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
|
||||
DATA(lt_result) = mo_cut->plan( lt_delivery ).
|
||||
cl_abap_unit_assert=>assert_initial( act = lt_result ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merge_adds_values.
|
||||
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
|
||||
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
|
||||
lt_left = VALUE #( ( district = 'NORD' deliveries = 2 parcels = 5
|
||||
weight = '10.00' top_urgency = 3 ) ).
|
||||
lt_right = VALUE #( ( district = 'NORD' deliveries = 1 parcels = 4
|
||||
weight = '2.50' top_urgency = 2 ) ).
|
||||
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
|
||||
DATA(ls_line) = lt_result[ district = 'NORD' ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_line-deliveries ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 9 act = ls_line-parcels ).
|
||||
DATA lv_weight TYPE ty_weight.
|
||||
lv_weight = '12.50'.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_weight act = ls_line-weight ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_line-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merge_keeps_single.
|
||||
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
|
||||
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
|
||||
lt_left = VALUE #( ( district = 'NORD' deliveries = 2 parcels = 5
|
||||
weight = '10.00' top_urgency = 3 ) ).
|
||||
lt_right = VALUE #( ( district = 'SUED' deliveries = 4 parcels = 8
|
||||
weight = '6.00' top_urgency = 1 ) ).
|
||||
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ).
|
||||
DATA(ls_sued) = lt_result[ district = 'SUED' ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_sued-deliveries ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_sued-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merge_urgency_min.
|
||||
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
|
||||
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
|
||||
lt_left = VALUE #( ( district = 'NORD' deliveries = 1 parcels = 1
|
||||
weight = '1.00' top_urgency = 4 ) ).
|
||||
lt_right = VALUE #( ( district = 'NORD' deliveries = 1 parcels = 1
|
||||
weight = '1.00' top_urgency = 7 ) ).
|
||||
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
|
||||
DATA(ls_line) = lt_result[ district = 'NORD' ].
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_line-top_urgency ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merge_empty.
|
||||
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
|
||||
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
|
||||
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
|
||||
cl_abap_unit_assert=>assert_initial( act = lt_result ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user