94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
202 lines
6.7 KiB
COBOL
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.
|