Snapshot: new training tasks (balanced generation), docs

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 22:08:59 +02:00
parent eb13453097
commit 6984fc7917
572 changed files with 30024 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
INTERFACE {{p}}if_mix_recipe PUBLIC.
TYPES ty_grade TYPE c LENGTH 4.
TYPES ty_qty TYPE p LENGTH 8 DECIMALS 2.
TYPES ty_status TYPE c LENGTH 10.
TYPES:
BEGIN OF ty_mix,
grade TYPE ty_grade,
cement_kg TYPE ty_qty,
sand_kg TYPE ty_qty,
gravel_kg TYPE ty_qty,
water_l TYPE ty_qty,
END OF ty_mix.
CONSTANTS:
BEGIN OF c_grade,
c20 TYPE ty_grade VALUE 'C20',
c25 TYPE ty_grade VALUE 'C25',
c30 TYPE ty_grade VALUE 'C30',
c35 TYPE ty_grade VALUE 'C35',
END OF c_grade,
BEGIN OF c_status,
ok TYPE ty_status VALUE 'OK',
grade TYPE ty_status VALUE 'GRADE',
volume TYPE ty_status VALUE 'VOLUME',
END OF c_status.
METHODS check_order
IMPORTING iv_grade TYPE ty_grade
iv_volume TYPE ty_qty
RETURNING VALUE(rv_status) TYPE ty_status.
METHODS mix_for
IMPORTING iv_grade TYPE ty_grade
iv_volume TYPE ty_qty
RETURNING VALUE(rs_mix) TYPE ty_mix.
ENDINTERFACE.
INTERFACE {{p}}if_mix_recipe.
METHOD check_order.
DATA lv_grade TYPE ty_grade.
lv_grade = to_upper( iv_grade ).
IF lv_grade <> c_grade-c20
AND lv_grade <> c_grade-c25
AND lv_grade <> c_grade-c30
AND lv_grade <> c_grade-c35.
rv_status = c_status-grade.
RETURN.
ENDIF.
IF iv_volume < '0.50' OR iv_volume > '20.00'.
rv_status = c_status-volume.
RETURN.
ENDIF.
rv_status = c_status-ok.
ENDMETHOD.
METHOD mix_for.
IF check_order( iv_grade = iv_grade iv_volume = iv_volume ) <> c_status-ok.
RETURN.
ENDIF.
DATA lv_grade TYPE ty_grade.
lv_grade = to_upper( iv_grade ).
DATA lv_cement TYPE ty_qty.
DATA lv_sand TYPE ty_qty.
DATA lv_gravel TYPE ty_qty.
DATA lv_water TYPE ty_qty.
CASE lv_grade.
WHEN c_grade-c20.
lv_cement = '280.00'.
lv_sand = '720.00'.
lv_gravel = '1180.00'.
lv_water = '175.00'.
WHEN c_grade-c25.
lv_cement = '320.00'.
lv_sand = '700.00'.
lv_gravel = '1160.00'.
lv_water = '175.00'.
WHEN c_grade-c30.
lv_cement = '360.00'.
lv_sand = '680.00'.
lv_gravel = '1140.00'.
lv_water = '170.00'.
WHEN c_grade-c35.
lv_cement = '400.00'.
lv_sand = '660.00'.
lv_gravel = '1120.00'.
lv_water = '165.00'.
WHEN OTHERS.
RETURN.
ENDCASE.
DATA lv_factor TYPE ty_qty.
lv_factor = '1.00'.
IF iv_volume < '2.00'.
lv_factor = '1.10'.
ENDIF.
rs_mix-grade = lv_grade.
rs_mix-cement_kg = ceil( lv_cement * iv_volume * lv_factor ).
rs_mix-sand_kg = ceil( lv_sand * iv_volume * lv_factor ).
rs_mix-gravel_kg = ceil( lv_gravel * iv_volume * lv_factor ).
rs_mix-water_l = ceil( lv_water * iv_volume * lv_factor ).
ENDMETHOD.
ENDINTERFACE.

View File

@@ -0,0 +1,82 @@
CLASS {{p}}mix_recipe_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PUBLIC SECTION.
INTERFACES {{p}}if_mix_recipe.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_mix_recipe.
METHODS setup.
METHODS valid_order_is_ok FOR TESTING.
METHODS unknown_grade_is_rejected FOR TESTING.
METHODS volume_out_of_range FOR TESTING.
METHODS mix_of_small_order FOR TESTING.
METHODS mix_of_large_order FOR TESTING.
METHODS invalid_order_has_no_mix FOR TESTING.
ENDCLASS.
CLASS {{p}}mix_recipe_test IMPLEMENTATION.
METHOD setup.
mo_cut = me.
ENDMETHOD.
METHOD valid_order_is_ok.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_mix_recipe=>c_status-ok
act = mo_cut->check_order( iv_grade = 'C25' iv_volume = '1.30' ) ).
ENDMETHOD.
METHOD unknown_grade_is_rejected.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_mix_recipe=>c_status-grade
act = mo_cut->check_order( iv_grade = 'C40' iv_volume = '5.00' ) ).
ENDMETHOD.
METHOD volume_out_of_range.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_mix_recipe=>c_status-volume
act = mo_cut->check_order( iv_grade = 'C20' iv_volume = '25.00' ) ).
ENDMETHOD.
METHOD mix_of_small_order.
DATA(ls_mix) = mo_cut->mix_for( iv_grade = 'C25' iv_volume = '1.30' ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '458.00' )
act = ls_mix-cement_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '1001.00' )
act = ls_mix-sand_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '1659.00' )
act = ls_mix-gravel_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '251.00' )
act = ls_mix-water_l ).
ENDMETHOD.
METHOD mix_of_large_order.
DATA(ls_mix) = mo_cut->mix_for( iv_grade = 'C35' iv_volume = '5.00' ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '2000.00' )
act = ls_mix-cement_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '3300.00' )
act = ls_mix-sand_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '5600.00' )
act = ls_mix-gravel_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '825.00' )
act = ls_mix-water_l ).
ENDMETHOD.
METHOD invalid_order_has_no_mix.
DATA(ls_mix) = mo_cut->mix_for( iv_grade = 'C40' iv_volume = '5.00' ).
cl_abap_unit_assert=>assert_initial( act = ls_mix-grade ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '0.00' )
act = ls_mix-cement_kg ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_mix_recipe=>ty_qty( '0.00' )
act = ls_mix-water_l ).
ENDMETHOD.
ENDCLASS.