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:
96
tasks_gen/eval/G0104/reference/insurance_premium.clas.abap
Normal file
96
tasks_gen/eval/G0104/reference/insurance_premium.clas.abap
Normal file
@@ -0,0 +1,96 @@
|
||||
CLASS {{p}}insurance_premium DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
ty_region TYPE c LENGTH 2,
|
||||
ty_premium TYPE p LENGTH 8 DECIMALS 2.
|
||||
METHODS calculate_premium
|
||||
IMPORTING iv_age TYPE i
|
||||
iv_power_kw TYPE i
|
||||
iv_region TYPE ty_region
|
||||
iv_claim_free_years TYPE i
|
||||
RETURNING VALUE(rv_premium) TYPE ty_premium.
|
||||
PRIVATE SECTION.
|
||||
METHODS get_base_premium
|
||||
IMPORTING iv_region TYPE ty_region
|
||||
RETURNING VALUE(rv_base) TYPE ty_premium.
|
||||
METHODS get_age_factor
|
||||
IMPORTING iv_age TYPE i
|
||||
RETURNING VALUE(rv_factor) TYPE decfloat34.
|
||||
METHODS get_power_factor
|
||||
IMPORTING iv_power_kw TYPE i
|
||||
RETURNING VALUE(rv_factor) TYPE decfloat34.
|
||||
METHODS get_discount_factor
|
||||
IMPORTING iv_claim_free_years TYPE i
|
||||
RETURNING VALUE(rv_factor) TYPE decfloat34.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS {{p}}insurance_premium IMPLEMENTATION.
|
||||
METHOD calculate_premium.
|
||||
IF iv_age < 18 OR iv_age > 99
|
||||
OR iv_power_kw <= 0
|
||||
OR iv_claim_free_years < 0.
|
||||
rv_premium = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(lv_base) = get_base_premium( iv_region ).
|
||||
IF lv_base = 0.
|
||||
rv_premium = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA(lv_premium) = CONV decfloat34( lv_base )
|
||||
* get_age_factor( iv_age )
|
||||
* get_power_factor( iv_power_kw )
|
||||
* get_discount_factor( iv_claim_free_years ).
|
||||
rv_premium = lv_premium.
|
||||
IF rv_premium < 100.
|
||||
rv_premium = 100.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_base_premium.
|
||||
CASE iv_region.
|
||||
WHEN 'A1'.
|
||||
rv_base = 150.
|
||||
WHEN 'B2'.
|
||||
rv_base = 200.
|
||||
WHEN 'C3'.
|
||||
rv_base = 250.
|
||||
WHEN 'D4'.
|
||||
rv_base = 300.
|
||||
WHEN 'E5'.
|
||||
rv_base = 350.
|
||||
WHEN OTHERS.
|
||||
rv_base = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_age_factor.
|
||||
IF iv_age < 25.
|
||||
rv_factor = '1.5'.
|
||||
ELSEIF iv_age > 65.
|
||||
rv_factor = '1.2'.
|
||||
ELSE.
|
||||
rv_factor = '1.0'.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_power_factor.
|
||||
IF iv_power_kw <= 50.
|
||||
rv_factor = '0.9'.
|
||||
ELSEIF iv_power_kw <= 100.
|
||||
rv_factor = '1.0'.
|
||||
ELSEIF iv_power_kw <= 150.
|
||||
rv_factor = '1.3'.
|
||||
ELSE.
|
||||
rv_factor = '1.6'.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_discount_factor.
|
||||
DATA(lv_discount) = iv_claim_free_years * 5.
|
||||
IF lv_discount > 30.
|
||||
lv_discount = 30.
|
||||
ENDIF.
|
||||
rv_factor = CONV decfloat34( 100 - lv_discount ) / 100.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,110 @@
|
||||
CLASS ltc_insurance_premium DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}insurance_premium.
|
||||
METHODS setup.
|
||||
METHODS standard_premium FOR TESTING.
|
||||
METHODS young_driver FOR TESTING.
|
||||
METHODS senior_driver FOR TESTING.
|
||||
METHODS high_power FOR TESTING.
|
||||
METHODS very_high_power FOR TESTING.
|
||||
METHODS low_power FOR TESTING.
|
||||
METHODS claim_free_discount FOR TESTING.
|
||||
METHODS claim_free_capped FOR TESTING.
|
||||
METHODS minimum_premium FOR TESTING.
|
||||
METHODS all_regions FOR TESTING.
|
||||
METHODS invalid_region FOR TESTING.
|
||||
METHODS invalid_inputs FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_insurance_premium IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}insurance_premium( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD standard_premium.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 150
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD young_driver.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 225
|
||||
act = mo_cut->calculate_premium( iv_age = 22 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD senior_driver.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 180
|
||||
act = mo_cut->calculate_premium( iv_age = 70 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD high_power.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 195
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 120 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD very_high_power.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 240
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 200 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD low_power.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 135
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 40 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD claim_free_discount.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 180
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'B2' iv_claim_free_years = 2 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD claim_free_capped.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 140
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'B2' iv_claim_free_years = 10 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD minimum_premium.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 100
|
||||
act = mo_cut->calculate_premium( iv_age = 25 iv_power_kw = 50 iv_region = 'A1' iv_claim_free_years = 6 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD all_regions.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 250 msg = 'C3'
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'C3' iv_claim_free_years = 0 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 300 msg = 'D4'
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'D4' iv_claim_free_years = 0 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 350 msg = 'E5'
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'E5' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_region.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'X9' iv_claim_free_years = 0 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_inputs.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0 msg = 'age too low'
|
||||
act = mo_cut->calculate_premium( iv_age = 17 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0 msg = 'age too high'
|
||||
act = mo_cut->calculate_premium( iv_age = 100 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0 msg = 'power too low'
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 0 iv_region = 'A1' iv_claim_free_years = 0 ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0 msg = 'negative claim free years'
|
||||
act = mo_cut->calculate_premium( iv_age = 30 iv_power_kw = 80 iv_region = 'A1' iv_claim_free_years = -1 ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user