Files
NB-076 94400d50d4 feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 09:53:21 +08:00

202 lines
6.7 KiB
COBOL

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.