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,38 @@
{
"id": "G1123",
"pool": "train",
"object_type": "CLAS",
"category": "A",
"attempts": [
{
"stage": "validate",
"oracle": 89.2,
"null": 0
},
{
"stage": "validate",
"oracle": 100.0,
"null": 0,
"mutation": {
"valid": 5,
"killed": 3,
"ok": false
}
},
{
"stage": "bundle",
"errors": [
"invalid JSON: Unterminated string starting at: line 1 column 8619 (char 8618)"
],
"by_check": {
"json": 1
}
},
{
"stage": "validate",
"oracle": 0,
"null": 0
}
],
"accepted": false
}

View File

@@ -0,0 +1,142 @@
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}airport_fee.
METHODS setup.
METHODS assert_fee
IMPORTING iv_exp TYPE {{p}}airport_fee=>ty_amount
iv_act TYPE {{p}}airport_fee=>ty_amount.
METHODS light_zone1_eur FOR TESTING.
METHODS medium_zone2_night_eur FOR TESTING.
METHODS heavy_zone3_night_chf FOR TESTING.
METHODS light_zone2_eur FOR TESTING.
METHODS light_zone2_usd FOR TESTING.
METHODS unknown_zone_ignored FOR TESTING.
METHODS unknown_class_zero FOR TESTING.
METHODS unknown_curr_zero FOR TESTING.
METHODS zero_tonnes_zero FOR TESTING.
METHODS pax_zone2_eur FOR TESTING.
METHODS pax_zone1_chf FOR TESTING.
METHODS pax_invalid_zero FOR TESTING.
ENDCLASS.
CLASS {{p}}t02_hidden IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}airport_fee( ).
ENDMETHOD.
METHOD assert_fee.
cl_abap_unit_assert=>assert_equals( exp = iv_exp act = iv_act ).
ENDMETHOD.
METHOD light_zone1_eur.
assert_fee( iv_exp = '125.00'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD medium_zone2_night_eur.
assert_fee( iv_exp = '701.20'
iv_act = mo_cut->landing_fee( iv_class = 'M'
iv_zone = 'Z2'
iv_night = 'N'
iv_currency = 'EUR'
iv_tonnes = 20 ) ).
ENDMETHOD.
METHOD heavy_zone3_night_chf.
assert_fee( iv_exp = '1898.10'
iv_act = mo_cut->landing_fee( iv_class = 'H'
iv_zone = 'Z3'
iv_night = 'N'
iv_currency = 'CHF'
iv_tonnes = 30 ) ).
ENDMETHOD.
METHOD light_zone2_eur.
assert_fee( iv_exp = '562.40'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z2'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 40 ) ).
ENDMETHOD.
METHOD light_zone2_usd.
assert_fee( iv_exp = '646.80'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z2'
iv_night = 'D'
iv_currency = 'USD'
iv_tonnes = 40 ) ).
ENDMETHOD.
METHOD unknown_zone_ignored.
assert_fee( iv_exp = '245.00'
iv_act = mo_cut->landing_fee( iv_class = 'M'
iv_zone = 'Z9'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD unknown_class_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->landing_fee( iv_class = 'X'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD unknown_curr_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->landing_fee( iv_class = 'M'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'GBP'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD zero_tonnes_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 0 ) ).
ENDMETHOD.
METHOD pax_zone2_eur.
assert_fee( iv_exp = '1382.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z2'
iv_currency = 'EUR'
iv_passengers = 100 ) ).
ENDMETHOD.
METHOD pax_zone1_chf.
assert_fee( iv_exp = '10.51'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z1'
iv_currency = 'CHF'
iv_passengers = 1 ) ).
ENDMETHOD.
METHOD pax_invalid_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z1'
iv_currency = 'EUR'
iv_passengers = 0 ) ).
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z1'
iv_currency = 'EUR'
iv_passengers = -5 ) ).
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z1'
iv_currency = 'GBP'
iv_passengers = 5 ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,124 @@
CLASS {{p}}airport_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_class TYPE c LENGTH 1.
TYPES ty_zone TYPE c LENGTH 2.
TYPES ty_flag TYPE c LENGTH 1.
TYPES ty_curr TYPE c LENGTH 3.
TYPES ty_amount TYPE p LENGTH 10 DECIMALS 2.
METHODS landing_fee
IMPORTING iv_class TYPE ty_class
iv_zone TYPE ty_zone
iv_night TYPE ty_flag
iv_currency TYPE ty_curr
iv_tonnes TYPE i
RETURNING VALUE(rv_fee) TYPE ty_amount.
METHODS passenger_fee
IMPORTING iv_zone TYPE ty_zone
iv_currency TYPE ty_curr
iv_passengers TYPE i
RETURNING VALUE(rv_fee) TYPE ty_amount.
PRIVATE SECTION.
TYPES ty_calc TYPE p LENGTH 13 DECIMALS 4.
CONSTANTS:
c_night_per_tonne TYPE ty_amount VALUE '7.50',
c_pax_fee TYPE ty_amount VALUE '12.37',
c_full_percent TYPE ty_amount VALUE '100.00',
BEGIN OF c_rate,
eur TYPE ty_amount VALUE '1.00',
usd TYPE ty_amount VALUE '1.15',
chf TYPE ty_amount VALUE '0.85',
END OF c_rate.
METHODS base_per_tonne
IMPORTING iv_class TYPE ty_class
RETURNING VALUE(rv_fee) TYPE ty_amount.
METHODS zone_percent
IMPORTING iv_zone TYPE ty_zone
RETURNING VALUE(rv_percent) TYPE ty_amount.
METHODS zone_surcharge
IMPORTING iv_zone TYPE ty_zone
RETURNING VALUE(rv_surcharge) TYPE ty_amount.
METHODS convert
IMPORTING iv_amount TYPE ty_calc
iv_currency TYPE ty_curr
RETURNING VALUE(rv_fee) TYPE ty_calc.
ENDCLASS.
CLASS {{p}}airport_fee IMPLEMENTATION.
METHOD landing_fee.
IF iv_tonnes < 1.
RETURN.
ENDIF.
DATA lv_base TYPE ty_amount.
lv_base = base_per_tonne( iv_class ).
IF lv_base IS INITIAL.
RETURN.
ENDIF.
DATA lv_percent TYPE ty_amount.
lv_percent = c_full_percent + zone_percent( iv_zone ).
DATA lv_per_tonne TYPE ty_calc.
lv_per_tonne = lv_base * lv_percent / c_full_percent.
IF iv_night = 'N'.
lv_per_tonne = lv_per_tonne + c_night_per_tonne.
ENDIF.
DATA lv_converted TYPE ty_calc.
lv_converted = convert( iv_amount = lv_per_tonne iv_currency = iv_currency ).
rv_fee = lv_converted * iv_tonnes.
ENDMETHOD.
METHOD passenger_fee.
IF iv_passengers < 1.
RETURN.
ENDIF.
DATA lv_per_pax TYPE ty_amount.
lv_per_pax = c_pax_fee + zone_surcharge( iv_zone ).
DATA lv_converted TYPE ty_calc.
lv_converted = convert( iv_amount = lv_per_pax iv_currency = iv_currency ).
rv_fee = lv_converted * iv_passengers.
ENDMETHOD.
METHOD base_per_tonne.
CASE iv_class.
WHEN 'L'.
rv_fee = '12.50'.
WHEN 'M'.
rv_fee = '24.50'.
WHEN 'H'.
rv_fee = '52.50'.
ENDCASE.
ENDMETHOD.
METHOD zone_percent.
CASE iv_zone.
WHEN 'Z2'.
rv_percent = '12.50'.
WHEN 'Z3'.
rv_percent = '27.50'.
ENDCASE.
ENDMETHOD.
METHOD zone_surcharge.
CASE iv_zone.
WHEN 'Z2'.
rv_surcharge = '1.45'.
WHEN 'Z3'.
rv_surcharge = '2.90'.
ENDCASE.
ENDMETHOD.
METHOD convert.
CASE iv_currency.
WHEN 'EUR'.
rv_fee = round( val = iv_amount * c_rate-eur dec = 2 ).
WHEN 'USD'.
rv_fee = round( val = iv_amount * c_rate-usd dec = 2 ).
WHEN 'CHF'.
rv_fee = round( val = iv_amount * c_rate-chf dec = 2 ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,95 @@
CLASS ltc_airport_fee DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}airport_fee.
METHODS setup.
METHODS assert_fee
IMPORTING iv_exp TYPE {{p}}airport_fee=>ty_amount
iv_act TYPE {{p}}airport_fee=>ty_amount.
METHODS light_zone1_eur FOR TESTING.
METHODS medium_zone2_night_eur FOR TESTING.
METHODS heavy_zone3_night_chf FOR TESTING.
METHODS light_zone2_eur FOR TESTING.
METHODS unknown_class_zero FOR TESTING.
METHODS unknown_curr_zero FOR TESTING.
METHODS pax_zone2_eur FOR TESTING.
METHODS zero_pax_zero FOR TESTING.
ENDCLASS.
CLASS ltc_airport_fee IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}airport_fee( ).
ENDMETHOD.
METHOD assert_fee.
cl_abap_unit_assert=>assert_equals( exp = iv_exp act = iv_act ).
ENDMETHOD.
METHOD light_zone1_eur.
assert_fee( iv_exp = '125.00'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD medium_zone2_night_eur.
assert_fee( iv_exp = '701.20'
iv_act = mo_cut->landing_fee( iv_class = 'M'
iv_zone = 'Z2'
iv_night = 'N'
iv_currency = 'EUR'
iv_tonnes = 20 ) ).
ENDMETHOD.
METHOD heavy_zone3_night_chf.
assert_fee( iv_exp = '1898.10'
iv_act = mo_cut->landing_fee( iv_class = 'H'
iv_zone = 'Z3'
iv_night = 'N'
iv_currency = 'CHF'
iv_tonnes = 30 ) ).
ENDMETHOD.
METHOD light_zone2_eur.
assert_fee( iv_exp = '562.40'
iv_act = mo_cut->landing_fee( iv_class = 'L'
iv_zone = 'Z2'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 40 ) ).
ENDMETHOD.
METHOD unknown_class_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->landing_fee( iv_class = 'X'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'EUR'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD unknown_curr_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->landing_fee( iv_class = 'M'
iv_zone = 'Z1'
iv_night = 'D'
iv_currency = 'GBP'
iv_tonnes = 10 ) ).
ENDMETHOD.
METHOD pax_zone2_eur.
assert_fee( iv_exp = '1382.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z2'
iv_currency = 'EUR'
iv_passengers = 100 ) ).
ENDMETHOD.
METHOD zero_pax_zero.
assert_fee( iv_exp = '0.00'
iv_act = mo_cut->passenger_fee( iv_zone = 'Z1'
iv_currency = 'EUR'
iv_passengers = 0 ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,78 @@
# 1. Goal
An airport charges a landing fee and a passenger fee for each aircraft movement.
The operations desk calls the calculation before it issues the invoice.
# 2. Open questions
None.
# 3. Context
- The class {{P}}AIRPORT_FEE is new. It is in package $TMP.
- The airport uses short codes. A weight class has one character. A noise zone
has two characters. A night flag has one character. A currency has three
characters.
- The landing fee is charged for each tonne of the maximum take-off mass.
# 4. Contract
- Create the class {{P}}AIRPORT_FEE in package $TMP.
- The class is public, final, and has a public constructor without parameters.
- Define these public types:
- TY_CLASS TYPE c LENGTH 1
- TY_ZONE TYPE c LENGTH 2
- TY_FLAG TYPE c LENGTH 1
- TY_CURR TYPE c LENGTH 3
- TY_AMOUNT TYPE p LENGTH 10 DECIMALS 2
- Define these public methods:
- LANDING_FEE
IMPORTING iv_class TYPE ty_class
iv_zone TYPE ty_zone
iv_night TYPE ty_flag
iv_currency TYPE ty_curr
iv_tonnes TYPE i
RETURNING VALUE(rv_fee) TYPE ty_amount
- PASSENGER_FEE
IMPORTING iv_zone TYPE ty_zone
iv_currency TYPE ty_curr
iv_passengers TYPE i
RETURNING VALUE(rv_fee) TYPE ty_amount
- Do not add other public methods.
# 5. Business rules
## 5.1 Landing fee
Apply the rules in this sequence.
1. If iv_currency is not EUR, USD or CHF, return 0.00.
2. If iv_class is not L, M or H, return 0.00.
3. If iv_tonnes is less than 1, return 0.00.
4. The base fee for one tonne is 12.50 EUR for L, 24.50 EUR for M and 52.50 EUR
for H.
5. The noise zone gives a surcharge on the base fee for one tonne. Z1 gives
0 percent, Z2 gives 12.5 percent and Z3 gives 27.5 percent. Any other zone
gives 0 percent.
6. If iv_night is N, add 7.50 EUR to the fee for one tonne.
7. Convert the fee for one tonne with the currency rate and round it to
2 decimals. EUR is 1.00, USD is 1.15 and CHF is 0.85.
8. Multiply the rounded fee for one tonne by iv_tonnes. The result is the
landing fee.
## 5.2 Passenger fee
Apply the rules in this sequence.
1. If iv_currency is not EUR, USD or CHF, return 0.00.
2. If iv_passengers is less than 1, return 0.00.
3. The fee for one passenger is 12.37 EUR.
4. The noise zone gives a surcharge for each passenger. Z1 gives 0.00 EUR, Z2
gives 1.45 EUR and Z3 gives 2.90 EUR. Any other zone gives 0.00 EUR.
5. Convert the fee for one passenger with the currency rate and round it to
2 decimals. EUR is 1.00, USD is 1.15 and CHF is 0.85.
6. Multiply the rounded fee for one passenger by iv_passengers. The result is
the passenger fee.
# 6. Constraints
- Release target: SAP_BASIS 8.16 (ABAP Platform 2025).
- Coding standards: Clean ABAP. Method length below 40 statements. No global
variables.
- Out of scope: no database access, no ALV list, no CDS view.
# 7. Acceptance
- The class is active and has no syntax error.
- The hidden tests pass.
- Write your own ABAP Unit tests for the class.

View File

@@ -0,0 +1,41 @@
{
"id": "G1123",
"category": "A",
"object_type": "CLAS",
"difficulty": 2,
"release_target": "v816",
"expected_outcome": "implement",
"budget": {
"max_tool_calls": 60,
"max_activations": 15
},
"seed": [],
"contract": [
{
"type": "CLAS",
"name": "{{P}}AIRPORT_FEE"
}
],
"out_of_scope": [],
"hidden_tests": [
{
"type": "CLAS",
"name": "{{P}}T02_HIDDEN",
"file": "hidden/t02_hidden.clas.abap",
"description": "T02 hidden tests for the airport fee class"
}
],
"reference": [
{
"type": "CLAS",
"name": "{{P}}AIRPORT_FEE",
"file": "reference/airport_fee.clas.abap",
"description": "Airport landing fee and passenger fee calculator",
"testclasses_file": "reference/airport_fee.testclasses.abap"
}
],
"craft_checks": [
"method_length",
"no_global_variables"
]
}