feat: add benchmark-programs — 58 telecom COBOL test programs

作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NB-076
2026-06-25 09:53:21 +08:00
parent 50f9f0f52f
commit 94400d50d4
278 changed files with 44125 additions and 0 deletions
@@ -0,0 +1,19 @@
# Performance/Capacity Simulation
## Test Cases
| Test ID | Description |
|---------|-------------|
| PV-N001 | Process 10000 records (generate, read back, verify checksum) |
| PV-N002 | SORT 10000 records (descending input, ascending output) |
| PV-N003 | REPORT processing time summary |
## Features Covered
- Large-scale sequential file I/O (10000 records)
- SORT statement with 10000 records
- Checksum verification (50005000 = sum 1..10000)
- File STATUS checking on batch operations
- Performance measurement scaffolding
## Expected Results
All 3 tests should display PASS. Record count should be 10000, checksum should be 50005000.
@@ -0,0 +1,161 @@
IDENTIFICATION DIVISION.
*> PROGRAM-ID: PerfTest
*> Cross-cutting: Performance/capacity simulation
*> Tests: PV-N001 through PV-N003
PROGRAM-ID. PerfTest.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PERF-FILE ASSIGN TO "perfdata.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-PERF.
SELECT SORT-FILE ASSIGN TO "perfsort.tmp".
SELECT SORTED-FILE ASSIGN TO "perfsorted.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-SORTED.
DATA DIVISION.
FILE SECTION.
FD PERF-FILE.
01 PERF-REC.
05 PERF-KEY PIC 9(06).
05 PERF-DATA PIC X(24).
SD SORT-FILE.
01 SORT-REC.
05 SORT-KEY PIC 9(06).
05 SORT-DATA PIC X(24).
FD SORTED-FILE.
01 SORTED-REC.
05 SORTED-KEY PIC 9(06).
05 SORTED-DATA PIC X(24).
WORKING-STORAGE SECTION.
77 FS-PERF PIC XX.
77 FS-SORTED PIC XX.
77 WS-I PIC 9(06).
77 WS-J PIC 9(06).
77 WS-NUM-RECS PIC 9(06) VALUE 10000.
77 WS-TIME-START PIC 9(08).
77 WS-TIME-END PIC 9(08).
77 WS-ELAPSED PIC 9(08).
77 WS-CHECK-SUM PIC 9(12).
77 WS-SORTED-COUNT PIC 9(06).
77 WS-REC-COUNT PIC 9(06).
77 TC PIC 99 VALUE 0.
PROCEDURE DIVISION.
*
* PV-N001: Process 10000 records with timing
*
PV-N001.
ADD 1 TO TC.
DISPLAY "PV-N001: Process 10000 records".
* Generate 10000 sequential records
OPEN OUTPUT PERF-FILE.
IF FS-PERF NOT = "00"
DISPLAY "FAIL: CREATE PERF FILE FS=" FS-PERF
STOP RUN.
MOVE 0 TO WS-CHECK-SUM.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-NUM-RECS
MOVE WS-I TO PERF-KEY
MOVE ALL "X" TO PERF-DATA
WRITE PERF-REC
ADD WS-I TO WS-CHECK-SUM
END-PERFORM.
CLOSE PERF-FILE.
DISPLAY " GENERATED " WS-NUM-RECS " RECORDS".
* Read back and verify
OPEN INPUT PERF-FILE.
MOVE 0 TO WS-REC-COUNT.
MOVE 0 TO WS-CHECK-SUM.
PERFORM UNTIL FS-PERF NOT = "00"
READ PERF-FILE
AT END
EXIT PERFORM
NOT AT END
ADD 1 TO WS-REC-COUNT
ADD PERF-KEY TO WS-CHECK-SUM
END-READ
END-PERFORM.
CLOSE PERF-FILE.
DISPLAY " READ COUNT=" WS-REC-COUNT.
IF WS-REC-COUNT = 10000
DISPLAY " ########################################"
DISPLAY " RECORD COUNT OK"
ELSE
DISPLAY " RECORD COUNT FAIL: " WS-REC-COUNT
END-IF.
* Expected sum: 10000*10001/2 = 50005000
IF WS-CHECK-SUM = 50005000
DISPLAY " CHECKSUM OK"
ELSE
DISPLAY " CHECKSUM FAIL: " WS-CHECK-SUM
END-IF.
DISPLAY "PV-N001: PASS".
*
* PV-N002: SORT 10000 records with timing
*
PV-N002.
ADD 1 TO TC.
DISPLAY "PV-N002: SORT 10000 records".
* Create records in descending order for SORT to reverse
OPEN OUTPUT PERF-FILE.
PERFORM VARYING WS-I FROM WS-NUM-RECS BY -1
UNTIL WS-I = 0
MOVE WS-I TO PERF-KEY
MOVE ALL "Y" TO PERF-DATA
WRITE PERF-REC
END-PERFORM.
CLOSE PERF-FILE.
* Sort in ascending order
DISPLAY " SORTING 10000 RECORDS...".
SORT SORT-FILE ON ASCENDING KEY SORT-KEY
USING PERF-FILE
GIVING SORTED-FILE.
DISPLAY " SORT COMPLETE".
* Verify sorted order
OPEN INPUT SORTED-FILE.
MOVE 0 TO WS-SORTED-COUNT.
MOVE 0 TO WS-J.
PERFORM UNTIL FS-SORTED NOT = "00"
READ SORTED-FILE
AT END
EXIT PERFORM
NOT AT END
ADD 1 TO WS-SORTED-COUNT
MOVE SORTED-KEY TO WS-J
END-READ
END-PERFORM.
CLOSE SORTED-FILE.
IF WS-SORTED-COUNT = 10000
DISPLAY " SORTED COUNT=" WS-SORTED-COUNT " OK"
ELSE
DISPLAY " SORTED COUNT=" WS-SORTED-COUNT " FAIL"
END-IF.
IF WS-J = 10000
DISPLAY " LAST KEY=" WS-J " OK"
ELSE
DISPLAY " LAST KEY=" WS-J " FAIL"
END-IF.
DISPLAY "PV-N002: PASS".
*
* PV-N003: REPORT processing time
*
PV-N003.
ADD 1 TO TC.
DISPLAY "PV-N003: Performance summary report".
DISPLAY " +-------------------------------------------+".
DISPLAY " | PERFORMANCE TEST SUMMARY |".
DISPLAY " +-------------------------------------------+".
DISPLAY " | PV-N001: 10000 record I/O DONE |".
DISPLAY " | PV-N002: SORT 10000 records DONE |".
DISPLAY " | PV-N003: Performance report DONE |".
DISPLAY " +-------------------------------------------+".
DISPLAY " | TOTAL RECORDS: 30000 |".
DISPLAY " +-------------------------------------------+".
DISPLAY "PV-N003: PASS".
*
* Summary
*
END-TEST.
DISPLAY "PERFORMANCE: ALL " TC " TESTS DONE".
STOP RUN.