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:
84
tasks_gen/eval/G0119/reference/workload_planner.clas.abap
Normal file
84
tasks_gen/eval/G0119/reference/workload_planner.clas.abap
Normal file
@@ -0,0 +1,84 @@
|
||||
CLASS {{p}}workload_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_job,
|
||||
job_id TYPE c LENGTH 10,
|
||||
mechanic TYPE c LENGTH 8,
|
||||
work_hours TYPE i,
|
||||
start_date TYPE c LENGTH 8,
|
||||
END OF ty_job,
|
||||
tt_job TYPE STANDARD TABLE OF ty_job WITH EMPTY KEY,
|
||||
BEGIN OF ty_workload,
|
||||
mechanic TYPE c LENGTH 8,
|
||||
job_count TYPE i,
|
||||
total_hours TYPE i,
|
||||
first_date TYPE c LENGTH 8,
|
||||
END OF ty_workload,
|
||||
tt_workload TYPE STANDARD TABLE OF ty_workload WITH EMPTY KEY.
|
||||
|
||||
METHODS summarize
|
||||
IMPORTING it_jobs TYPE tt_job
|
||||
RETURNING VALUE(rt_workload) TYPE tt_workload.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
ty_date TYPE c LENGTH 8,
|
||||
tt_workload_hashed TYPE HASHED TABLE OF ty_workload WITH UNIQUE KEY mechanic.
|
||||
|
||||
METHODS is_relevant
|
||||
IMPORTING is_job TYPE ty_job
|
||||
RETURNING VALUE(rv_relevant) TYPE abap_bool.
|
||||
|
||||
METHODS add_job
|
||||
IMPORTING is_job TYPE ty_job
|
||||
CHANGING ct_workload TYPE tt_workload_hashed.
|
||||
|
||||
METHODS is_date_set
|
||||
IMPORTING iv_date TYPE ty_date
|
||||
RETURNING VALUE(rv_set) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}workload_planner IMPLEMENTATION.
|
||||
METHOD summarize.
|
||||
DATA lt_workload TYPE tt_workload_hashed.
|
||||
LOOP AT it_jobs INTO DATA(ls_job).
|
||||
IF is_relevant( ls_job ) = abap_true.
|
||||
add_job( EXPORTING is_job = ls_job
|
||||
CHANGING ct_workload = lt_workload ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
rt_workload = lt_workload.
|
||||
SORT rt_workload BY mechanic.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_relevant.
|
||||
rv_relevant = xsdbool( is_job-job_id IS NOT INITIAL
|
||||
AND is_job-mechanic IS NOT INITIAL
|
||||
AND is_job-work_hours > 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_job.
|
||||
ASSIGN ct_workload[ mechanic = is_job-mechanic ] TO FIELD-SYMBOL(<ls_workload>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT VALUE #( mechanic = is_job-mechanic
|
||||
job_count = 1
|
||||
total_hours = is_job-work_hours
|
||||
first_date = COND #( WHEN is_date_set( is_job-start_date )
|
||||
THEN is_job-start_date ) )
|
||||
INTO TABLE ct_workload ASSIGNING <ls_workload>.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
<ls_workload>-job_count = <ls_workload>-job_count + 1.
|
||||
<ls_workload>-total_hours = <ls_workload>-total_hours + is_job-work_hours.
|
||||
IF is_date_set( is_job-start_date ) = abap_true
|
||||
AND ( <ls_workload>-first_date IS INITIAL
|
||||
OR is_job-start_date < <ls_workload>-first_date ).
|
||||
<ls_workload>-first_date = is_job-start_date.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_date_set.
|
||||
rv_set = xsdbool( iv_date IS NOT INITIAL AND iv_date <> '00000000' ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,85 @@
|
||||
CLASS ltc_workload_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
ty_mechanic TYPE c LENGTH 8,
|
||||
ty_date TYPE c LENGTH 8.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}workload_planner.
|
||||
|
||||
METHODS setup.
|
||||
METHODS empty_input FOR TESTING.
|
||||
METHODS one_mechanic FOR TESTING.
|
||||
METHODS sorted_by_mechanic FOR TESTING.
|
||||
METHODS ignores_invalid_jobs FOR TESTING.
|
||||
METHODS keeps_earliest_date FOR TESTING.
|
||||
|
||||
METHODS add_job
|
||||
IMPORTING iv_mechanic TYPE ty_mechanic
|
||||
iv_hours TYPE i
|
||||
iv_date TYPE ty_date
|
||||
CHANGING ct_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_workload_planner IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}workload_planner( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_job.
|
||||
INSERT VALUE #( job_id = 'JOB'
|
||||
mechanic = iv_mechanic
|
||||
work_hours = iv_hours
|
||||
start_date = iv_date )
|
||||
INTO TABLE ct_jobs.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_input.
|
||||
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
cl_abap_unit_assert=>assert_initial( act = mo_cut->summarize( it_jobs = lt_jobs ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD one_mechanic.
|
||||
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 4 iv_date = '20250110'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 6 iv_date = '20250112'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-job_count ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 10 act = lt_result[ 1 ]-total_hours ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = '20250110' act = lt_result[ 1 ]-first_date ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sorted_by_mechanic.
|
||||
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
add_job( EXPORTING iv_mechanic = 'M2' iv_hours = 1 iv_date = '20250110'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250110'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'M1' act = lt_result[ 1 ]-mechanic ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'M2' act = lt_result[ 2 ]-mechanic ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ignores_invalid_jobs.
|
||||
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
DATA lv_empty TYPE ty_mechanic.
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 0 iv_date = '20250110'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
add_job( EXPORTING iv_mechanic = lv_empty iv_hours = 5 iv_date = '20250110'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
cl_abap_unit_assert=>assert_initial( act = mo_cut->summarize( it_jobs = lt_jobs ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD keeps_earliest_date.
|
||||
DATA lt_jobs TYPE {{p}}workload_planner=>tt_job.
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250201'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
add_job( EXPORTING iv_mechanic = 'M1' iv_hours = 1 iv_date = '20250101'
|
||||
CHANGING ct_jobs = lt_jobs ).
|
||||
DATA(lt_result) = mo_cut->summarize( it_jobs = lt_jobs ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = '20250101' act = lt_result[ 1 ]-first_date ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user