Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
60
tasks_gen/train/G1136/reference/cx_job_error.clas.abap
Normal file
60
tasks_gen/train/G1136/reference/cx_job_error.clas.abap
Normal file
@@ -0,0 +1,60 @@
|
||||
CLASS {{p}}cx_job_error DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_reason TYPE c LENGTH 12.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_reason,
|
||||
no_job_id TYPE ty_reason VALUE 'NO_JOB_ID',
|
||||
bad_mode TYPE ty_reason VALUE 'BAD_MODE',
|
||||
bad_hours TYPE ty_reason VALUE 'BAD_HOURS',
|
||||
bad_count TYPE ty_reason VALUE 'BAD_COUNT',
|
||||
bad_group TYPE ty_reason VALUE 'BAD_GROUP',
|
||||
bad_date TYPE ty_reason VALUE 'BAD_DATE',
|
||||
bad_value TYPE ty_reason VALUE 'BAD_VALUE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING iv_reason TYPE ty_reason.
|
||||
|
||||
METHODS get_reason
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
|
||||
METHODS get_message
|
||||
RETURNING VALUE(rv_message) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mv_reason TYPE ty_reason.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}cx_job_error IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( ).
|
||||
mv_reason = iv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_reason.
|
||||
rv_reason = mv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_message.
|
||||
CASE mv_reason.
|
||||
WHEN c_reason-no_job_id.
|
||||
rv_message = 'The job ID is missing.'.
|
||||
WHEN c_reason-bad_mode.
|
||||
rv_message = 'The calculation mode is not valid.'.
|
||||
WHEN c_reason-bad_hours.
|
||||
rv_message = 'The work hours are not valid.'.
|
||||
WHEN c_reason-bad_count.
|
||||
rv_message = 'The part count is not valid.'.
|
||||
WHEN c_reason-bad_group.
|
||||
rv_message = 'The material group is not valid.'.
|
||||
WHEN c_reason-bad_date.
|
||||
rv_message = 'The due date is not valid.'.
|
||||
WHEN c_reason-bad_value.
|
||||
rv_message = 'The material value is not valid.'.
|
||||
WHEN OTHERS.
|
||||
rv_message = 'The job is not valid.'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
132
tasks_gen/train/G1136/reference/job_planner.clas.abap
Normal file
132
tasks_gen/train/G1136/reference/job_planner.clas.abap
Normal file
@@ -0,0 +1,132 @@
|
||||
CLASS {{p}}job_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_job,
|
||||
job_id TYPE c LENGTH 10,
|
||||
calc_mode TYPE c LENGTH 1,
|
||||
work_hours TYPE p LENGTH 5 DECIMALS 2,
|
||||
part_count TYPE i,
|
||||
mat_group TYPE c LENGTH 4,
|
||||
due_date TYPE d,
|
||||
net_value TYPE p LENGTH 11 DECIMALS 2,
|
||||
END OF ty_job.
|
||||
TYPES ty_cost TYPE p LENGTH 11 DECIMALS 2.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING is_job TYPE ty_job
|
||||
RAISING {{p}}cx_job_error.
|
||||
|
||||
METHODS calculate_cost
|
||||
IMPORTING is_job TYPE ty_job
|
||||
RETURNING VALUE(rv_cost) TYPE ty_cost
|
||||
RAISING {{p}}cx_job_error.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_mode TYPE c LENGTH 1.
|
||||
TYPES ty_group TYPE c LENGTH 4.
|
||||
|
||||
METHODS fail_with
|
||||
IMPORTING iv_reason TYPE {{p}}cx_job_error=>ty_reason
|
||||
RAISING {{p}}cx_job_error.
|
||||
|
||||
METHODS is_mode_valid
|
||||
IMPORTING iv_mode TYPE ty_mode
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
|
||||
METHODS is_hours_valid
|
||||
IMPORTING iv_hours TYPE ty_job-work_hours
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
|
||||
METHODS is_group_valid
|
||||
IMPORTING iv_group TYPE ty_group
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
|
||||
METHODS hour_rate
|
||||
IMPORTING iv_mode TYPE ty_mode
|
||||
RETURNING VALUE(rv_rate) TYPE ty_cost.
|
||||
|
||||
METHODS part_rate
|
||||
IMPORTING iv_group TYPE ty_group
|
||||
RETURNING VALUE(rv_rate) TYPE ty_cost.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}job_planner IMPLEMENTATION.
|
||||
METHOD validate.
|
||||
IF is_job-job_id IS INITIAL.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-no_job_id ).
|
||||
ENDIF.
|
||||
IF is_mode_valid( is_job-calc_mode ) = abap_false.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_mode ).
|
||||
ENDIF.
|
||||
IF is_hours_valid( is_job-work_hours ) = abap_false.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_hours ).
|
||||
ENDIF.
|
||||
IF is_job-part_count <= 0.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_count ).
|
||||
ENDIF.
|
||||
IF is_group_valid( is_job-mat_group ) = abap_false.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_group ).
|
||||
ENDIF.
|
||||
IF is_job-due_date IS INITIAL.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_date ).
|
||||
ENDIF.
|
||||
IF is_job-net_value < 0.
|
||||
fail_with( {{p}}cx_job_error=>c_reason-bad_value ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD calculate_cost.
|
||||
validate( is_job ).
|
||||
rv_cost = is_job-work_hours * hour_rate( is_job-calc_mode )
|
||||
+ is_job-part_count * part_rate( is_job-mat_group )
|
||||
+ is_job-net_value.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fail_with.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_job_error
|
||||
EXPORTING
|
||||
iv_reason = iv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_mode_valid.
|
||||
rv_valid = xsdbool( iv_mode = 'S' OR iv_mode = 'E' OR iv_mode = 'P' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_hours_valid.
|
||||
rv_valid = xsdbool( iv_hours > 0 AND iv_hours <= 100 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_group_valid.
|
||||
rv_valid = xsdbool( iv_group = 'ST' OR iv_group = 'AL'
|
||||
OR iv_group = 'PL' OR iv_group = 'WD' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD hour_rate.
|
||||
CASE iv_mode.
|
||||
WHEN 'S'.
|
||||
rv_rate = '60.00'.
|
||||
WHEN 'E'.
|
||||
rv_rate = '90.00'.
|
||||
WHEN 'P'.
|
||||
rv_rate = '75.00'.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD part_rate.
|
||||
CASE iv_group.
|
||||
WHEN 'ST'.
|
||||
rv_rate = '12.50'.
|
||||
WHEN 'AL'.
|
||||
rv_rate = '8.00'.
|
||||
WHEN 'PL'.
|
||||
rv_rate = '3.50'.
|
||||
WHEN 'WD'.
|
||||
rv_rate = '5.00'.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
95
tasks_gen/train/G1136/reference/job_planner.testclasses.abap
Normal file
95
tasks_gen/train/G1136/reference/job_planner.testclasses.abap
Normal file
@@ -0,0 +1,95 @@
|
||||
CLASS ltc_job_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}job_planner.
|
||||
|
||||
METHODS setup.
|
||||
METHODS valid_job RETURNING VALUE(rs_job) TYPE {{p}}job_planner=>ty_job.
|
||||
|
||||
METHODS standard_cost FOR TESTING.
|
||||
METHODS express_cost FOR TESTING.
|
||||
METHODS missing_id FOR TESTING.
|
||||
METHODS bad_hours FOR TESTING.
|
||||
METHODS bad_group FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_job_planner IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}job_planner( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_job.
|
||||
rs_job = VALUE #( job_id = 'JOB-1000'
|
||||
calc_mode = 'S'
|
||||
work_hours = '10.00'
|
||||
part_count = 4
|
||||
mat_group = 'ST'
|
||||
due_date = '20250601'
|
||||
net_value = '100.00' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD standard_cost.
|
||||
DATA lv_exp TYPE {{p}}job_planner=>ty_cost.
|
||||
lv_exp = '750.00'.
|
||||
TRY.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp
|
||||
act = mo_cut->calculate_cost( valid_job( ) ) ).
|
||||
CATCH {{p}}cx_job_error.
|
||||
cl_abap_unit_assert=>fail( `unexpected exception` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD express_cost.
|
||||
DATA ls_job TYPE {{p}}job_planner=>ty_job.
|
||||
DATA lv_exp TYPE {{p}}job_planner=>ty_cost.
|
||||
ls_job = valid_job( ).
|
||||
ls_job-calc_mode = 'E'.
|
||||
ls_job-work_hours = '2.50'.
|
||||
ls_job-part_count = 2.
|
||||
ls_job-mat_group = 'AL'.
|
||||
ls_job-net_value = 0.
|
||||
lv_exp = '241.00'.
|
||||
TRY.
|
||||
cl_abap_unit_assert=>assert_equals( exp = lv_exp
|
||||
act = mo_cut->calculate_cost( ls_job ) ).
|
||||
CATCH {{p}}cx_job_error.
|
||||
cl_abap_unit_assert=>fail( `unexpected exception` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD missing_id.
|
||||
DATA(ls_job) = valid_job( ).
|
||||
ls_job-job_id = ''.
|
||||
TRY.
|
||||
mo_cut->validate( ls_job ).
|
||||
cl_abap_unit_assert=>fail( `NO_JOB_ID expected` ).
|
||||
CATCH {{p}}cx_job_error INTO DATA(lx_error).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-no_job_id
|
||||
act = lx_error->get_reason( ) ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_hours.
|
||||
DATA(ls_job) = valid_job( ).
|
||||
ls_job-work_hours = '101.00'.
|
||||
TRY.
|
||||
mo_cut->validate( ls_job ).
|
||||
cl_abap_unit_assert=>fail( `BAD_HOURS expected` ).
|
||||
CATCH {{p}}cx_job_error INTO DATA(lx_error).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_hours
|
||||
act = lx_error->get_reason( ) ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_group.
|
||||
DATA(ls_job) = valid_job( ).
|
||||
ls_job-mat_group = 'XY'.
|
||||
TRY.
|
||||
mo_cut->calculate_cost( ls_job ).
|
||||
cl_abap_unit_assert=>fail( `BAD_GROUP expected` ).
|
||||
CATCH {{p}}cx_job_error INTO DATA(lx_error).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_job_error=>c_reason-bad_group
|
||||
act = lx_error->get_reason( ) ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user