feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
*> PROGRAM-ID: VarLenTest
|
||||
*> Cross-cutting: Variable-length records and ODO tables
|
||||
*> Tests: VL-N001 through VL-N006
|
||||
PROGRAM-ID. VarLenTest.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT VARYING-FILE ASSIGN TO "varying.dat"
|
||||
ORGANIZATION IS SEQUENTIAL
|
||||
ACCESS MODE IS SEQUENTIAL
|
||||
FILE STATUS IS FS-VARY.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD VARYING-FILE
|
||||
RECORD IS VARYING IN SIZE FROM 1 TO 99 CHARACTERS
|
||||
DEPENDING ON REC-LEN.
|
||||
01 VARYING-REC.
|
||||
05 VR-KEY PIC X(04).
|
||||
05 VR-DATA PIC X(95).
|
||||
WORKING-STORAGE SECTION.
|
||||
77 FS-VARY PIC XX.
|
||||
77 REC-LEN PIC 99.
|
||||
77 I PIC 99.
|
||||
77 WS-TOTAL PIC 9999.
|
||||
77 WS-ODO-COUNT PIC 99.
|
||||
01 WS-ODO-TABLE.
|
||||
05 WS-ODO-ENTRY OCCURS 1 TO 20 TIMES
|
||||
DEPENDING ON WS-ODO-COUNT.
|
||||
10 WS-ODO-NUM PIC 99.
|
||||
77 WS-SHORT PIC X(10) VALUE "SHORT".
|
||||
77 WS-MED PIC X(30) VALUE "MEDIUM DATA RECORD".
|
||||
77 WS-LONG PIC X(80) VALUE
|
||||
"LONG DATA RECORD WITH PADDING FOR VARYING LENGTH TEST".
|
||||
*> Test counter
|
||||
77 TC PIC 99 VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
*
|
||||
* VL-N001: Write varying-length records (short, medium, long)
|
||||
*
|
||||
VL-N001.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N001: Write varying-length records".
|
||||
OPEN OUTPUT VARYING-FILE.
|
||||
IF FS-VARY NOT = "00"
|
||||
DISPLAY "FAIL OPEN OUTPUT FS=" FS-VARY
|
||||
STOP RUN.
|
||||
MOVE 14 TO REC-LEN.
|
||||
MOVE "V001" TO VR-KEY.
|
||||
MOVE WS-SHORT TO VR-DATA.
|
||||
WRITE VARYING-REC.
|
||||
IF FS-VARY NOT = "00"
|
||||
DISPLAY "FAIL WRITE V001 FS=" FS-VARY
|
||||
END-IF.
|
||||
MOVE 34 TO REC-LEN.
|
||||
MOVE "V002" TO VR-KEY.
|
||||
MOVE WS-MED TO VR-DATA.
|
||||
WRITE VARYING-REC.
|
||||
IF FS-VARY NOT = "00"
|
||||
DISPLAY "FAIL WRITE V002 FS=" FS-VARY
|
||||
END-IF.
|
||||
MOVE 84 TO REC-LEN.
|
||||
MOVE "V003" TO VR-KEY.
|
||||
MOVE WS-LONG TO VR-DATA.
|
||||
WRITE VARYING-REC.
|
||||
IF FS-VARY NOT = "00"
|
||||
DISPLAY "FAIL WRITE V003 FS=" FS-VARY
|
||||
END-IF.
|
||||
CLOSE VARYING-FILE.
|
||||
DISPLAY "VL-N001: PASS".
|
||||
*
|
||||
* VL-N002: Read back varying-length records, verify lengths
|
||||
*
|
||||
VL-N002.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N002: Read back varying-length records".
|
||||
OPEN INPUT VARYING-FILE.
|
||||
IF FS-VARY NOT = "00"
|
||||
DISPLAY "FAIL OPEN INPUT FS=" FS-VARY
|
||||
STOP RUN.
|
||||
READ VARYING-FILE.
|
||||
IF FS-VARY = "00"
|
||||
DISPLAY " READ KEY=" VR-KEY " LEN=" REC-LEN
|
||||
IF VR-KEY = "V001" AND REC-LEN = 14
|
||||
DISPLAY " V001 MATCH"
|
||||
ELSE
|
||||
DISPLAY " V001 MISMATCH"
|
||||
END-IF
|
||||
END-IF.
|
||||
READ VARYING-FILE.
|
||||
IF FS-VARY = "00"
|
||||
DISPLAY " READ KEY=" VR-KEY " LEN=" REC-LEN
|
||||
IF VR-KEY = "V002" AND REC-LEN = 34
|
||||
DISPLAY " V002 MATCH"
|
||||
ELSE
|
||||
DISPLAY " V002 MISMATCH"
|
||||
END-IF
|
||||
END-IF.
|
||||
READ VARYING-FILE.
|
||||
IF FS-VARY = "00"
|
||||
DISPLAY " READ KEY=" VR-KEY " LEN=" REC-LEN
|
||||
IF VR-KEY = "V003" AND REC-LEN = 84
|
||||
DISPLAY " V003 MATCH"
|
||||
ELSE
|
||||
DISPLAY " V003 MISMATCH"
|
||||
END-IF
|
||||
END-IF.
|
||||
CLOSE VARYING-FILE.
|
||||
DISPLAY "VL-N002: PASS".
|
||||
*
|
||||
* VL-N003: OCCURS DEPENDING ON table manipulation
|
||||
*
|
||||
VL-N003.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N003: ODO table with 5 entries".
|
||||
MOVE 5 TO WS-ODO-COUNT.
|
||||
PERFORM VARYING I FROM 1 BY 1 UNTIL I > WS-ODO-COUNT
|
||||
MOVE I TO WS-ODO-NUM(I)
|
||||
END-PERFORM.
|
||||
MOVE 0 TO WS-TOTAL.
|
||||
PERFORM VARYING I FROM 1 BY 1 UNTIL I > WS-ODO-COUNT
|
||||
ADD WS-ODO-NUM(I) TO WS-TOTAL
|
||||
END-PERFORM.
|
||||
IF WS-TOTAL = 15
|
||||
DISPLAY " ODO 1..5 SUM=" WS-TOTAL " OK"
|
||||
ELSE
|
||||
DISPLAY " ODO 1..5 SUM=" WS-TOTAL " FAIL"
|
||||
END-IF.
|
||||
DISPLAY "VL-N003: PASS".
|
||||
*
|
||||
* VL-N004: Resize ODO to 10 entries
|
||||
*
|
||||
VL-N004.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N004: ODO table resized to 10 entries".
|
||||
MOVE 10 TO WS-ODO-COUNT.
|
||||
PERFORM VARYING I FROM 1 BY 1 UNTIL I > WS-ODO-COUNT
|
||||
MOVE I TO WS-ODO-NUM(I)
|
||||
END-PERFORM.
|
||||
MOVE 0 TO WS-TOTAL.
|
||||
PERFORM VARYING I FROM 1 BY 1 UNTIL I > WS-ODO-COUNT
|
||||
ADD WS-ODO-NUM(I) TO WS-TOTAL
|
||||
END-PERFORM.
|
||||
IF WS-TOTAL = 55
|
||||
DISPLAY " ODO 1..10 SUM=" WS-TOTAL " OK"
|
||||
ELSE
|
||||
DISPLAY " ODO 1..10 SUM=" WS-TOTAL " FAIL"
|
||||
END-IF.
|
||||
*
|
||||
* VL-N004 sub: zero-length ODO
|
||||
*
|
||||
MOVE 0 TO WS-ODO-COUNT.
|
||||
MOVE 999 TO WS-TOTAL.
|
||||
MOVE 0 TO WS-TOTAL.
|
||||
IF WS-TOTAL = 0
|
||||
DISPLAY " ODO zero entries sum=" WS-TOTAL " OK"
|
||||
ELSE
|
||||
DISPLAY " ODO zero entries sum=" WS-TOTAL " FAIL"
|
||||
END-IF.
|
||||
DISPLAY "VL-N004: PASS".
|
||||
*
|
||||
* VL-N005: Write maximum length record (99 bytes)
|
||||
*
|
||||
VL-N005.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N005: Write max-length record (99)".
|
||||
OPEN EXTEND VARYING-FILE.
|
||||
MOVE 99 TO REC-LEN.
|
||||
MOVE "V005" TO VR-KEY.
|
||||
MOVE ALL "X" TO VR-DATA.
|
||||
WRITE VARYING-REC.
|
||||
IF FS-VARY = "00"
|
||||
DISPLAY " MAX WRITE OK"
|
||||
ELSE
|
||||
DISPLAY " MAX WRITE FAIL FS=" FS-VARY
|
||||
END-IF.
|
||||
CLOSE VARYING-FILE.
|
||||
DISPLAY "VL-N005: PASS".
|
||||
*
|
||||
* VL-N006: Write minimum length record (1 byte)
|
||||
*
|
||||
VL-N006.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "VL-N006: Write min-length record (1)".
|
||||
OPEN EXTEND VARYING-FILE.
|
||||
MOVE 1 TO REC-LEN.
|
||||
MOVE "V006" TO VR-KEY.
|
||||
WRITE VARYING-REC.
|
||||
IF FS-VARY = "00"
|
||||
DISPLAY " MIN WRITE OK"
|
||||
ELSE
|
||||
DISPLAY " MIN WRITE FAIL FS=" FS-VARY
|
||||
END-IF.
|
||||
CLOSE VARYING-FILE.
|
||||
DISPLAY "VL-N006: PASS".
|
||||
*
|
||||
* Summary
|
||||
*
|
||||
END-TEST.
|
||||
DISPLAY "VARIABLE-LENGTH: ALL " TC " TESTS DONE".
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user