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:
102
tasks_gen/eval/G0118/reference/canteen_planner.clas.abap
Normal file
102
tasks_gen/eval/G0118/reference/canteen_planner.clas.abap
Normal file
@@ -0,0 +1,102 @@
|
||||
CLASS {{p}}canteen_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_canteen_plan.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_demand TYPE SORTED TABLE OF {{p}}if_canteen_plan=>ty_order
|
||||
WITH UNIQUE KEY ingredient.
|
||||
TYPES tt_master TYPE HASHED TABLE OF {{p}}if_canteen_plan=>ty_master
|
||||
WITH UNIQUE KEY ingredient.
|
||||
|
||||
METHODS collect_orders
|
||||
IMPORTING it_orders TYPE {{p}}if_canteen_plan=>tt_order
|
||||
CHANGING ct_demand TYPE tt_demand.
|
||||
|
||||
METHODS collect_demand
|
||||
IMPORTING it_orders TYPE {{p}}if_canteen_plan=>tt_order
|
||||
RETURNING VALUE(rt_demand) TYPE tt_demand.
|
||||
|
||||
METHODS to_master
|
||||
IMPORTING it_catalogue TYPE {{p}}if_canteen_plan=>tt_master
|
||||
RETURNING VALUE(rt_master) TYPE tt_master.
|
||||
|
||||
METHODS packs_needed
|
||||
IMPORTING iv_quantity TYPE {{p}}if_canteen_plan=>ty_quantity
|
||||
iv_pack_size TYPE {{p}}if_canteen_plan=>ty_quantity
|
||||
RETURNING VALUE(rv_packs) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}canteen_planner IMPLEMENTATION.
|
||||
METHOD {{p}}if_canteen_plan~merge_orders.
|
||||
DATA(lt_demand) = collect_demand( it_orders_a ).
|
||||
collect_orders( EXPORTING it_orders = it_orders_b
|
||||
CHANGING ct_demand = lt_demand ).
|
||||
rt_demand = lt_demand.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD {{p}}if_canteen_plan~pack_requirement.
|
||||
DATA(lt_master) = to_master( it_catalogue ).
|
||||
DATA(lt_demand) = collect_demand( it_demand ).
|
||||
DATA ls_master TYPE {{p}}if_canteen_plan=>ty_master.
|
||||
|
||||
LOOP AT lt_demand INTO DATA(ls_demand).
|
||||
IF NOT line_exists( lt_master[ ingredient = ls_demand-ingredient ] ).
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
ls_master = lt_master[ ingredient = ls_demand-ingredient ].
|
||||
INSERT VALUE #( ingredient = ls_demand-ingredient
|
||||
packs = packs_needed( iv_quantity = ls_demand-quantity
|
||||
iv_pack_size = ls_master-pack_size ) )
|
||||
INTO TABLE rt_packs.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD {{p}}if_canteen_plan~missing_ingredients.
|
||||
DATA(lt_master) = to_master( it_catalogue ).
|
||||
DATA(lt_demand) = collect_demand( it_demand ).
|
||||
|
||||
LOOP AT lt_demand INTO DATA(ls_demand).
|
||||
IF NOT line_exists( lt_master[ ingredient = ls_demand-ingredient ] ).
|
||||
APPEND ls_demand-ingredient TO rt_missing.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD collect_orders.
|
||||
LOOP AT it_orders INTO DATA(ls_order).
|
||||
IF ls_order-quantity <= 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
READ TABLE ct_demand ASSIGNING FIELD-SYMBOL(<ls_demand>)
|
||||
WITH TABLE KEY ingredient = ls_order-ingredient.
|
||||
IF sy-subrc = 0.
|
||||
<ls_demand>-quantity = <ls_demand>-quantity + ls_order-quantity.
|
||||
ELSE.
|
||||
INSERT VALUE #( ingredient = ls_order-ingredient
|
||||
quantity = ls_order-quantity ) INTO TABLE ct_demand.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD collect_demand.
|
||||
DATA(lt_demand) = VALUE tt_demand( ).
|
||||
collect_orders( EXPORTING it_orders = it_orders
|
||||
CHANGING ct_demand = lt_demand ).
|
||||
rt_demand = lt_demand.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_master.
|
||||
LOOP AT it_catalogue INTO DATA(ls_catalogue).
|
||||
INSERT VALUE #( ingredient = ls_catalogue-ingredient
|
||||
pack_size = ls_catalogue-pack_size ) INTO TABLE rt_master.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD packs_needed.
|
||||
rv_packs = iv_quantity DIV iv_pack_size.
|
||||
IF iv_quantity MOD iv_pack_size <> 0.
|
||||
rv_packs = rv_packs + 1.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,73 @@
|
||||
CLASS ltc_canteen_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_canteen_plan.
|
||||
METHODS setup.
|
||||
METHODS merges_two_lists FOR TESTING.
|
||||
METHODS sorts_by_ingredient FOR TESTING.
|
||||
METHODS rounds_packs_up FOR TESTING.
|
||||
METHODS lists_unknown FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_canteen_planner IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}canteen_planner( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD merges_two_lists.
|
||||
DATA(lt_a) = VALUE {{p}}if_canteen_plan=>tt_order(
|
||||
( ingredient = 'FLOUR' quantity = 2 ) ).
|
||||
DATA(lt_b) = VALUE {{p}}if_canteen_plan=>tt_order(
|
||||
( ingredient = 'FLOUR' quantity = 3 ) ).
|
||||
|
||||
DATA(lt_demand) = mo_cut->merge_orders( it_orders_a = lt_a
|
||||
it_orders_b = lt_b ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_demand ) ).
|
||||
DATA lv_expected TYPE {{p}}if_canteen_plan=>ty_quantity.
|
||||
lv_expected = 5.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_expected
|
||||
act = lt_demand[ 1 ]-quantity ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorts_by_ingredient.
|
||||
DATA(lt_a) = VALUE {{p}}if_canteen_plan=>tt_order(
|
||||
( ingredient = 'SUGAR' quantity = 1 )
|
||||
( ingredient = 'FLOUR' quantity = 1 ) ).
|
||||
|
||||
DATA(lt_demand) = mo_cut->merge_orders(
|
||||
it_orders_a = lt_a
|
||||
it_orders_b = VALUE {{p}}if_canteen_plan=>tt_order( ) ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'FLOUR'
|
||||
act = lt_demand[ 1 ]-ingredient ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'SUGAR'
|
||||
act = lt_demand[ 2 ]-ingredient ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rounds_packs_up.
|
||||
DATA(lt_demand) = VALUE {{p}}if_canteen_plan=>tt_order(
|
||||
( ingredient = 'FLOUR' quantity = 25 ) ).
|
||||
DATA(lt_catalogue) = VALUE {{p}}if_canteen_plan=>tt_master(
|
||||
( ingredient = 'FLOUR' pack_size = 10 ) ).
|
||||
|
||||
DATA(lt_packs) = mo_cut->pack_requirement( it_demand = lt_demand
|
||||
it_catalogue = lt_catalogue ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_packs ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 3 act = lt_packs[ 1 ]-packs ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lists_unknown.
|
||||
DATA(lt_demand) = VALUE {{p}}if_canteen_plan=>tt_order(
|
||||
( ingredient = 'COCOA' quantity = 1 ) ).
|
||||
DATA(lt_catalogue) = VALUE {{p}}if_canteen_plan=>tt_master(
|
||||
( ingredient = 'FLOUR' pack_size = 10 ) ).
|
||||
|
||||
DATA(lt_missing) = mo_cut->missing_ingredients( it_demand = lt_demand
|
||||
it_catalogue = lt_catalogue ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_missing ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'COCOA' act = lt_missing[ 1 ] ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user