Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
75
tasks_gen/train/G1084/reference/seed_lot_checker.clas.abap
Normal file
75
tasks_gen/train/G1084/reference/seed_lot_checker.clas.abap
Normal file
@@ -0,0 +1,75 @@
|
||||
CLASS {{p}}seed_lot_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_lot,
|
||||
lot_no TYPE c LENGTH 10,
|
||||
germination TYPE i,
|
||||
moisture TYPE p LENGTH 4 DECIMALS 1,
|
||||
harvest_date TYPE d,
|
||||
END OF ty_lot.
|
||||
|
||||
METHODS check_lot
|
||||
IMPORTING is_lot TYPE ty_lot
|
||||
iv_check_date TYPE d
|
||||
RAISING {{p}}cx_seed_lot.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_germination TYPE i VALUE 85,
|
||||
c_max_moisture TYPE p LENGTH 4 DECIMALS 1 VALUE '12.0',
|
||||
c_max_age_days TYPE i VALUE 365.
|
||||
|
||||
METHODS check_lot_no
|
||||
IMPORTING is_lot TYPE ty_lot
|
||||
RAISING {{p}}cx_seed_lot.
|
||||
METHODS check_harvest_date
|
||||
IMPORTING is_lot TYPE ty_lot
|
||||
iv_check_date TYPE d
|
||||
RAISING {{p}}cx_seed_lot.
|
||||
METHODS check_germination
|
||||
IMPORTING is_lot TYPE ty_lot
|
||||
RAISING {{p}}cx_seed_lot.
|
||||
METHODS check_moisture
|
||||
IMPORTING is_lot TYPE ty_lot
|
||||
RAISING {{p}}cx_seed_lot.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}seed_lot_checker IMPLEMENTATION.
|
||||
METHOD check_lot.
|
||||
check_lot_no( is_lot ).
|
||||
check_harvest_date( is_lot = is_lot iv_check_date = iv_check_date ).
|
||||
check_germination( is_lot ).
|
||||
check_moisture( is_lot ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_lot_no.
|
||||
DATA(lv_letters) = substring( val = is_lot-lot_no len = 4 ).
|
||||
DATA(lv_digits) = substring( val = is_lot-lot_no off = 4 len = 6 ).
|
||||
IF lv_letters CN 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' OR lv_digits CN '0123456789'.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_lot_format.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_harvest_date.
|
||||
IF is_lot-harvest_date IS INITIAL.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_lot_date.
|
||||
ENDIF.
|
||||
DATA(lv_age_in_days) = iv_check_date - is_lot-harvest_date.
|
||||
IF lv_age_in_days < 0 OR lv_age_in_days > c_max_age_days.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_lot_date.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_germination.
|
||||
IF is_lot-germination < c_min_germination.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_lot_germination.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_moisture.
|
||||
IF is_lot-moisture > c_max_moisture.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_lot_moisture.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,109 @@
|
||||
CLASS ltc_seed_lot_checker DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_check_date TYPE d VALUE '20250601'.
|
||||
DATA mo_cut TYPE REF TO {{p}}seed_lot_checker.
|
||||
METHODS setup.
|
||||
METHODS valid_lot
|
||||
RETURNING VALUE(rs_lot) TYPE {{p}}seed_lot_checker=>ty_lot.
|
||||
METHODS releases_valid_lot FOR TESTING.
|
||||
METHODS rejects_bad_lot_no FOR TESTING.
|
||||
METHODS rejects_old_harvest FOR TESTING.
|
||||
METHODS rejects_low_germination FOR TESTING.
|
||||
METHODS rejects_high_moisture FOR TESTING.
|
||||
METHODS accepts_limit_values FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_seed_lot_checker IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}seed_lot_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_lot.
|
||||
rs_lot = VALUE #( lot_no = 'WHEA123456'
|
||||
germination = 90
|
||||
moisture = '11.0'
|
||||
harvest_date = '20250501' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD releases_valid_lot.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = valid_lot( ) iv_check_date = c_check_date ).
|
||||
CATCH {{p}}cx_seed_lot INTO DATA(lo_ex).
|
||||
cl_abap_unit_assert=>fail( msg = lo_ex->get_message( ) ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_bad_lot_no.
|
||||
DATA(ls_lot) = valid_lot( ).
|
||||
ls_lot-lot_no = 'AB12345678'.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ).
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_FORMAT expected` ).
|
||||
CATCH {{p}}cx_lot_format INTO DATA(lo_format).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'The lot number has an invalid format.'
|
||||
act = lo_format->get_message( ) ).
|
||||
CATCH {{p}}cx_seed_lot.
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_FORMAT expected` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_old_harvest.
|
||||
DATA(ls_lot) = valid_lot( ).
|
||||
ls_lot-harvest_date = '20240531'.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ).
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_DATE expected` ).
|
||||
CATCH {{p}}cx_lot_date INTO DATA(lo_date).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'The harvest date is not valid for the release check.'
|
||||
act = lo_date->get_message( ) ).
|
||||
CATCH {{p}}cx_seed_lot.
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_DATE expected` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_low_germination.
|
||||
DATA(ls_lot) = valid_lot( ).
|
||||
ls_lot-germination = 84.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ).
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_GERMINATION expected` ).
|
||||
CATCH {{p}}cx_lot_germination INTO DATA(lo_germ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'The germination rate is below the minimum of 85 percent.'
|
||||
act = lo_germ->get_message( ) ).
|
||||
CATCH {{p}}cx_seed_lot.
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_GERMINATION expected` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_high_moisture.
|
||||
DATA(ls_lot) = valid_lot( ).
|
||||
ls_lot-moisture = '12.1'.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ).
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_MOISTURE expected` ).
|
||||
CATCH {{p}}cx_lot_moisture INTO DATA(lo_moist).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'The moisture is above the maximum of 12.0 percent.'
|
||||
act = lo_moist->get_message( ) ).
|
||||
CATCH {{p}}cx_seed_lot.
|
||||
cl_abap_unit_assert=>fail( msg = `CX_LOT_MOISTURE expected` ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD accepts_limit_values.
|
||||
DATA(ls_lot) = valid_lot( ).
|
||||
ls_lot-germination = 85.
|
||||
ls_lot-moisture = '12.0'.
|
||||
ls_lot-harvest_date = '20240601'.
|
||||
TRY.
|
||||
mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ).
|
||||
CATCH {{p}}cx_seed_lot INTO DATA(lo_ex).
|
||||
cl_abap_unit_assert=>fail( msg = lo_ex->get_message( ) ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user