Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
108
tasks_gen/eval/G0102/faulty/m0_hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/faulty/m0_hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 1 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total - lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_true.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
108
tasks_gen/eval/G0102/faulty/m1_hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/faulty/m1_hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
OR iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 1 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total - lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_true.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
108
tasks_gen/eval/G0102/faulty/m2_hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/faulty/m2_hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 2 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total - lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_true.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
108
tasks_gen/eval/G0102/faulty/m3_hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/faulty/m3_hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 1 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total + lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_true.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
108
tasks_gen/eval/G0102/faulty/m4_hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/faulty/m4_hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 1 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total - lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_false.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
19
tasks_gen/eval/G0102/generation.json
Normal file
19
tasks_gen/eval/G0102/generation.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "G0102",
|
||||
"pool": "eval",
|
||||
"object_type": "CLAS",
|
||||
"category": "A",
|
||||
"attempts": [
|
||||
{
|
||||
"stage": "validate",
|
||||
"oracle": 100.0,
|
||||
"null": 0,
|
||||
"mutation": {
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
145
tasks_gen/eval/G0102/hidden/t13_hidden.clas.abap
Normal file
145
tasks_gen/eval/G0102/hidden/t13_hidden.clas.abap
Normal file
@@ -0,0 +1,145 @@
|
||||
CLASS {{p}}t13_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_hotel_rate.
|
||||
METHODS setup.
|
||||
METHODS expect_price
|
||||
IMPORTING iv_expected TYPE {{p}}if_hotel_rate=>ty_amount
|
||||
iv_actual TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS rejects_zero_nights FOR TESTING.
|
||||
METHODS rejects_zero_guests FOR TESTING.
|
||||
METHODS rejects_unknown_category FOR TESTING.
|
||||
METHODS validation_order FOR TESTING.
|
||||
METHODS single_standard_night FOR TESTING.
|
||||
METHODS two_guests_one_room FOR TESTING.
|
||||
METHODS three_guests_two_rooms FOR TESTING.
|
||||
METHODS breakfast_per_guest FOR TESTING.
|
||||
METHODS discount_starts_at_seven FOR TESTING.
|
||||
METHODS discount_fifteen_percent FOR TESTING.
|
||||
METHODS discount_twenty_percent FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}t13_hidden IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}hotel_rate( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expect_price.
|
||||
cl_abap_unit_assert=>assert_equals( exp = iv_expected act = iv_actual ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_zero_nights.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 0
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-nights
|
||||
act = ls_result-reason ).
|
||||
expect_price( iv_expected = '0.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_zero_guests.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 3
|
||||
iv_guests = 0
|
||||
iv_breakfast = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-guests
|
||||
act = ls_result-reason ).
|
||||
expect_price( iv_expected = '0.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rejects_unknown_category.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = 'X'
|
||||
iv_nights = 2
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-category
|
||||
act = ls_result-reason ).
|
||||
expect_price( iv_expected = '0.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validation_order.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = 'X'
|
||||
iv_nights = 0
|
||||
iv_guests = 0
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-nights
|
||||
act = ls_result-reason ).
|
||||
ls_result = mo_cut->calculate( iv_category = 'X'
|
||||
iv_nights = 2
|
||||
iv_guests = 0
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-guests
|
||||
act = ls_result-reason ).
|
||||
ls_result = mo_cut->calculate( iv_category = 'X'
|
||||
iv_nights = 2
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-category
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD single_standard_night.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 1
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
expect_price( iv_expected = '93.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD two_guests_one_room.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
|
||||
iv_nights = 3
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '438.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD three_guests_two_rooms.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
|
||||
iv_nights = 2
|
||||
iv_guests = 3
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '578.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD breakfast_per_guest.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 2
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_true ).
|
||||
expect_price( iv_expected = '242.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_starts_at_seven.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 6
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '558.00' iv_actual = ls_result-price ).
|
||||
ls_result = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 7
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '588.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_fifteen_percent.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
|
||||
iv_nights = 14
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '1750.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_twenty_percent.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-suite
|
||||
iv_nights = 28
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
expect_price( iv_expected = '5908.00' iv_actual = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
74
tasks_gen/eval/G0102/mutation.json
Normal file
74
tasks_gen/eval/G0102/mutation.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"task": "G0102",
|
||||
"mutants": [
|
||||
{
|
||||
"object": "{{P}}HOTEL_RATE",
|
||||
"mutant": "line 59: <> -> = (rel)",
|
||||
"status": "killed",
|
||||
"hidden": "6/11",
|
||||
"failed_tests": [
|
||||
"BREAKFAST_PER_GUEST",
|
||||
"DISCOUNT_STARTS_AT_SEVEN",
|
||||
"REJECTS_UNKNOWN_CATEGORY",
|
||||
"SINGLE_STANDARD_NIGHT",
|
||||
"VALIDATION_ORDER"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}HOTEL_RATE",
|
||||
"mutant": "line 61: AND -> OR (logic)",
|
||||
"status": "killed",
|
||||
"hidden": "4/11",
|
||||
"failed_tests": [
|
||||
"BREAKFAST_PER_GUEST",
|
||||
"DISCOUNT_FIFTEEN_PERCENT",
|
||||
"DISCOUNT_STARTS_AT_SEVEN",
|
||||
"DISCOUNT_TWENTY_PERCENT",
|
||||
"SINGLE_STANDARD_NIGHT",
|
||||
"THREE_GUESTS_TWO_ROOMS",
|
||||
"TWO_GUESTS_ONE_ROOM"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}HOTEL_RATE",
|
||||
"mutant": "line 69: 1 -> 2 (const)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"BREAKFAST_PER_GUEST",
|
||||
"DISCOUNT_FIFTEEN_PERCENT",
|
||||
"TWO_GUESTS_ONE_ROOM"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}HOTEL_RATE",
|
||||
"mutant": "line 98: - -> + (arith)",
|
||||
"status": "killed",
|
||||
"hidden": "8/11",
|
||||
"failed_tests": [
|
||||
"DISCOUNT_FIFTEEN_PERCENT",
|
||||
"DISCOUNT_STARTS_AT_SEVEN",
|
||||
"DISCOUNT_TWENTY_PERCENT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "{{P}}HOTEL_RATE",
|
||||
"mutant": "line 104: abap_true -> abap_false (bool)",
|
||||
"status": "killed",
|
||||
"hidden": "4/11",
|
||||
"failed_tests": [
|
||||
"BREAKFAST_PER_GUEST",
|
||||
"DISCOUNT_FIFTEEN_PERCENT",
|
||||
"DISCOUNT_STARTS_AT_SEVEN",
|
||||
"DISCOUNT_TWENTY_PERCENT",
|
||||
"SINGLE_STANDARD_NIGHT",
|
||||
"THREE_GUESTS_TWO_ROOMS",
|
||||
"TWO_GUESTS_ONE_ROOM"
|
||||
]
|
||||
}
|
||||
],
|
||||
"valid": 5,
|
||||
"killed": 5,
|
||||
"kill_rate": 1.0,
|
||||
"ok": true
|
||||
}
|
||||
108
tasks_gen/eval/G0102/reference/hotel_rate.clas.abap
Normal file
108
tasks_gen/eval/G0102/reference/hotel_rate.clas.abap
Normal file
@@ -0,0 +1,108 @@
|
||||
CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_hotel_rate.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
|
||||
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
|
||||
METHODS room_count
|
||||
IMPORTING iv_guests TYPE i
|
||||
RETURNING VALUE(rv_rooms) TYPE i.
|
||||
METHODS nightly_rate
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_nights TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
METHODS net_room_total
|
||||
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}hotel_rate IMPLEMENTATION.
|
||||
METHOD {{p}}if_hotel_rate~calculate.
|
||||
rs_result-reason = validate( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests ).
|
||||
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
|
||||
rs_result-price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_result-price = net_room_total( iv_category = iv_category
|
||||
iv_nights = iv_nights
|
||||
iv_guests = iv_guests )
|
||||
+ extras( iv_nights = iv_nights
|
||||
iv_guests = iv_guests
|
||||
iv_breakfast = iv_breakfast ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF iv_nights < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
|
||||
ELSEIF iv_guests < 1.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
|
||||
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
|
||||
AND iv_category <> {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
|
||||
ELSE.
|
||||
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD room_count.
|
||||
rv_rooms = ( iv_guests + 1 ) DIV 2.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD nightly_rate.
|
||||
CASE iv_category.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-basic.
|
||||
rv_amount = '90.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-comfort.
|
||||
rv_amount = '140.00'.
|
||||
WHEN {{p}}if_hotel_rate=>c_category-suite.
|
||||
rv_amount = '260.00'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_nights >= 28.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_nights >= 14.
|
||||
rv_percent = 15.
|
||||
ELSEIF iv_nights >= 7.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD net_room_total.
|
||||
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
|
||||
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
|
||||
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
|
||||
rv_total = lv_total - lv_discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
DATA(lv_guest_nights) = iv_guests * iv_nights.
|
||||
rv_extras = lv_guest_nights * c_city_tax.
|
||||
IF iv_breakfast = abap_true.
|
||||
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
76
tasks_gen/eval/G0102/reference/hotel_rate.testclasses.abap
Normal file
76
tasks_gen/eval/G0102/reference/hotel_rate.testclasses.abap
Normal file
@@ -0,0 +1,76 @@
|
||||
CLASS ltc_hotel_rate DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_hotel_rate.
|
||||
METHODS setup.
|
||||
METHODS basic_room FOR TESTING.
|
||||
METHODS invalid_nights FOR TESTING.
|
||||
METHODS invalid_guests FOR TESTING.
|
||||
METHODS invalid_category FOR TESTING.
|
||||
METHODS breakfast_and_tax FOR TESTING.
|
||||
METHODS long_stay_discount FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_hotel_rate IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}hotel_rate( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD basic_room.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 1
|
||||
iv_guests = 1
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '93.00' )
|
||||
act = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_nights.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
|
||||
iv_nights = 0
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-nights
|
||||
act = ls_result-reason ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '0.00' )
|
||||
act = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_guests.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 4
|
||||
iv_guests = 0
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-guests
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_category.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = 'Z'
|
||||
iv_nights = 4
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_hotel_rate=>c_reason-category
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD breakfast_and_tax.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-basic
|
||||
iv_nights = 2
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '242.00' )
|
||||
act = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD long_stay_discount.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_category = {{p}}if_hotel_rate=>c_category-comfort
|
||||
iv_nights = 14
|
||||
iv_guests = 2
|
||||
iv_breakfast = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_hotel_rate=>ty_amount( '1750.00' )
|
||||
act = ls_result-price ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
29
tasks_gen/eval/G0102/seed/if_hotel_rate.intf.abap
Normal file
29
tasks_gen/eval/G0102/seed/if_hotel_rate.intf.abap
Normal file
@@ -0,0 +1,29 @@
|
||||
INTERFACE {{p}}if_hotel_rate PUBLIC.
|
||||
TYPES ty_category TYPE c LENGTH 1.
|
||||
TYPES ty_reason TYPE c LENGTH 10.
|
||||
TYPES ty_amount TYPE p LENGTH 10 DECIMALS 2.
|
||||
TYPES:
|
||||
BEGIN OF ty_result,
|
||||
reason TYPE ty_reason,
|
||||
price TYPE ty_amount,
|
||||
END OF ty_result.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
nights TYPE ty_reason VALUE 'NIGHTS',
|
||||
guests TYPE ty_reason VALUE 'GUESTS',
|
||||
category TYPE ty_reason VALUE 'CATEGORY',
|
||||
END OF c_reason.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_category,
|
||||
basic TYPE ty_category VALUE 'S',
|
||||
comfort TYPE ty_category VALUE 'C',
|
||||
suite TYPE ty_category VALUE 'U',
|
||||
END OF c_category.
|
||||
METHODS calculate
|
||||
IMPORTING iv_category TYPE ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
ENDINTERFACE.
|
||||
71
tasks_gen/eval/G0102/spec.md
Normal file
71
tasks_gen/eval/G0102/spec.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# 1. Goal
|
||||
Calculate the price of a hotel stay. A booking program calls the calculation
|
||||
before it shows the price to the guest. The program needs one reason code for
|
||||
each invalid input.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The interface {{P}}IF_HOTEL_RATE exists in package $TMP. It is active.
|
||||
- The interface has these types:
|
||||
- TY_CATEGORY: character, length 1.
|
||||
- TY_REASON: character, length 10.
|
||||
- TY_AMOUNT: packed number, length 10, 2 decimals.
|
||||
- TY_RESULT: structure with the components REASON (TY_REASON) and
|
||||
PRICE (TY_AMOUNT).
|
||||
- The interface has these constants:
|
||||
- C_REASON: OK, NIGHTS, GUESTS, CATEGORY.
|
||||
- C_CATEGORY: BASIC 'S', COMFORT 'C', SUITE 'U'.
|
||||
- The interface has one method:
|
||||
CALCULATE
|
||||
IMPORTING iv_category TYPE ty_category
|
||||
iv_nights TYPE i
|
||||
iv_guests TYPE i
|
||||
iv_breakfast TYPE abap_bool
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
|
||||
# 4. Contract
|
||||
- Create the class {{P}}HOTEL_RATE in package $TMP.
|
||||
- The class is public, final, and has a public constructor without parameters.
|
||||
- The class implements {{P}}IF_HOTEL_RATE.
|
||||
- Do not add other public methods.
|
||||
|
||||
# 5. Business rules
|
||||
Check the input in this sequence. Return the reason of the first check that
|
||||
fails and the price 0.
|
||||
1. If IV_NIGHTS is less than 1, return NIGHTS.
|
||||
2. If IV_GUESTS is less than 1, return GUESTS.
|
||||
3. If IV_CATEGORY is not BASIC, COMFORT or SUITE, return CATEGORY.
|
||||
4. Else return OK and calculate the price.
|
||||
|
||||
Calculate the price in this sequence:
|
||||
1. One room takes at most 2 guests. The number of rooms is the number of guests
|
||||
divided by 2, rounded up.
|
||||
2. The price of one room for one night is 90.00 for BASIC, 140.00 for COMFORT
|
||||
and 260.00 for SUITE.
|
||||
3. The room total is the number of rooms multiplied by the number of nights
|
||||
multiplied by the price of one room for one night.
|
||||
4. Long stay discount on the room total:
|
||||
- 28 nights or more: 20 %
|
||||
- 14 nights or more: 15 %
|
||||
- 7 nights or more: 10 %
|
||||
- less than 7 nights: no discount
|
||||
The discounted room total is the room total minus the discount.
|
||||
5. Breakfast costs 12.50 for one guest for one night. Add it if IV_BREAKFAST is
|
||||
true.
|
||||
6. City tax costs 3.00 for one guest for one night. Add it always.
|
||||
7. The price is the discounted room total plus breakfast plus city tax.
|
||||
|
||||
All amounts are exact to two decimals.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: 8.16.
|
||||
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
||||
variables. No comment that restates the code.
|
||||
- Out of scope: do not change {{P}}IF_HOTEL_RATE.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
51
tasks_gen/eval/G0102/task.json
Normal file
51
tasks_gen/eval/G0102/task.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"id": "G0102",
|
||||
"category": "A",
|
||||
"object_type": "CLAS",
|
||||
"difficulty": 2,
|
||||
"release_target": "v816",
|
||||
"expected_outcome": "implement",
|
||||
"budget": {
|
||||
"max_tool_calls": 60,
|
||||
"max_activations": 15
|
||||
},
|
||||
"seed": [
|
||||
{
|
||||
"type": "INTF",
|
||||
"name": "{{P}}IF_HOTEL_RATE",
|
||||
"file": "seed/if_hotel_rate.intf.abap",
|
||||
"description": "Hotel rate contract: types, reason codes, category codes and the calculate signature"
|
||||
}
|
||||
],
|
||||
"contract": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}HOTEL_RATE",
|
||||
"implements": "{{P}}IF_HOTEL_RATE"
|
||||
}
|
||||
],
|
||||
"out_of_scope": [
|
||||
"{{P}}IF_HOTEL_RATE"
|
||||
],
|
||||
"hidden_tests": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}T13_HIDDEN",
|
||||
"file": "hidden/t13_hidden.clas.abap",
|
||||
"description": "T13 hidden tests for the hotel rate calculation"
|
||||
}
|
||||
],
|
||||
"reference": [
|
||||
{
|
||||
"type": "CLAS",
|
||||
"name": "{{P}}HOTEL_RATE",
|
||||
"file": "reference/hotel_rate.clas.abap",
|
||||
"description": "Hotel rate calculator",
|
||||
"testclasses_file": "reference/hotel_rate.testclasses.abap"
|
||||
}
|
||||
],
|
||||
"craft_checks": [
|
||||
"method_length",
|
||||
"db_operation_in_loop"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user