Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
71
tasks_gen/train/G1301/reference/harvest_evaluator.clas.abap
Normal file
71
tasks_gen/train/G1301/reference/harvest_evaluator.clas.abap
Normal file
@@ -0,0 +1,71 @@
|
||||
CLASS {{p}}harvest_evaluator DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS evaluate
|
||||
IMPORTING it_report TYPE {{p}}if_harvest=>tt_report
|
||||
it_member TYPE {{p}}if_harvest=>tt_member
|
||||
RETURNING VALUE(rt_result) TYPE {{p}}if_harvest=>tt_result.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_member_key TYPE HASHED TABLE OF {{p}}if_harvest=>ty_member
|
||||
WITH UNIQUE KEY member_id.
|
||||
TYPES tt_member_id TYPE SORTED TABLE OF {{p}}if_harvest=>ty_member_id
|
||||
WITH UNIQUE KEY table_line.
|
||||
TYPES tt_report_key TYPE SORTED TABLE OF {{p}}if_harvest=>ty_report
|
||||
WITH NON-UNIQUE KEY variety member_id.
|
||||
|
||||
METHODS countable_reports
|
||||
IMPORTING it_report TYPE {{p}}if_harvest=>tt_report
|
||||
it_member TYPE tt_member_key
|
||||
RETURNING VALUE(rt_report) TYPE tt_report_key.
|
||||
METHODS is_countable
|
||||
IMPORTING is_report TYPE {{p}}if_harvest=>ty_report
|
||||
it_member TYPE tt_member_key
|
||||
RETURNING VALUE(rv_count) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}harvest_evaluator IMPLEMENTATION.
|
||||
METHOD evaluate.
|
||||
DATA lt_member TYPE tt_member_key.
|
||||
lt_member = it_member.
|
||||
|
||||
DATA(lt_report) = countable_reports( it_report = it_report
|
||||
it_member = lt_member ).
|
||||
|
||||
DATA lt_result TYPE {{p}}if_harvest=>tt_result.
|
||||
DATA lt_member_id TYPE tt_member_id.
|
||||
LOOP AT lt_report ASSIGNING FIELD-SYMBOL(<ls_report>) GROUP BY <ls_report>-variety.
|
||||
DATA(lv_variety) = <ls_report>-variety.
|
||||
DATA(lv_total) = 0.
|
||||
CLEAR lt_member_id.
|
||||
LOOP AT GROUP <ls_report> ASSIGNING FIELD-SYMBOL(<ls_grouped>).
|
||||
lv_total = lv_total + <ls_grouped>-quantity_kg.
|
||||
INSERT <ls_grouped>-member_id INTO TABLE lt_member_id.
|
||||
ENDLOOP.
|
||||
APPEND VALUE {{p}}if_harvest=>ty_result(
|
||||
variety = lv_variety
|
||||
total_kg = lv_total
|
||||
member_count = lines( lt_member_id ) ) TO lt_result.
|
||||
ENDLOOP.
|
||||
|
||||
SORT lt_result BY total_kg DESCENDING variety ASCENDING.
|
||||
rt_result = lt_result.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD countable_reports.
|
||||
LOOP AT it_report INTO DATA(ls_report).
|
||||
IF is_countable( is_report = ls_report
|
||||
it_member = it_member ) = abap_false.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
INSERT ls_report INTO TABLE rt_report.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_countable.
|
||||
IF is_report-quantity_kg <= 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_count = xsdbool( line_exists( it_member[ member_id = is_report-member_id ] ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,84 @@
|
||||
CLASS ltc_harvest_evaluator DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}harvest_evaluator.
|
||||
METHODS setup.
|
||||
METHODS sums_quantities FOR TESTING.
|
||||
METHODS counts_members_once FOR TESTING.
|
||||
METHODS ignores_unknown_member FOR TESTING.
|
||||
METHODS ignores_zero_quantity FOR TESTING.
|
||||
METHODS sorts_by_total FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_harvest_evaluator IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}harvest_evaluator( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sums_quantities.
|
||||
DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member(
|
||||
( member_id = 'M00001' member_name = 'Hof Adler' ) ).
|
||||
DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report(
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 )
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 15 ) ).
|
||||
DATA(lt_result) = mo_cut->evaluate( it_report = lt_report
|
||||
it_member = lt_member ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 25 act = lt_result[ 1 ]-total_kg ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD counts_members_once.
|
||||
DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member(
|
||||
( member_id = 'M00001' member_name = 'Hof Adler' )
|
||||
( member_id = 'M00002' member_name = 'Hof Birke' ) ).
|
||||
DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report(
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 )
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 5 )
|
||||
( member_id = 'M00002' variety = 'RIES' quantity_kg = 5 ) ).
|
||||
DATA(lt_result) = mo_cut->evaluate( it_report = lt_report
|
||||
it_member = lt_member ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 20 act = lt_result[ 1 ]-total_kg ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-member_count ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ignores_unknown_member.
|
||||
DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member(
|
||||
( member_id = 'M00001' member_name = 'Hof Adler' ) ).
|
||||
DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report(
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 )
|
||||
( member_id = 'M00009' variety = 'RIES' quantity_kg = 99 ) ).
|
||||
DATA(lt_result) = mo_cut->evaluate( it_report = lt_report
|
||||
it_member = lt_member ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 10 act = lt_result[ 1 ]-total_kg ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_result[ 1 ]-member_count ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ignores_zero_quantity.
|
||||
DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member(
|
||||
( member_id = 'M00001' member_name = 'Hof Adler' ) ).
|
||||
DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report(
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 0 )
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 40 ) ).
|
||||
DATA(lt_result) = mo_cut->evaluate( it_report = lt_report
|
||||
it_member = lt_member ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 40 act = lt_result[ 1 ]-total_kg ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorts_by_total.
|
||||
DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member(
|
||||
( member_id = 'M00001' member_name = 'Hof Adler' )
|
||||
( member_id = 'M00002' member_name = 'Hof Birke' )
|
||||
( member_id = 'M00003' member_name = 'Hof Zeder' ) ).
|
||||
DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report(
|
||||
( member_id = 'M00001' variety = 'RIES' quantity_kg = 5 )
|
||||
( member_id = 'M00002' variety = 'SPAE' quantity_kg = 30 )
|
||||
( member_id = 'M00003' variety = 'SILV' quantity_kg = 20 ) ).
|
||||
DATA(lt_result) = mo_cut->evaluate( it_report = lt_report
|
||||
it_member = lt_member ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'SPAE' act = lt_result[ 1 ]-variety ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'SILV' act = lt_result[ 2 ]-variety ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'RIES' act = lt_result[ 3 ]-variety ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user