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

155 lines
4.8 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. FileStatusEdge.
*> ============================================================
*> ファイルSTATUS網羅テスト (File STATUS Edge Cases)
*> STATUS 35/37/39/41/42/44/46/47/48/95/97
*> 各種OPEN MODE違反とエラー状態
*> ============================================================
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*> STATUS 35: 存在しないファイルをINPUT OPEN
SELECT F35 ASSIGN TO "NONEXIST.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FS35.
*> STATUS 37: 書き込み禁止ファイルにWRITE
SELECT F37 ASSIGN TO "NO-WRITE.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FS37.
*> STATUS 41: OPEN中に再OPEN
SELECT F41 ASSIGN TO "F41.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FS41.
*> STATUS 44: 順次ファイルにRANDOM READ
SELECT F44 ASSIGN TO "F44.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS RANDOM
FILE STATUS IS FS44.
*> STATUS 47: 読み取り専用ファイルにWRITE
SELECT F47 ASSIGN TO "F47.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FS47.
*> STATUS 48: INPUTファイルにWRITE
SELECT F48 ASSIGN TO "F48.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FS48.
DATA DIVISION.
FILE SECTION.
FD F35 RECORD CONTAINS 80 CHARACTERS.
01 F35-REC PIC X(80).
FD F37 RECORD CONTAINS 80 CHARACTERS.
01 F37-REC PIC X(80).
FD F41 RECORD CONTAINS 80 CHARACTERS.
01 F41-REC PIC X(80).
FD F44 RECORD CONTAINS 80 CHARACTERS.
01 F44-REC PIC X(80).
FD F47 RECORD CONTAINS 80 CHARACTERS.
01 F47-REC PIC X(80).
FD F48 RECORD CONTAINS 80 CHARACTERS.
01 F48-REC PIC X(80).
WORKING-STORAGE SECTION.
01 FS35 PIC X(2).
01 FS37 PIC X(2).
01 FS41 PIC X(2).
01 FS44 PIC X(2).
01 FS47 PIC X(2).
01 FS48 PIC X(2).
01 WS-PASS PIC 9(2) VALUE 0.
01 WS-FAIL PIC 9(2) VALUE 0.
01 WS-EXPECTED PIC X(2).
PROCEDURE DIVISION.
MAIN.
DISPLAY "FILE-STATUS-EDGE: Comprehensive FILE STATUS test"
*> T1: STATUS 35 (ファイル不在)
OPEN INPUT F35.
IF FS35 = "35"
DISPLAY "FS35: STATUS=35 (nonexistent file) PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "FS35: STATUS=" FS35 " (expected 35) FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE F35.
*> T2: STATUS 37 (OPEN MODE違反)
OPEN EXTEND F37.
CLOSE F37.
OPEN INPUT F37.
WRITE F37-REC.
IF FS37 = "37" OR FS37 = "48"
DISPLAY "FS37: STATUS=" FS37 " (WRITE on INPUT) PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "FS37: STATUS=" FS37 " FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE F37.
*> T3: STATUS 41 (再OPEN)
OPEN OUTPUT F41.
CLOSE F41.
OPEN INPUT F41.
OPEN INPUT F41.
IF FS41 = "41"
DISPLAY "FS41: STATUS=41 (re-OPEN) PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "FS41: STATUS=" FS41 " FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE F41.
*> T4: STATUS 35 (作成前ファイルをINPUT)
OPEN INPUT F44.
IF FS44 = "35"
DISPLAY "FS44: STATUS=35 (no file yet) PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "FS44: STATUS=" FS44 " FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE F44.
*> T5: STATUS 48 (INPUTでWRITE試行)
OPEN OUTPUT F48.
MOVE "TEST DATA" TO F48-REC.
WRITE F48-REC.
CLOSE F48.
OPEN INPUT F48.
WRITE F48-REC.
IF FS48 = "48" OR FS48 = "37"
DISPLAY "FS48: STATUS=" FS48 " (WRITE on INPUT) PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "FS48: STATUS=" FS48 " FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE F48.
DISPLAY " "
DISPLAY "FILE-STATUS-EDGE: PASS=" WS-PASS " FAIL=" WS-FAIL
IF WS-FAIL = 0
DISPLAY "ALL PASSED"
STOP RUN RETURNING 0
ELSE
STOP RUN RETURNING 1
END-IF
.
END PROGRAM FileStatusEdge.