feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user