Snapshot: new training tasks (balanced generation), docs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
107
tasks_gen/train/G1935/reference/if_mix_recipe.intf.abap
Normal file
107
tasks_gen/train/G1935/reference/if_mix_recipe.intf.abap
Normal 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.
|
||||
82
tasks_gen/train/G1935/reference/mix_recipe_test.clas.abap
Normal file
82
tasks_gen/train/G1935/reference/mix_recipe_test.clas.abap
Normal 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.
|
||||
Reference in New Issue
Block a user