Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
98
tasks_gen/train/G1047/reference/gravel_pricer.clas.abap
Normal file
98
tasks_gen/train/G1047/reference/gravel_pricer.clas.abap
Normal file
@@ -0,0 +1,98 @@
|
||||
CLASS {{p}}gravel_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_order_id TYPE c LENGTH 10.
|
||||
TYPES ty_grade TYPE c LENGTH 1.
|
||||
TYPES ty_tonnes TYPE i.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
TYPES ty_reason TYPE c LENGTH 10.
|
||||
TYPES:
|
||||
BEGIN OF ty_result,
|
||||
net_amount TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_result.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
not_found TYPE ty_reason VALUE 'NOT_FOUND',
|
||||
grade TYPE ty_reason VALUE 'GRADE',
|
||||
quantity TYPE ty_reason VALUE 'QUANTITY',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS price_order
|
||||
IMPORTING iv_order_id TYPE ty_order_id
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES ty_work TYPE p LENGTH 15 DECIMALS 2.
|
||||
TYPES:
|
||||
BEGIN OF ty_order,
|
||||
order_id TYPE ty_order_id,
|
||||
grade TYPE ty_grade,
|
||||
tonnes TYPE ty_tonnes,
|
||||
END OF ty_order.
|
||||
|
||||
METHODS read_order
|
||||
IMPORTING iv_order_id TYPE ty_order_id
|
||||
RETURNING VALUE(rs_order) TYPE ty_order.
|
||||
METHODS base_price
|
||||
IMPORTING iv_grade TYPE ty_grade
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_tonnes TYPE ty_tonnes
|
||||
RETURNING VALUE(rv_percent) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}gravel_pricer IMPLEMENTATION.
|
||||
METHOD price_order.
|
||||
DATA(ls_order) = read_order( iv_order_id ).
|
||||
IF ls_order-order_id IS INITIAL.
|
||||
rs_result-reason = c_reason-not_found.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA(lv_price) = base_price( ls_order-grade ).
|
||||
IF lv_price IS INITIAL.
|
||||
rs_result-reason = c_reason-grade.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF ls_order-tonnes <= 0.
|
||||
rs_result-reason = c_reason-quantity.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA(lv_gross) = CONV ty_work( lv_price ) * CONV ty_work( ls_order-tonnes ).
|
||||
DATA(lv_factor) = CONV ty_work( 100 ) - discount_percent( ls_order-tonnes ).
|
||||
DATA(lv_net) = lv_gross * lv_factor / 100.
|
||||
|
||||
rs_result-net_amount = round( val = lv_net dec = 2 ).
|
||||
rs_result-reason = c_reason-ok.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD read_order.
|
||||
SELECT SINGLE order_id, grade, tonnes
|
||||
FROM {{p}}grv_ord
|
||||
WHERE order_id = @iv_order_id
|
||||
INTO @rs_order.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
CASE iv_grade.
|
||||
WHEN 'F'.
|
||||
rv_price = '42.00'.
|
||||
WHEN 'M'.
|
||||
rv_price = '36.00'.
|
||||
WHEN 'C'.
|
||||
rv_price = '30.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_tonnes >= 20.
|
||||
rv_percent = '10.00'.
|
||||
ELSEIF iv_tonnes >= 5.
|
||||
rv_percent = '5.00'.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
103
tasks_gen/train/G1047/reference/gravel_pricer.testclasses.abap
Normal file
103
tasks_gen/train/G1047/reference/gravel_pricer.testclasses.abap
Normal file
@@ -0,0 +1,103 @@
|
||||
CLASS ltc_gravel_pricer DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA mo_env TYPE REF TO if_osql_test_environment.
|
||||
DATA mo_cut TYPE REF TO {{p}}gravel_pricer.
|
||||
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
METHODS setup.
|
||||
METHODS small_order_ok FOR TESTING.
|
||||
METHODS medium_order_discount FOR TESTING.
|
||||
METHODS bulk_order_discount FOR TESTING.
|
||||
METHODS five_tonnes_discount FOR TESTING.
|
||||
METHODS unknown_order FOR TESTING.
|
||||
METHODS unknown_grade FOR TESTING.
|
||||
METHODS zero_quantity FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_gravel_pricer IMPLEMENTATION.
|
||||
METHOD class_setup.
|
||||
mo_env = cl_osql_test_environment=>create( VALUE #( ( '{{P}}GRV_ORD' ) ) ).
|
||||
DATA lt_order TYPE STANDARD TABLE OF {{p}}grv_ord WITH EMPTY KEY.
|
||||
lt_order = VALUE #(
|
||||
( order_id = 'ORD0000001' grade = 'F' tonnes = 3 customer = 'BuildIt Ltd' )
|
||||
( order_id = 'ORD0000002' grade = 'M' tonnes = 12 customer = 'Roadworks AG' )
|
||||
( order_id = 'ORD0000003' grade = 'C' tonnes = 25 customer = 'City Council' )
|
||||
( order_id = 'ORD0000004' grade = 'F' tonnes = 5 customer = 'Stone and Co' )
|
||||
( order_id = 'ORD0000005' grade = 'X' tonnes = 7 customer = 'Bad Data Ltd' )
|
||||
( order_id = 'ORD0000006' grade = 'M' tonnes = 0 customer = 'Zero Ltd' ) ).
|
||||
mo_env->insert_test_data( lt_order ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
mo_env->destroy( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}gravel_pricer( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD small_order_ok.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000001' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}gravel_pricer=>ty_amount( '126.00' )
|
||||
act = ls_result-net_amount ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD medium_order_discount.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000002' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}gravel_pricer=>ty_amount( '410.40' )
|
||||
act = ls_result-net_amount ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bulk_order_discount.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000003' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}gravel_pricer=>ty_amount( '675.00' )
|
||||
act = ls_result-net_amount ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD five_tonnes_discount.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000004' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}gravel_pricer=>ty_amount( '199.50' )
|
||||
act = ls_result-net_amount ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_order.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD9999999' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-not_found
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_grade.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000005' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-grade
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zero_quantity.
|
||||
DATA(ls_result) = mo_cut->price_order( 'ORD0000006' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}gravel_pricer=>c_reason-quantity
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user