Generator: pilot analysis and fixes; G0002-G0021 tasks; handover notes merged
- Static bundle checks (name length, seed type, reserved words, contract test classes, testclasses_file), local abaplint parser check before SAP, max_tokens, robust JSON parse - Runner: G2 for CDS views with parameters, contract_check detail in report - G0020 and G0013 fixed by review and revalidated (oracle 100, null 0) - Pilot results in docs/faz1-tasarim.md 11e; handover notes merged into CLAUDE.md and docs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
25
tasks_gen/eval/G0010/generation.json
Normal file
25
tasks_gen/eval/G0010/generation.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"id": "G0010",
|
||||
"pool": "eval",
|
||||
"object_type": "CLAS",
|
||||
"category": "C",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 0,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "bundle",
|
||||
"errors": [
|
||||
"invalid JSON: Extra data: line 1 column 24591 (char 24590)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
173
tasks_gen/eval/G0010/hidden/t02_hidden.clas.abap
Normal file
173
tasks_gen/eval/G0010/hidden/t02_hidden.clas.abap
Normal file
@@ -0,0 +1,173 @@
|
||||
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
|
||||
METHODS setup.
|
||||
METHODS all_ok FOR TESTING.
|
||||
METHODS shortage_is_reported FOR TESTING.
|
||||
METHODS stock_used_in_order FOR TESTING.
|
||||
METHODS negative_stock_ignored FOR TESTING.
|
||||
METHODS zero_requirement_invalid FOR TESTING.
|
||||
METHODS negative_req_invalid FOR TESTING.
|
||||
METHODS missing_stock_is_short FOR TESTING.
|
||||
METHODS case_and_blanks_ignored FOR TESTING.
|
||||
METHODS stock_items_are_summed FOR TESTING.
|
||||
METHODS no_requirements FOR TESTING.
|
||||
METHODS shortages_filter_sort FOR TESTING.
|
||||
METHODS shortages_empty_all_ok FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t02_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}stock_cover_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD all_ok.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 100 )
|
||||
( material = 'MAT-B' plant = 'P1' quantity = 50 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 30 )
|
||||
( material = 'MAT-B' plant = 'P1' required = 50 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 30 available = 100 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-B' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortage_is_reported.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 30 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 50 available = 30 shortage = 20 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stock_used_in_order.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 100 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 60 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 60 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 60 available = 100 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 60 available = 40 shortage = 20 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_stock_ignored.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 100 )
|
||||
( material = 'MAT-A' plant = 'P1' quantity = -40 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 100 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 100 available = 100 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_requirement_invalid.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 available = 50 shortage = 0 status = 'INVALID' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_req_invalid.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = -10 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = -10 available = 50 shortage = 0 status = 'INVALID' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD missing_stock_is_short.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-X' plant = 'P9' required = 25 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-X' plant = 'P9' required = 25 available = 0 shortage = 25 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD case_and_blanks_ignored.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'mat-a' plant = 'p1' quantity = 80 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = ' MAT-A ' plant = 'P1 ' required = 80 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = ' MAT-A ' plant = 'P1 ' required = 80 available = 80 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stock_items_are_summed.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 10 )
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 20 )
|
||||
( material = 'MAT-A' plant = 'P2' quantity = 5 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 30 )
|
||||
( material = 'MAT-A' plant = 'P2' required = 5 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 30 available = 30 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-A' plant = 'P2' required = 5 available = 5 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD no_requirements.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ).
|
||||
DATA(lt_act) = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortages_filter_sort.
|
||||
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
|
||||
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
|
||||
( material = 'MAT-D' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
|
||||
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortages_empty_all_ok.
|
||||
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( mo_cut->shortages( lt_in ) ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
128
tasks_gen/eval/G0010/reference/stock_cover_checker.clas.abap
Normal file
128
tasks_gen/eval/G0010/reference/stock_cover_checker.clas.abap
Normal file
@@ -0,0 +1,128 @@
|
||||
CLASS {{p}}stock_cover_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_stock_cover.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_stock,
|
||||
material TYPE {{p}}if_stock_cover=>ty_material,
|
||||
plant TYPE {{p}}if_stock_cover=>ty_plant,
|
||||
remaining TYPE {{p}}if_stock_cover=>ty_quantity,
|
||||
END OF ty_stock.
|
||||
TYPES tt_stock TYPE HASHED TABLE OF ty_stock WITH UNIQUE KEY material plant.
|
||||
|
||||
METHODS aggregate
|
||||
IMPORTING it_stock TYPE {{p}}if_stock_cover=>tt_stock_item
|
||||
RETURNING VALUE(rt_stock) TYPE tt_stock.
|
||||
|
||||
METHODS free_quantity
|
||||
IMPORTING it_stock TYPE tt_stock
|
||||
iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
RETURNING VALUE(rv_quantity) TYPE {{p}}if_stock_cover=>ty_quantity.
|
||||
|
||||
METHODS consume
|
||||
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
iv_quantity TYPE {{p}}if_stock_cover=>ty_quantity
|
||||
CHANGING ct_stock TYPE tt_stock.
|
||||
|
||||
METHODS normalize_material
|
||||
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
RETURNING VALUE(rv_material) TYPE {{p}}if_stock_cover=>ty_material.
|
||||
|
||||
METHODS normalize_plant
|
||||
IMPORTING iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
RETURNING VALUE(rv_plant) TYPE {{p}}if_stock_cover=>ty_plant.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}stock_cover_checker IMPLEMENTATION.
|
||||
METHOD {{p}}if_stock_cover~check.
|
||||
DATA(lt_stock) = aggregate( it_stock ).
|
||||
|
||||
LOOP AT it_requirement INTO DATA(ls_requirement).
|
||||
DATA(lv_free) = free_quantity( it_stock = lt_stock
|
||||
iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant ).
|
||||
DATA(ls_result) = VALUE {{p}}if_stock_cover=>ty_result(
|
||||
material = ls_requirement-material
|
||||
plant = ls_requirement-plant
|
||||
required = ls_requirement-required
|
||||
available = lv_free ).
|
||||
|
||||
IF ls_requirement-required <= 0.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-invalid.
|
||||
ELSEIF lv_free >= ls_requirement-required.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-ok.
|
||||
consume( EXPORTING iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant
|
||||
iv_quantity = ls_requirement-required
|
||||
CHANGING ct_stock = lt_stock ).
|
||||
ELSE.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-short.
|
||||
ls_result-shortage = ls_requirement-required - lv_free.
|
||||
consume( EXPORTING iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant
|
||||
iv_quantity = lv_free
|
||||
CHANGING ct_stock = lt_stock ).
|
||||
ENDIF.
|
||||
|
||||
APPEND ls_result TO rt_result.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD {{p}}if_stock_cover~shortages.
|
||||
rt_shortage = it_result.
|
||||
DELETE rt_shortage WHERE status <> {{p}}if_stock_cover=>c_status-short.
|
||||
SORT rt_shortage BY material plant.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD aggregate.
|
||||
LOOP AT it_stock INTO DATA(ls_stock).
|
||||
IF ls_stock-quantity < 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
DATA(lv_material) = normalize_material( ls_stock-material ).
|
||||
DATA(lv_plant) = normalize_plant( ls_stock-plant ).
|
||||
ASSIGN rt_stock[ material = lv_material plant = lv_plant ] TO FIELD-SYMBOL(<ls_stock_sum>).
|
||||
IF sy-subrc = 0.
|
||||
<ls_stock_sum>-remaining = <ls_stock_sum>-remaining + ls_stock-quantity.
|
||||
ELSE.
|
||||
INSERT VALUE #( material = lv_material
|
||||
plant = lv_plant
|
||||
remaining = ls_stock-quantity ) INTO TABLE rt_stock.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD free_quantity.
|
||||
ASSIGN it_stock[ material = normalize_material( iv_material )
|
||||
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
|
||||
IF sy-subrc = 0.
|
||||
rv_quantity = <ls_stock>-remaining.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD consume.
|
||||
ASSIGN ct_stock[ material = normalize_material( iv_material )
|
||||
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
|
||||
IF sy-subrc = 0.
|
||||
<ls_stock>-remaining = <ls_stock>-remaining - iv_quantity.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize_material.
|
||||
DATA lv_text TYPE string.
|
||||
lv_text = iv_material.
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
|
||||
rv_material = to_upper( lv_text ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize_plant.
|
||||
DATA lv_text TYPE string.
|
||||
lv_text = iv_plant.
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
|
||||
rv_plant = to_upper( lv_text ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,93 @@
|
||||
CLASS ltc_stock_cover DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
|
||||
METHODS setup.
|
||||
METHODS covered_req_is_ok FOR TESTING.
|
||||
METHODS shortage_is_reported FOR TESTING.
|
||||
METHODS stock_shared_in_order FOR TESTING.
|
||||
METHODS invalid_req_keeps_stock FOR TESTING.
|
||||
METHODS blanks_and_case_ignored FOR TESTING.
|
||||
METHODS shortages_are_sorted FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_stock_cover IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}stock_cover_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD covered_req_is_ok.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 40 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 40 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 40 available = 40 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortage_is_reported.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 5 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 12 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 12 available = 5 shortage = 7 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stock_shared_in_order.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 available = 10 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 available = 4 shortage = 2 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_req_keeps_stock.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 9 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 9 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 available = 9 shortage = 0 status = 'INVALID' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 9 available = 9 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD blanks_and_case_ignored.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'mat-a' plant = 'p1' quantity = 7 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = ' MAT-A ' plant = 'P1' required = 7 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = ' MAT-A ' plant = 'P1' required = 7 available = 7 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortages_are_sorted.
|
||||
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 1 available = 1 shortage = 0 status = 'OK' ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
46
tasks_gen/eval/G0010/seed/if_stock_cover.intf.abap
Normal file
46
tasks_gen/eval/G0010/seed/if_stock_cover.intf.abap
Normal file
@@ -0,0 +1,46 @@
|
||||
INTERFACE {{p}}if_stock_cover PUBLIC.
|
||||
TYPES ty_material TYPE c LENGTH 18.
|
||||
TYPES ty_plant TYPE c LENGTH 4.
|
||||
TYPES ty_quantity TYPE p LENGTH 13 DECIMALS 3.
|
||||
TYPES ty_status TYPE c LENGTH 10.
|
||||
|
||||
TYPES: BEGIN OF ty_stock_item,
|
||||
material TYPE ty_material,
|
||||
plant TYPE ty_plant,
|
||||
quantity TYPE ty_quantity,
|
||||
END OF ty_stock_item.
|
||||
TYPES tt_stock_item TYPE STANDARD TABLE OF ty_stock_item WITH EMPTY KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_requirement,
|
||||
material TYPE ty_material,
|
||||
plant TYPE ty_plant,
|
||||
required TYPE ty_quantity,
|
||||
END OF ty_requirement.
|
||||
TYPES tt_requirement TYPE STANDARD TABLE OF ty_requirement WITH EMPTY KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_result,
|
||||
material TYPE ty_material,
|
||||
plant TYPE ty_plant,
|
||||
required TYPE ty_quantity,
|
||||
available TYPE ty_quantity,
|
||||
shortage TYPE ty_quantity,
|
||||
status TYPE ty_status,
|
||||
END OF ty_result.
|
||||
TYPES tt_result TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_status,
|
||||
ok TYPE ty_status VALUE 'OK',
|
||||
short TYPE ty_status VALUE 'SHORT',
|
||||
invalid TYPE ty_status VALUE 'INVALID',
|
||||
END OF c_status.
|
||||
|
||||
METHODS check
|
||||
IMPORTING it_stock TYPE tt_stock_item
|
||||
it_requirement TYPE tt_requirement
|
||||
RETURNING VALUE(rt_result) TYPE tt_result.
|
||||
|
||||
METHODS shortages
|
||||
IMPORTING it_result TYPE tt_result
|
||||
RETURNING VALUE(rt_shortage) TYPE tt_result.
|
||||
ENDINTERFACE.
|
||||
70
tasks_gen/eval/G0010/spec.md
Normal file
70
tasks_gen/eval/G0010/spec.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# 1. Goal
|
||||
A warehouse planner checks if the free stock covers the requirements of a
|
||||
production run. The planner sends a list of stock items and a list of
|
||||
requirements to a class. The class returns one result row for each requirement.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The interface {{P}}IF_STOCK_COVER exists in package $TMP. It is active.
|
||||
- The interface contains the types TY_MATERIAL (CHAR 18), TY_PLANT (CHAR 4),
|
||||
TY_QUANTITY (PACKED 13, 3) and TY_STATUS (CHAR 10).
|
||||
- The interface contains the structures TY_STOCK_ITEM, TY_REQUIREMENT and
|
||||
TY_RESULT and the table types TT_STOCK_ITEM, TT_REQUIREMENT and TT_RESULT.
|
||||
- The interface contains the constant structure C_STATUS with the values OK,
|
||||
SHORT and INVALID.
|
||||
- The interface has the method CHECK. It imports a stock table and a requirement
|
||||
table and returns a result table.
|
||||
- The interface has the method SHORTAGES. It imports a result table and returns a
|
||||
result table.
|
||||
|
||||
# 4. Contract
|
||||
- Create the class {{P}}STOCK_COVER_CHECKER in package $TMP.
|
||||
- The class is public and final.
|
||||
- The class implements {{P}}IF_STOCK_COVER.
|
||||
- Do not add other public methods.
|
||||
- The hidden tests create the class with NEW {{P}}STOCK_COVER_CHECKER( ).
|
||||
|
||||
# 5. Business rules
|
||||
|
||||
## Stock
|
||||
1. Each stock item has a material, a plant and a quantity. Ignore every stock
|
||||
item whose quantity is less than zero.
|
||||
2. Sum the quantities of the remaining stock items for each combination of
|
||||
material and plant. This sum is the free stock of the material and plant.
|
||||
3. Compare material and plant without regard to case. Remove all blanks before
|
||||
you compare them.
|
||||
|
||||
## Requirements
|
||||
4. Process the requirements in the given sequence. The result contains one row
|
||||
for each requirement in the same sequence.
|
||||
5. The available quantity of a requirement is the free stock of its material and
|
||||
plant at the time of the requirement. If no stock exists for the material and
|
||||
plant, the available quantity is 0.
|
||||
6. If the required quantity is less than or equal to 0, the status is INVALID.
|
||||
The requirement does not use free stock. The shortage is 0.
|
||||
7. Else if the available quantity is greater than or equal to the required
|
||||
quantity, the status is OK. The shortage is 0. The requirement uses the
|
||||
required quantity of the free stock.
|
||||
8. Else the status is SHORT. The requirement uses all free stock. The shortage is
|
||||
the required quantity minus the available quantity.
|
||||
|
||||
## Result
|
||||
9. A result row contains the material and the plant of the requirement without a
|
||||
change, the required quantity, the available quantity, the shortage and the
|
||||
status.
|
||||
10. The method SHORTAGES returns all rows of the result table whose status is
|
||||
SHORT. Sort these rows by material in ascending order and then by plant in
|
||||
ascending order. The result can be empty.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 8.16 (SAP_BASIS 816).
|
||||
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
||||
variables. No comment that restates the code.
|
||||
- Out of scope: do not change {{P}}IF_STOCK_COVER.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
52
tasks_gen/eval/G0010/task.json
Normal file
52
tasks_gen/eval/G0010/task.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"id": "G0010",
|
||||
"category": "C",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 50,
|
||||
"max_activations": 12
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "INTF",
|
||||
"name": "{{P}}IF_STOCK_COVER",
|
||||
"file": "seed/if_stock_cover.intf.abap",
|
||||
"description": "Stock cover interface with types, constants and two methods"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}STOCK_COVER_CHECKER",
|
||||
"implements": "{{P}}IF_STOCK_COVER"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}IF_STOCK_COVER"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T02_HIDDEN",
|
||||
"file": "hidden/t02_hidden.clas.abap",
|
||||
"description": "T02 hidden tests for the stock cover checker"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}STOCK_COVER_CHECKER",
|
||||
"file": "reference/stock_cover_checker.clas.abap",
|
||||
"description": "Stock cover checker with hashed stock table",
|
||||
"testclasses_file": "reference/stock_cover_checker.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"table_kind",
|
||||
"access_path",
|
||||
"method_length"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user