Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View 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.

View File

@@ -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.