Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
94 lines
4.0 KiB
ABAP
94 lines
4.0 KiB
ABAP
CLASS ltc_refill_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
DATA mo_cut TYPE REF TO {{p}}refill_planner.
|
|
METHODS setup.
|
|
METHODS adds_machine FOR TESTING.
|
|
METHODS replaces_machine FOR TESTING.
|
|
METHODS accumulates_refill FOR TESTING.
|
|
METHODS rejects_bad_quantity FOR TESTING.
|
|
METHODS ignores_unknown_machine FOR TESTING.
|
|
METHODS sorts_low_fill_level FOR TESTING.
|
|
METHODS ranks_largest_refills FOR TESTING.
|
|
METHODS sums_per_district FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS ltc_refill_planner IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}refill_planner( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD adds_machine.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
DATA(lt_machines) = mo_cut->machines_below( 50 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_machines ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD replaces_machine.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D2' iv_fill_level = 20 ).
|
|
DATA(lt_machines) = mo_cut->machines_below( 50 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_machines ) ).
|
|
LOOP AT lt_machines INTO DATA(ls_machine).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'D2' act = ls_machine-district ).
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD accumulates_refill.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M1' iv_quantity = 5 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M1' iv_quantity = 7 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 12 act = mo_cut->get_refill( 'M1' ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD rejects_bad_quantity.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = abap_false
|
|
act = mo_cut->add_refill( iv_machine_id = 'M1' iv_quantity = 0 ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_unknown_machine.
|
|
cl_abap_unit_assert=>assert_equals( exp = abap_false
|
|
act = mo_cut->add_refill( iv_machine_id = 'M9' iv_quantity = 5 ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorts_low_fill_level.
|
|
DATA lv_position TYPE i.
|
|
mo_cut->add_machine( iv_machine_id = 'M2' iv_district = 'D1' iv_fill_level = 20 ).
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
DATA(lt_machines) = mo_cut->machines_below( 25 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_machines ) ).
|
|
LOOP AT lt_machines INTO DATA(ls_machine).
|
|
lv_position = lv_position + 1.
|
|
IF lv_position = 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M1' act = ls_machine-machine_id ).
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD ranks_largest_refills.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_machine( iv_machine_id = 'M2' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M1' iv_quantity = 3 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M2' iv_quantity = 8 ).
|
|
DATA(lt_refills) = mo_cut->top_refills( 1 ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_refills ) ).
|
|
LOOP AT lt_refills INTO DATA(ls_refill).
|
|
cl_abap_unit_assert=>assert_equals( exp = 'M2' act = ls_refill-machine_id ).
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD sums_per_district.
|
|
mo_cut->add_machine( iv_machine_id = 'M1' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_machine( iv_machine_id = 'M2' iv_district = 'D1' iv_fill_level = 10 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M1' iv_quantity = 3 ).
|
|
mo_cut->add_refill( iv_machine_id = 'M2' iv_quantity = 8 ).
|
|
DATA(lt_summary) = mo_cut->district_summary( ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_summary ) ).
|
|
LOOP AT lt_summary INTO DATA(ls_row).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-machines ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 11 act = ls_row-quantity ).
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|