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:
59
tasks_gen/train/G1310/reference/credit_checker.clas.abap
Normal file
59
tasks_gen/train/G1310/reference/credit_checker.clas.abap
Normal file
@@ -0,0 +1,59 @@
|
||||
CLASS {{p}}credit_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_credit_check.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_income_factor TYPE i VALUE 3.
|
||||
CONSTANTS c_plan_reduction TYPE {{p}}if_credit_check=>ty_amount VALUE '500.00'.
|
||||
CONSTANTS c_min_age TYPE i VALUE 18.
|
||||
CONSTANTS c_full_limit_age TYPE i VALUE 21.
|
||||
CONSTANTS c_max_open_plans TYPE i VALUE 2.
|
||||
CONSTANTS c_hundred TYPE i VALUE 100.
|
||||
|
||||
METHODS credit_limit_cents
|
||||
IMPORTING iv_age TYPE i
|
||||
iv_income TYPE {{p}}if_credit_check=>ty_amount
|
||||
iv_open_plans TYPE i
|
||||
RETURNING VALUE(rv_cents) TYPE i.
|
||||
METHODS to_cents
|
||||
IMPORTING iv_amount TYPE {{p}}if_credit_check=>ty_amount
|
||||
RETURNING VALUE(rv_cents) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}credit_checker IMPLEMENTATION.
|
||||
METHOD {{p}}if_credit_check~check.
|
||||
IF iv_age < c_min_age.
|
||||
rv_reason = {{p}}if_credit_check=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_income <= 0.
|
||||
rv_reason = {{p}}if_credit_check=>c_reason-income.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_open_plans >= c_max_open_plans.
|
||||
rv_reason = {{p}}if_credit_check=>c_reason-open_plan.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF to_cents( iv_order_amount ) > credit_limit_cents( iv_age = iv_age
|
||||
iv_income = iv_income
|
||||
iv_open_plans = iv_open_plans ).
|
||||
rv_reason = {{p}}if_credit_check=>c_reason-limit.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_reason = {{p}}if_credit_check=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD credit_limit_cents.
|
||||
rv_cents = to_cents( iv_income ) * c_income_factor
|
||||
- to_cents( c_plan_reduction ) * iv_open_plans.
|
||||
IF iv_age < c_full_limit_age.
|
||||
rv_cents = rv_cents DIV 2.
|
||||
rv_cents = rv_cents DIV c_hundred * c_hundred.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_cents.
|
||||
rv_cents = iv_amount * c_hundred.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,98 @@
|
||||
CLASS ltc_credit_checker DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_credit_check.
|
||||
METHODS setup.
|
||||
METHODS too_young FOR TESTING.
|
||||
METHODS zero_income FOR TESTING.
|
||||
METHODS two_open_plans FOR TESTING.
|
||||
METHODS order_above_limit FOR TESTING.
|
||||
METHODS order_at_limit FOR TESTING.
|
||||
METHODS young_limit_halved FOR TESTING.
|
||||
METHODS young_limit_is_floor FOR TESTING.
|
||||
METHODS valid_adult FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_credit_checker IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}credit_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD too_young.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-age
|
||||
act = mo_cut->check( iv_age = 17
|
||||
iv_income = '3000.00'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '100.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_income.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-income
|
||||
act = mo_cut->check( iv_age = 30
|
||||
iv_income = '0.00'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '100.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD two_open_plans.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-open_plan
|
||||
act = mo_cut->check( iv_age = 30
|
||||
iv_income = '3000.00'
|
||||
iv_open_plans = 2
|
||||
iv_order_amount = '100.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD order_above_limit.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-limit
|
||||
act = mo_cut->check( iv_age = 30
|
||||
iv_income = '1000.00'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '3000.01' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD order_at_limit.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-ok
|
||||
act = mo_cut->check( iv_age = 30
|
||||
iv_income = '1000.00'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '3000.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD young_limit_halved.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-limit
|
||||
act = mo_cut->check( iv_age = 20
|
||||
iv_income = '1000.00'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '1500.01' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD young_limit_is_floor.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-limit
|
||||
act = mo_cut->check( iv_age = 20
|
||||
iv_income = '2500.50'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '3750.50' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-ok
|
||||
act = mo_cut->check( iv_age = 20
|
||||
iv_income = '2500.50'
|
||||
iv_open_plans = 0
|
||||
iv_order_amount = '3750.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_adult.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_credit_check=>c_reason-ok
|
||||
act = mo_cut->check( iv_age = 35
|
||||
iv_income = '2000.00'
|
||||
iv_open_plans = 1
|
||||
iv_order_amount = '5500.00' ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user