Files
abap-llm/tasks_gen/eval/G0114/hidden/t02_hidden.clas.abap

239 lines
12 KiB
ABAP

CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
TYPES ty_id TYPE c LENGTH 10.
TYPES ty_district TYPE c LENGTH 4.
TYPES ty_weight TYPE p LENGTH 8 DECIMALS 2.
DATA mo_cut TYPE REF TO {{p}}dispatch_planner.
METHODS setup.
METHODS make_delivery
IMPORTING iv_id TYPE ty_id
iv_district TYPE ty_district
iv_parcels TYPE i
iv_weight TYPE ty_weight
iv_urgency TYPE i
RETURNING VALUE(rs_delivery) TYPE {{p}}dispatch_planner=>ty_delivery.
METHODS make_line
IMPORTING iv_district TYPE ty_district
iv_deliveries TYPE i
iv_parcels TYPE i
iv_weight TYPE ty_weight
iv_urgency TYPE i
RETURNING VALUE(rs_line) TYPE {{p}}dispatch_planner=>ty_district.
METHODS empty_input FOR TESTING.
METHODS one_delivery FOR TESTING.
METHODS groups_districts FOR TESTING.
METHODS ignores_zero_parcels FOR TESTING.
METHODS sums_parcels_weight FOR TESTING.
METHODS top_urgency_is_min FOR TESTING.
METHODS result_is_sorted FOR TESTING.
METHODS merge_adds_values FOR TESTING.
METHODS merge_single_district FOR TESTING.
METHODS merge_urgency_min FOR TESTING.
METHODS merge_sorted FOR TESTING.
METHODS merge_empty FOR TESTING.
ENDCLASS.
CLASS {{p}}t02_hidden IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}dispatch_planner( ).
ENDMETHOD.
METHOD make_delivery.
rs_delivery = VALUE #( delivery_id = iv_id
district = iv_district
parcels = iv_parcels
weight = iv_weight
urgency = iv_urgency ).
ENDMETHOD.
METHOD make_line.
rs_line = VALUE #( district = iv_district
deliveries = iv_deliveries
parcels = iv_parcels
weight = iv_weight
top_urgency = iv_urgency ).
ENDMETHOD.
METHOD 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 one_delivery.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'NORD' iv_parcels = 3
iv_weight = '10.50' iv_urgency = 2 ) ) ).
DATA(lt_result) = mo_cut->plan( lt_delivery ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
DATA(ls_line) = lt_result[ district = 'NORD' ].
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_line-deliveries ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_line-parcels ).
DATA lv_weight TYPE ty_weight.
lv_weight = '10.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 groups_districts.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'NORD' iv_parcels = 2
iv_weight = '5.00' iv_urgency = 1 ) )
( make_delivery( iv_id = 'D2' iv_district = 'SUED' iv_parcels = 4
iv_weight = '7.00' iv_urgency = 3 ) )
( make_delivery( iv_id = 'D3' iv_district = 'NORD' iv_parcels = 1
iv_weight = '2.00' iv_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' ].
DATA(ls_sued) = lt_result[ district = 'SUED' ].
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_nord-deliveries ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_sued-deliveries ).
ENDMETHOD.
METHOD ignores_zero_parcels.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'NORD' iv_parcels = 0
iv_weight = '5.00' iv_urgency = 1 ) )
( make_delivery( iv_id = 'D2' iv_district = 'OST' iv_parcels = -2
iv_weight = '3.00' iv_urgency = 2 ) )
( make_delivery( iv_id = 'D3' iv_district = 'WEST' iv_parcels = 2
iv_weight = '3.00' iv_urgency = 2 ) ) ).
DATA(lt_result) = mo_cut->plan( lt_delivery ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
READ TABLE lt_result WITH KEY district = 'NORD' TRANSPORTING NO FIELDS.
cl_abap_unit_assert=>assert_subrc( exp = 4 msg = 'NORD must not be in the result' ).
READ TABLE lt_result WITH KEY district = 'OST' TRANSPORTING NO FIELDS.
cl_abap_unit_assert=>assert_subrc( exp = 4 msg = 'OST must not be in the result' ).
DATA(ls_line) = lt_result[ 1 ].
cl_abap_unit_assert=>assert_equals( exp = 'WEST' act = ls_line-district ).
ENDMETHOD.
METHOD sums_parcels_weight.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'NORD' iv_parcels = 2
iv_weight = '10.25' iv_urgency = 1 ) )
( make_delivery( iv_id = 'D2' iv_district = 'NORD' iv_parcels = 3
iv_weight = '4.75' iv_urgency = 1 ) ) ).
DATA(lt_result) = mo_cut->plan( lt_delivery ).
DATA(ls_line) = lt_result[ district = 'NORD' ].
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_line-deliveries ).
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 ).
ENDMETHOD.
METHOD top_urgency_is_min.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'NORD' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 5 ) )
( make_delivery( iv_id = 'D2' iv_district = 'NORD' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 2 ) )
( make_delivery( iv_id = 'D3' iv_district = 'NORD' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 4 ) ) ).
DATA(lt_result) = mo_cut->plan( lt_delivery ).
DATA(ls_line) = lt_result[ district = 'NORD' ].
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_line-top_urgency ).
ENDMETHOD.
METHOD result_is_sorted.
DATA lt_delivery TYPE {{p}}dispatch_planner=>tt_delivery.
lt_delivery = VALUE #(
( make_delivery( iv_id = 'D1' iv_district = 'WEST' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) )
( make_delivery( iv_id = 'D2' iv_district = 'NORD' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) )
( make_delivery( iv_id = 'D3' iv_district = 'OST' iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) ) ).
DATA(lt_result) = mo_cut->plan( lt_delivery ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_result ) ).
DATA(ls_first) = lt_result[ 1 ].
DATA(ls_second) = lt_result[ 2 ].
DATA(ls_third) = lt_result[ 3 ].
cl_abap_unit_assert=>assert_equals( exp = 'NORD' act = ls_first-district ).
cl_abap_unit_assert=>assert_equals( exp = 'OST' act = ls_second-district ).
cl_abap_unit_assert=>assert_equals( exp = 'WEST' act = ls_third-district ).
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 #( ( make_line( iv_district = 'NORD' iv_deliveries = 2 iv_parcels = 5
iv_weight = '10.00' iv_urgency = 3 ) ) ).
lt_right = VALUE #( ( make_line( iv_district = 'NORD' iv_deliveries = 1 iv_parcels = 4
iv_weight = '2.50' iv_urgency = 2 ) ) ).
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
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 ).
ENDMETHOD.
METHOD merge_single_district.
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
lt_left = VALUE #( ( make_line( iv_district = 'NORD' iv_deliveries = 2 iv_parcels = 5
iv_weight = '10.00' iv_urgency = 3 ) ) ).
lt_right = VALUE #( ( make_line( iv_district = 'SUED' iv_deliveries = 4 iv_parcels = 8
iv_weight = '6.00' iv_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 = 8 act = ls_sued-parcels ).
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 #( ( make_line( iv_district = 'NORD' iv_deliveries = 1 iv_parcels = 1
iv_weight = '1.00' iv_urgency = 4 ) ) ).
lt_right = VALUE #( ( make_line( iv_district = 'NORD' iv_deliveries = 1 iv_parcels = 1
iv_weight = '1.00' iv_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_sorted.
DATA lt_left TYPE {{p}}dispatch_planner=>tt_district.
DATA lt_right TYPE {{p}}dispatch_planner=>tt_district.
lt_left = VALUE #( ( make_line( iv_district = 'WEST' iv_deliveries = 1 iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) ) ).
lt_right = VALUE #( ( make_line( iv_district = 'OST' iv_deliveries = 1 iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) )
( make_line( iv_district = 'NORD' iv_deliveries = 1 iv_parcels = 1
iv_weight = '1.00' iv_urgency = 1 ) ) ).
DATA(lt_result) = mo_cut->merge( it_left = lt_left it_right = lt_right ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_result ) ).
DATA(ls_first) = lt_result[ 1 ].
DATA(ls_second) = lt_result[ 2 ].
DATA(ls_third) = lt_result[ 3 ].
cl_abap_unit_assert=>assert_equals( exp = 'NORD' act = ls_first-district ).
cl_abap_unit_assert=>assert_equals( exp = 'OST' act = ls_second-district ).
cl_abap_unit_assert=>assert_equals( exp = 'WEST' act = ls_third-district ).
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.