Harness: runner, generator, tasks T01 T13 T14 T15, CLAUDE.md
This commit is contained in:
104
tasks_gen/eval/G0002/reference/delivery_schedule.clas.abap
Normal file
104
tasks_gen/eval/G0002/reference/delivery_schedule.clas.abap
Normal file
@@ -0,0 +1,104 @@
|
||||
CLASS {{p}}delivery_schedule DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES ty_holidays TYPE STANDARD TABLE OF d WITH EMPTY KEY.
|
||||
|
||||
METHODS is_working_day
|
||||
IMPORTING iv_date TYPE d
|
||||
it_holidays TYPE ty_holidays
|
||||
RETURNING VALUE(rv_working) TYPE abap_bool.
|
||||
|
||||
METHODS next_working_day
|
||||
IMPORTING iv_date TYPE d
|
||||
it_holidays TYPE ty_holidays
|
||||
RETURNING VALUE(rv_date) TYPE d.
|
||||
|
||||
METHODS add_working_days
|
||||
IMPORTING iv_start TYPE d
|
||||
iv_days TYPE i
|
||||
it_holidays TYPE ty_holidays
|
||||
RETURNING VALUE(rv_date) TYPE d.
|
||||
|
||||
METHODS count_working_days
|
||||
IMPORTING iv_from TYPE d
|
||||
iv_to TYPE d
|
||||
it_holidays TYPE ty_holidays
|
||||
RETURNING VALUE(rv_count) TYPE i.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS c_reference_monday TYPE d VALUE '19000101'.
|
||||
|
||||
METHODS is_weekend
|
||||
IMPORTING iv_date TYPE d
|
||||
RETURNING VALUE(rv_weekend) TYPE abap_bool.
|
||||
|
||||
METHODS is_holiday
|
||||
IMPORTING iv_date TYPE d
|
||||
it_holidays TYPE ty_holidays
|
||||
RETURNING VALUE(rv_holiday) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}delivery_schedule IMPLEMENTATION.
|
||||
|
||||
METHOD is_working_day.
|
||||
rv_working = xsdbool( is_weekend( iv_date ) = abap_false
|
||||
AND is_holiday( iv_date = iv_date
|
||||
it_holidays = it_holidays ) = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD next_working_day.
|
||||
rv_date = iv_date.
|
||||
WHILE is_working_day( iv_date = rv_date
|
||||
it_holidays = it_holidays ) = abap_false.
|
||||
rv_date = rv_date + 1.
|
||||
ENDWHILE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_working_days.
|
||||
rv_date = iv_start.
|
||||
IF iv_days = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(lv_remaining) = iv_days.
|
||||
DATA(lv_step) = COND i( WHEN iv_days > 0 THEN 1 ELSE -1 ).
|
||||
WHILE lv_remaining <> 0.
|
||||
rv_date = rv_date + lv_step.
|
||||
IF is_working_day( iv_date = rv_date
|
||||
it_holidays = it_holidays ) = abap_true.
|
||||
lv_remaining = lv_remaining - lv_step.
|
||||
ENDIF.
|
||||
ENDWHILE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD count_working_days.
|
||||
rv_count = 0.
|
||||
DATA(lv_date) = iv_from.
|
||||
WHILE lv_date <= iv_to.
|
||||
IF is_working_day( iv_date = lv_date
|
||||
it_holidays = it_holidays ) = abap_true.
|
||||
rv_count = rv_count + 1.
|
||||
ENDIF.
|
||||
lv_date = lv_date + 1.
|
||||
ENDWHILE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_weekend.
|
||||
DATA(lv_days) = iv_date - c_reference_monday.
|
||||
rv_weekend = xsdbool( lv_days MOD 7 >= 5 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_holiday.
|
||||
rv_holiday = abap_false.
|
||||
LOOP AT it_holidays INTO DATA(lv_holiday).
|
||||
IF lv_holiday = iv_date.
|
||||
rv_holiday = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,72 @@
|
||||
CLASS ltc_delivery_schedule DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_fri_05 TYPE d VALUE '20240105',
|
||||
c_sat_06 TYPE d VALUE '20240106',
|
||||
c_sun_07 TYPE d VALUE '20240107',
|
||||
c_mon_08 TYPE d VALUE '20240108',
|
||||
c_tue_09 TYPE d VALUE '20240109',
|
||||
c_wed_10 TYPE d VALUE '20240110',
|
||||
c_thu_11 TYPE d VALUE '20240111',
|
||||
c_fri_12 TYPE d VALUE '20240112'.
|
||||
|
||||
DATA mo_cut TYPE REF TO {{p}}delivery_schedule.
|
||||
DATA mt_holidays TYPE {{p}}delivery_schedule=>ty_holidays.
|
||||
DATA mt_no_holidays TYPE {{p}}delivery_schedule=>ty_holidays.
|
||||
|
||||
METHODS setup.
|
||||
METHODS weekend_is_not_working FOR TESTING.
|
||||
METHODS holiday_is_not_working FOR TESTING.
|
||||
METHODS next_day_skips_weekend FOR TESTING.
|
||||
METHODS add_days_forward FOR TESTING.
|
||||
METHODS add_days_backward FOR TESTING.
|
||||
METHODS count_working_days FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_delivery_schedule IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}delivery_schedule( ).
|
||||
mt_holidays = VALUE #( ( c_tue_09 ) ( c_wed_10 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weekend_is_not_working.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = abap_false
|
||||
act = mo_cut->is_working_day( iv_date = c_sat_06 it_holidays = mt_no_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD holiday_is_not_working.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = abap_false
|
||||
act = mo_cut->is_working_day( iv_date = c_tue_09 it_holidays = mt_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD next_day_skips_weekend.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_mon_08
|
||||
act = mo_cut->next_working_day( iv_date = c_sun_07 it_holidays = mt_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_days_forward.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_thu_11
|
||||
act = mo_cut->add_working_days( iv_start = c_fri_05 iv_days = 2 it_holidays = mt_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_days_backward.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = c_fri_05
|
||||
act = mo_cut->add_working_days( iv_start = c_mon_08 iv_days = -1 it_holidays = mt_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD count_working_days.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 3
|
||||
act = mo_cut->count_working_days( iv_from = c_mon_08 iv_to = c_fri_12 it_holidays = mt_holidays ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user