Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
106
tasks_gen/train/G1079/reference/soil_evaluator.clas.abap
Normal file
106
tasks_gen/train/G1079/reference/soil_evaluator.clas.abap
Normal file
@@ -0,0 +1,106 @@
|
||||
CLASS {{p}}soil_evaluator DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
ty_ph TYPE p LENGTH 3 DECIMALS 1,
|
||||
ty_nutrient TYPE i,
|
||||
ty_status TYPE c LENGTH 1,
|
||||
ty_grade TYPE c LENGTH 1,
|
||||
BEGIN OF ty_sample,
|
||||
ph TYPE ty_ph,
|
||||
nutrient TYPE ty_nutrient,
|
||||
END OF ty_sample,
|
||||
tt_sample TYPE STANDARD TABLE OF ty_sample WITH EMPTY KEY,
|
||||
BEGIN OF ty_result,
|
||||
status TYPE ty_status,
|
||||
avg_ph TYPE ty_ph,
|
||||
avg_nutrient TYPE ty_nutrient,
|
||||
grade TYPE ty_grade,
|
||||
END OF ty_result.
|
||||
CONSTANTS:
|
||||
c_status_ok TYPE ty_status VALUE 'O',
|
||||
c_status_error TYPE ty_status VALUE 'E',
|
||||
c_grade_a TYPE ty_grade VALUE 'A',
|
||||
c_grade_b TYPE ty_grade VALUE 'B',
|
||||
c_grade_c TYPE ty_grade VALUE 'C'.
|
||||
METHODS evaluate
|
||||
IMPORTING it_samples TYPE tt_sample
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_ph_min TYPE ty_ph VALUE '0.0',
|
||||
c_ph_max TYPE ty_ph VALUE '14.0',
|
||||
c_ph_a_min TYPE ty_ph VALUE '6.0',
|
||||
c_ph_a_max TYPE ty_ph VALUE '7.5',
|
||||
c_ph_b_min TYPE ty_ph VALUE '5.0',
|
||||
c_ph_b_max TYPE ty_ph VALUE '8.0',
|
||||
c_nutr_a_min TYPE ty_nutrient VALUE 50,
|
||||
c_nutr_b_min TYPE ty_nutrient VALUE 30.
|
||||
METHODS has_invalid_ph
|
||||
IMPORTING it_samples TYPE tt_sample
|
||||
RETURNING VALUE(rv_invalid) TYPE abap_bool.
|
||||
METHODS average_ph
|
||||
IMPORTING it_samples TYPE tt_sample
|
||||
RETURNING VALUE(rv_avg) TYPE ty_ph.
|
||||
METHODS average_nutrient
|
||||
IMPORTING it_samples TYPE tt_sample
|
||||
RETURNING VALUE(rv_avg) TYPE ty_nutrient.
|
||||
METHODS determine_grade
|
||||
IMPORTING iv_avg_ph TYPE ty_ph
|
||||
iv_avg_nutrient TYPE ty_nutrient
|
||||
RETURNING VALUE(rv_grade) TYPE ty_grade.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS {{p}}soil_evaluator IMPLEMENTATION.
|
||||
METHOD evaluate.
|
||||
IF it_samples IS INITIAL.
|
||||
rs_result-status = c_status_error.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF has_invalid_ph( it_samples ) = abap_true.
|
||||
rs_result-status = c_status_error.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-avg_ph = average_ph( it_samples ).
|
||||
rs_result-avg_nutrient = average_nutrient( it_samples ).
|
||||
rs_result-grade = determine_grade( iv_avg_ph = rs_result-avg_ph
|
||||
iv_avg_nutrient = rs_result-avg_nutrient ).
|
||||
rs_result-status = c_status_ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD has_invalid_ph.
|
||||
LOOP AT it_samples INTO DATA(ls_sample).
|
||||
IF ls_sample-ph < c_ph_min OR ls_sample-ph > c_ph_max.
|
||||
rv_invalid = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD average_ph.
|
||||
DATA lv_sum TYPE p LENGTH 9 DECIMALS 1.
|
||||
LOOP AT it_samples INTO DATA(ls_sample).
|
||||
lv_sum = lv_sum + ls_sample-ph.
|
||||
ENDLOOP.
|
||||
rv_avg = lv_sum / lines( it_samples ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD average_nutrient.
|
||||
DATA lv_sum TYPE i.
|
||||
LOOP AT it_samples INTO DATA(ls_sample).
|
||||
lv_sum = lv_sum + ls_sample-nutrient.
|
||||
ENDLOOP.
|
||||
rv_avg = lv_sum / lines( it_samples ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD determine_grade.
|
||||
IF iv_avg_ph >= c_ph_a_min AND iv_avg_ph <= c_ph_a_max
|
||||
AND iv_avg_nutrient >= c_nutr_a_min.
|
||||
rv_grade = c_grade_a.
|
||||
ELSEIF iv_avg_ph >= c_ph_b_min AND iv_avg_ph <= c_ph_b_max
|
||||
AND iv_avg_nutrient >= c_nutr_b_min.
|
||||
rv_grade = c_grade_b.
|
||||
ELSE.
|
||||
rv_grade = c_grade_c.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,60 @@
|
||||
CLASS ltc_soil_evaluator DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}soil_evaluator.
|
||||
METHODS setup.
|
||||
METHODS valid_samples_grade_a FOR TESTING.
|
||||
METHODS valid_samples_grade_b FOR TESTING.
|
||||
METHODS valid_samples_grade_c FOR TESTING.
|
||||
METHODS invalid_ph FOR TESTING.
|
||||
METHODS empty_table FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltc_soil_evaluator IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}soil_evaluator( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_samples_grade_a.
|
||||
DATA(lt_samples) = VALUE {{p}}soil_evaluator=>tt_sample(
|
||||
( ph = '6.5' nutrient = 60 )
|
||||
( ph = '7.0' nutrient = 55 ) ).
|
||||
DATA(ls_result) = mo_cut->evaluate( lt_samples ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_status_ok act = ls_result-status ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = '6.8' act = ls_result-avg_ph ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 58 act = ls_result-avg_nutrient ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_grade_a act = ls_result-grade ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_samples_grade_b.
|
||||
DATA(lt_samples) = VALUE {{p}}soil_evaluator=>tt_sample(
|
||||
( ph = '5.5' nutrient = 35 )
|
||||
( ph = '6.0' nutrient = 40 ) ).
|
||||
DATA(ls_result) = mo_cut->evaluate( lt_samples ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_status_ok act = ls_result-status ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_grade_b act = ls_result-grade ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_samples_grade_c.
|
||||
DATA(lt_samples) = VALUE {{p}}soil_evaluator=>tt_sample(
|
||||
( ph = '4.0' nutrient = 10 ) ).
|
||||
DATA(ls_result) = mo_cut->evaluate( lt_samples ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_status_ok act = ls_result-status ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_grade_c act = ls_result-grade ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_ph.
|
||||
DATA(lt_samples) = VALUE {{p}}soil_evaluator=>tt_sample(
|
||||
( ph = '15.0' nutrient = 50 ) ).
|
||||
DATA(ls_result) = mo_cut->evaluate( lt_samples ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_status_error act = ls_result-status ).
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_result-avg_ph ).
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_result-avg_nutrient ).
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_result-grade ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_table.
|
||||
DATA(lt_samples) = VALUE {{p}}soil_evaluator=>tt_sample( ).
|
||||
DATA(ls_result) = mo_cut->evaluate( lt_samples ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}soil_evaluator=>c_status_error act = ls_result-status ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user