Step F first pass: 81/92 accepted; budget floor 60 calls; rejected slots moved for regeneration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
119
tasks_gen/eval/G0148/faulty/m0_trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/faulty/m0_trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand = {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
- lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
119
tasks_gen/eval/G0148/faulty/m1_trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/faulty/m1_trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
OR iv_grade <> {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
- lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
119
tasks_gen/eval/G0148/faulty/m2_trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/faulty/m2_trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
AND iv_grade = {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
- lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
119
tasks_gen/eval/G0148/faulty/m3_trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/faulty/m3_trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade = {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
- lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
119
tasks_gen/eval/G0148/faulty/m4_trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/faulty/m4_trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
+ lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
24
tasks_gen/eval/G0148/generation.json
Normal file
24
tasks_gen/eval/G0148/generation.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": "G0148",
|
||||
"pool": "eval",
|
||||
"object_type": "CLAS",
|
||||
"category": "F",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 89.2,
|
||||
"null": 0
|
||||
},
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
139
tasks_gen/eval/G0148/hidden/t02_hidden.clas.abap
Normal file
139
tasks_gen/eval/G0148/hidden/t02_hidden.clas.abap
Normal file
@@ -0,0 +1,139 @@
|
||||
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_trade_in.
|
||||
METHODS setup.
|
||||
METHODS premium_new_car FOR TESTING.
|
||||
METHODS volume_one_year FOR TESTING.
|
||||
METHODS premium_age_mileage FOR TESTING.
|
||||
METHODS mileage_rounds_down FOR TESTING.
|
||||
METHODS budget_grade_c FOR TESTING.
|
||||
METHODS floor_at_minimum FOR TESTING.
|
||||
METHODS unknown_brand FOR TESTING.
|
||||
METHODS unknown_grade FOR TESTING.
|
||||
METHODS negative_age FOR TESTING.
|
||||
METHODS age_too_high FOR TESTING.
|
||||
METHODS negative_mileage FOR TESTING.
|
||||
METHODS mileage_too_high FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t02_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}trade_in_valuer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD premium_new_car.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-premium
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 30000 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_one_year.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-a
|
||||
iv_age_months = 12
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 19360 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD premium_age_mileage.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-premium
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-a
|
||||
iv_age_months = 12
|
||||
iv_mileage = 20000 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 28380 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_rounds_down.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 25000 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 19600 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD budget_grade_c.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-budget
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-c
|
||||
iv_age_months = 12
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 8448 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_at_minimum.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-budget
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-c
|
||||
iv_age_months = 300
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 500 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_brand.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = 'FORD'
|
||||
iv_grade = 'X'
|
||||
iv_age_months = -1
|
||||
iv_mileage = -1 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-brand
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_grade.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = 'X'
|
||||
iv_age_months = -1
|
||||
iv_mileage = -1 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-grade
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_age.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = -1
|
||||
iv_mileage = -1 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-age
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD age_too_high.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 601
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-age
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_mileage.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = -1 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-mileage
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_too_high.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 1000001 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-mileage
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
70
tasks_gen/eval/G0148/mutation.json
Normal file
70
tasks_gen/eval/G0148/mutation.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"task": "G0148",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}TRADE_IN_VALUER",
|
||||
"mutant": "line 68: <> -> = (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "9/12",
|
||||
"failed_tests": [
|
||||
"BUDGET_GRADE_C",
|
||||
"FLOOR_AT_MINIMUM",
|
||||
"UNKNOWN_BRAND"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TRADE_IN_VALUER",
|
||||
"mutant": "line 74: AND -> OR (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "2/12",
|
||||
"failed_tests": [
|
||||
"AGE_TOO_HIGH",
|
||||
"BUDGET_GRADE_C",
|
||||
"FLOOR_AT_MINIMUM",
|
||||
"MILEAGE_ROUNDS_DOWN",
|
||||
"MILEAGE_TOO_HIGH",
|
||||
"NEGATIVE_AGE",
|
||||
"NEGATIVE_MILEAGE",
|
||||
"PREMIUM_AGE_MILEAGE",
|
||||
"PREMIUM_NEW_CAR",
|
||||
"VOLUME_ONE_YEAR"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TRADE_IN_VALUER",
|
||||
"mutant": "line 74: <> -> = (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "9/12",
|
||||
"failed_tests": [
|
||||
"BUDGET_GRADE_C",
|
||||
"FLOOR_AT_MINIMUM",
|
||||
"UNKNOWN_GRADE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TRADE_IN_VALUER",
|
||||
"mutant": "line 75: <> -> = (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "11/12",
|
||||
"failed_tests": [
|
||||
"UNKNOWN_GRADE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}TRADE_IN_VALUER",
|
||||
"mutant": "line 82: - -> + (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "8/12",
|
||||
"failed_tests": [
|
||||
"BUDGET_GRADE_C",
|
||||
"FLOOR_AT_MINIMUM",
|
||||
"PREMIUM_AGE_MILEAGE",
|
||||
"VOLUME_ONE_YEAR"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
119
tasks_gen/eval/G0148/reference/trade_in_valuer.clas.abap
Normal file
119
tasks_gen/eval/G0148/reference/trade_in_valuer.clas.abap
Normal file
@@ -0,0 +1,119 @@
|
||||
CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_trade_in.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
|
||||
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
|
||||
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
|
||||
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
|
||||
c_max_age TYPE i VALUE 600,
|
||||
c_max_mileage TYPE i VALUE 1000000,
|
||||
c_km_step TYPE i VALUE 10000,
|
||||
c_percent TYPE i VALUE 100.
|
||||
|
||||
METHODS is_unknown_brand
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS is_unknown_grade
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_unknown) TYPE abap_bool.
|
||||
METHODS valuation
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS base_value
|
||||
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
|
||||
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
|
||||
METHODS mileage_blocks
|
||||
IMPORTING iv_mileage TYPE i
|
||||
RETURNING VALUE(rv_blocks) TYPE i.
|
||||
METHODS grade_factor
|
||||
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
|
||||
RETURNING VALUE(rv_factor) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
|
||||
METHOD {{p}}if_trade_in~assess.
|
||||
IF is_unknown_brand( iv_brand ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_unknown_grade( iv_grade ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_age_months < 0 OR iv_age_months > c_max_age.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-amount = valuation( iv_brand = iv_brand
|
||||
iv_grade = iv_grade
|
||||
iv_age_months = iv_age_months
|
||||
iv_mileage = iv_mileage ).
|
||||
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_brand.
|
||||
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
|
||||
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_unknown_grade.
|
||||
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-c
|
||||
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valuation.
|
||||
DATA(lv_base) = base_value( iv_brand ).
|
||||
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
|
||||
DATA(lv_value) = lv_base
|
||||
- lv_base * iv_age_months / c_percent
|
||||
- lv_base * lv_blocks / c_percent.
|
||||
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
|
||||
IF lv_value < c_min_value.
|
||||
rv_value = c_min_value.
|
||||
ELSE.
|
||||
rv_value = lv_value.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_value.
|
||||
CASE iv_brand.
|
||||
WHEN {{p}}if_trade_in=>c_brand-premium.
|
||||
rv_base = c_base_premium.
|
||||
WHEN {{p}}if_trade_in=>c_brand-volume.
|
||||
rv_base = c_base_volume.
|
||||
WHEN OTHERS.
|
||||
rv_base = c_base_budget.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_blocks.
|
||||
rv_blocks = iv_mileage DIV c_km_step.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD grade_factor.
|
||||
CASE iv_grade.
|
||||
WHEN {{p}}if_trade_in=>c_grade-a.
|
||||
rv_factor = 110.
|
||||
WHEN {{p}}if_trade_in=>c_grade-c.
|
||||
rv_factor = 80.
|
||||
WHEN {{p}}if_trade_in=>c_grade-d.
|
||||
rv_factor = 60.
|
||||
WHEN OTHERS.
|
||||
rv_factor = 100.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,91 @@
|
||||
CLASS ltc_trade_in_valuer DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_trade_in.
|
||||
METHODS setup.
|
||||
METHODS premium_new_car FOR TESTING.
|
||||
METHODS volume_one_year FOR TESTING.
|
||||
METHODS mileage_rounds_down FOR TESTING.
|
||||
METHODS floor_at_minimum FOR TESTING.
|
||||
METHODS unknown_brand FOR TESTING.
|
||||
METHODS unknown_grade FOR TESTING.
|
||||
METHODS negative_age FOR TESTING.
|
||||
METHODS mileage_too_high FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_trade_in_valuer IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}trade_in_valuer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD premium_new_car.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-premium
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 30000 act = ls_result-amount ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD volume_one_year.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-a
|
||||
iv_age_months = 12
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 19360 act = ls_result-amount ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_rounds_down.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 25000 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 19600 act = ls_result-amount ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD floor_at_minimum.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-budget
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-d
|
||||
iv_age_months = 600
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 500 act = ls_result-amount ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_brand.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = 'FORD'
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-brand
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_grade.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = 'X'
|
||||
iv_age_months = 0
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-grade
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD negative_age.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = -1
|
||||
iv_mileage = 0 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-age
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mileage_too_high.
|
||||
DATA(ls_result) = mo_cut->assess( iv_brand = {{p}}if_trade_in=>c_brand-volume
|
||||
iv_grade = {{p}}if_trade_in=>c_grade-b
|
||||
iv_age_months = 0
|
||||
iv_mileage = 1000001 ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_trade_in=>c_reason-mileage
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
36
tasks_gen/eval/G0148/seed/if_trade_in.intf.abap
Normal file
36
tasks_gen/eval/G0148/seed/if_trade_in.intf.abap
Normal file
@@ -0,0 +1,36 @@
|
||||
INTERFACE {{p}}if_trade_in PUBLIC.
|
||||
TYPES ty_value TYPE i.
|
||||
TYPES ty_brand TYPE c LENGTH 8.
|
||||
TYPES ty_grade TYPE c LENGTH 1.
|
||||
TYPES ty_reason TYPE c LENGTH 10.
|
||||
TYPES:
|
||||
BEGIN OF ty_result,
|
||||
amount TYPE ty_value,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_result.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_brand,
|
||||
premium TYPE ty_brand VALUE 'PREMIUM',
|
||||
volume TYPE ty_brand VALUE 'VOLUME',
|
||||
budget TYPE ty_brand VALUE 'BUDGET',
|
||||
END OF c_brand,
|
||||
BEGIN OF c_grade,
|
||||
a TYPE ty_grade VALUE 'A',
|
||||
b TYPE ty_grade VALUE 'B',
|
||||
c TYPE ty_grade VALUE 'C',
|
||||
d TYPE ty_grade VALUE 'D',
|
||||
END OF c_grade,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
brand TYPE ty_reason VALUE 'BRAND',
|
||||
grade TYPE ty_reason VALUE 'GRADE',
|
||||
age TYPE ty_reason VALUE 'AGE',
|
||||
mileage TYPE ty_reason VALUE 'MILEAGE',
|
||||
END OF c_reason.
|
||||
METHODS assess
|
||||
IMPORTING iv_brand TYPE ty_brand
|
||||
iv_grade TYPE ty_grade
|
||||
iv_age_months TYPE i
|
||||
iv_mileage TYPE i
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
ENDINTERFACE.
|
||||
60
tasks_gen/eval/G0148/spec.md
Normal file
60
tasks_gen/eval/G0148/spec.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 1. Goal
|
||||
A car dealership accepts used cars as trade-ins. A sales program calls one
|
||||
valuation for each offered car before the dealership makes an offer to the
|
||||
customer. The valuation returns the trade-in value in whole euros and a reason
|
||||
code.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The interface {{P}}IF_TRADE_IN exists in package $TMP. It is active.
|
||||
- The interface defines the whole contract of the valuation: the result
|
||||
structure, the input types, the three brand groups, the four condition
|
||||
grades, the reason codes and one method. Read the interface in the system.
|
||||
- The dealership uses the brand groups premium, volume and budget and the
|
||||
condition grades A, B, C and D.
|
||||
- All amounts are whole euros. All arithmetic is integer arithmetic.
|
||||
|
||||
# 4. Contract
|
||||
- Create the class {{P}}TRADE_IN_VALUER in package $TMP.
|
||||
- The class is public, final, and has a public constructor without parameters.
|
||||
- The class implements {{P}}IF_TRADE_IN.
|
||||
- Do not add other public methods.
|
||||
- Do not change {{P}}IF_TRADE_IN.
|
||||
|
||||
# 5. Business rules
|
||||
Apply the rules in this sequence. Return the reason code of the first rule that
|
||||
fails. The interface defines one reason code for each rule below and one reason
|
||||
code for a successful valuation. Each code is named after the rule that it
|
||||
reports.
|
||||
1. The brand group must be one of the three brand groups that the interface
|
||||
defines. If not, return the reason code for the brand group.
|
||||
2. The condition grade must be one of the four grades that the interface
|
||||
defines. If not, return the reason code for the condition grade.
|
||||
3. The age in months must be between 0 and 600. If not, return the reason code
|
||||
for the age.
|
||||
4. The mileage in kilometres must be between 0 and 1000000. If not, return the
|
||||
reason code for the mileage.
|
||||
5. The base value is 30000 euros for the premium brand group, 20000 euros for
|
||||
the volume brand group and 12000 euros for the budget brand group.
|
||||
6. Deduct 1 percent of the base value for each month of age.
|
||||
7. Deduct 1 percent of the base value for each complete block of 10000
|
||||
kilometres of mileage. Only complete blocks count. A mileage of 25000
|
||||
kilometres contains two complete blocks and 5000 kilometres that do not
|
||||
count. A mileage of 9999 kilometres contains no complete block.
|
||||
8. Multiply the result by the grade factor: grade A 110 percent, grade B
|
||||
100 percent, grade C 80 percent, grade D 60 percent.
|
||||
9. If the result is below 500, the value is 500.
|
||||
10. Return the value and the reason code for a successful valuation.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 8.16.
|
||||
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
||||
variables. No comment that restates the code.
|
||||
- Out of scope: do not change {{P}}IF_TRADE_IN.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
51
tasks_gen/eval/G0148/task.json
Normal file
51
tasks_gen/eval/G0148/task.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"id": "G0148",
|
||||
"category": "F",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 60,
|
||||
"max_activations": 15
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "INTF",
|
||||
"name": "{{P}}IF_TRADE_IN",
|
||||
"file": "seed/if_trade_in.intf.abap",
|
||||
"description": "Trade-in valuation contract"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}TRADE_IN_VALUER",
|
||||
"implements": "{{P}}IF_TRADE_IN"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}IF_TRADE_IN"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T02_HIDDEN",
|
||||
"file": "hidden/t02_hidden.clas.abap",
|
||||
"description": "T02 hidden tests"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}TRADE_IN_VALUER",
|
||||
"file": "reference/trade_in_valuer.clas.abap",
|
||||
"description": "Trade-in valuer",
|
||||
"testclasses_file": "reference/trade_in_valuer.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"db_operation_in_loop"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user