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:
98
tasks_gen/eval/G0115/spec.md
Normal file
98
tasks_gen/eval/G0115/spec.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# 1. Goal
|
||||
A vending machine operator plans the refill of its vending machines. A planning
|
||||
program collects the machines and the refill quantities. The program then asks
|
||||
the planner for the machines with a low fill level, for the largest refills, and
|
||||
for the totals per district. The program needs one class for this work.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- Package $TMP is the development package.
|
||||
- Only the class is in scope. The planning program is not in scope.
|
||||
- A machine has a machine ID, a district, and a fill level in percent.
|
||||
- A refill is a quantity of items for one machine.
|
||||
- The class holds the machines of one planning run in memory.
|
||||
- One program calls the class many times during a planning run.
|
||||
|
||||
# 4. Contract
|
||||
Create the class {{P}}REFILL_PLANNER in package $TMP.
|
||||
The class is public and final. It has a public constructor without parameters.
|
||||
Do not add other public methods.
|
||||
|
||||
The public section of the class contains these types:
|
||||
- ty_machine_id TYPE c LENGTH 8
|
||||
- ty_district TYPE c LENGTH 4
|
||||
- ty_quantity TYPE i
|
||||
- ty_fill_level TYPE i
|
||||
- ty_machine with the components machine_id TYPE ty_machine_id,
|
||||
district TYPE ty_district, and fill_level TYPE ty_fill_level
|
||||
- tt_machines with the line type ty_machine
|
||||
- ty_refill with the components machine_id TYPE ty_machine_id and
|
||||
quantity TYPE ty_quantity
|
||||
- tt_refills with the line type ty_refill
|
||||
- ty_district_summary with the components district TYPE ty_district,
|
||||
machines TYPE i, and quantity TYPE ty_quantity
|
||||
- tt_district_summary with the line type ty_district_summary
|
||||
|
||||
The class has these public methods:
|
||||
- add_machine with the importing parameters iv_machine_id TYPE ty_machine_id,
|
||||
iv_district TYPE ty_district, and iv_fill_level TYPE ty_fill_level.
|
||||
- add_refill with the importing parameters iv_machine_id TYPE ty_machine_id and
|
||||
iv_quantity TYPE ty_quantity and with the returning parameter rv_accepted TYPE
|
||||
abap_bool.
|
||||
- get_refill with the importing parameter iv_machine_id TYPE ty_machine_id and
|
||||
the returning parameter rv_quantity TYPE ty_quantity.
|
||||
- machines_below with the importing parameter iv_fill_level TYPE ty_fill_level
|
||||
and the returning parameter rt_machines TYPE tt_machines.
|
||||
- top_refills with the importing parameter iv_count TYPE i and the returning
|
||||
parameter rt_refills TYPE tt_refills.
|
||||
- district_summary with the returning parameter rt_summary TYPE
|
||||
tt_district_summary.
|
||||
- total_quantity with the returning parameter rv_total TYPE ty_quantity.
|
||||
|
||||
# 5. Business rules
|
||||
1. A new instance of the class holds no machine.
|
||||
2. The key of a machine is the machine ID. Two machines with the same machine ID
|
||||
are one machine.
|
||||
3. Convert every machine ID and every district to upper case before the class
|
||||
stores it or compares it.
|
||||
4. add_machine: If the machine ID is not known, add the machine with the given
|
||||
district and the given fill level. If the machine ID is known, replace the
|
||||
district and the fill level of the machine. The refill quantity of the
|
||||
machine does not change.
|
||||
5. add_refill: If iv_quantity is zero or less, return abap_false and change
|
||||
nothing.
|
||||
6. add_refill: If the machine ID is not known, return abap_false and change
|
||||
nothing.
|
||||
7. add_refill: Else add iv_quantity to the refill quantity of the machine and
|
||||
return abap_true.
|
||||
8. get_refill: Return the refill quantity of the machine. Return 0 if the
|
||||
machine has no refill quantity or if the machine ID is not known.
|
||||
9. machines_below: Return all machines with a fill level that is less than
|
||||
iv_fill_level. Sort the result by fill level in ascending order. Sort
|
||||
machines with the same fill level by machine ID in ascending order.
|
||||
10. top_refills: Return the machines that have a refill quantity greater than
|
||||
zero. The result has at most iv_count entries. Sort the result by refill
|
||||
quantity in descending order. Sort machines with the same refill quantity
|
||||
by machine ID in ascending order. If iv_count is zero or less, return an
|
||||
empty table. If fewer machines have a refill quantity, return all of them.
|
||||
11. district_summary: Return one row for each district that has at least one
|
||||
machine. machines is the number of machines in the district. quantity is
|
||||
the sum of the refill quantities of the machines in the district. Sort the
|
||||
result by district in ascending order.
|
||||
12. total_quantity: Return the sum of the refill quantities of all machines.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
|
||||
- Coding standards: Clean ABAP. Keep every method below 40 statements. Use no
|
||||
global variable. Add no comment that restates the code. Pass large parameters
|
||||
by reference.
|
||||
- Out of scope: database tables, CDS views, reports, function modules, and
|
||||
screen programming.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
- The class has no ATC finding of priority 1 or priority 2.
|
||||
Reference in New Issue
Block a user