feat: add COBOL statement benchmark plan and 34 P0 sample programs
- docs/cobol-statement-benchmark-plan.md — full coverage matrix and gap analysis - 34 P0 COBOL samples: arithmetic(9), move(5), file(6), control(6), inspect(3), search(2), perform(3) - test-data/validate_statements.py — automatic validation script - Validation: 34/34 samples pass preprocess + extract_structure
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
* ==== TYPE: ST-DELETE ====
|
||||
* FEATURE: DELETE file record with INVALID KEY
|
||||
* STATEMENT: DELETE
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
* NOTE: DELETE INVALID KEY is pass-through; only IF counts
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. DELFIL.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE-A ASSIGN TO 'FILEA.DAT'
|
||||
ORGANIZATION IS INDEXED
|
||||
ACCESS IS DYNAMIC.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-A.
|
||||
01 REC-A PIC X(80).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-KEY PIC X(10) VALUE 'KEY001'.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN I-O FILE-A.
|
||||
MOVE WS-KEY TO REC-A.
|
||||
DELETE FILE-A
|
||||
INVALID KEY DISPLAY 'KEY NOT FOUND'
|
||||
NOT INVALID KEY DISPLAY 'OK: DELETED'.
|
||||
CLOSE FILE-A.
|
||||
IF WS-KEY = 'KEY001'
|
||||
DISPLAY 'OK: DELETE DONE'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: DELETE'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,30 @@
|
||||
* ==== TYPE: ST-READ-AT-END ====
|
||||
* FEATURE: READ with AT END / NOT AT END
|
||||
* STATEMENT: READ AT END
|
||||
* BRANCHES: 0, DECISIONS: 0
|
||||
* NOTE: READ AT END is pass-through; no IF
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. READAE.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT IN-FILE ASSIGN TO 'INDATA.DAT'.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD IN-FILE.
|
||||
01 IN-REC PIC X(80).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-STATUS PIC X VALUE 'N'.
|
||||
01 WS-DATA PIC X(80).
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN INPUT IN-FILE.
|
||||
READ IN-FILE INTO WS-DATA
|
||||
AT END MOVE 'Y' TO WS-STATUS
|
||||
NOT AT END MOVE 'N' TO WS-STATUS.
|
||||
IF WS-STATUS = 'Y'
|
||||
DISPLAY 'OK: AT END REACHED'
|
||||
ELSE
|
||||
DISPLAY 'OK: DATA READ'.
|
||||
CLOSE IN-FILE.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,33 @@
|
||||
* ==== TYPE: ST-READ-INTO ====
|
||||
* FEATURE: READ ... INTO with multiple fields
|
||||
* STATEMENT: READ INTO
|
||||
* BRANCHES: 0, DECISIONS: 0
|
||||
* NOTE: READ INTO is pass-through; no IF
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. READIN.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT IN-FILE ASSIGN TO 'INDATA.DAT'.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD IN-FILE.
|
||||
01 IN-REC.
|
||||
05 IN-ID PIC X(5).
|
||||
05 IN-AMT PIC 9(5).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-REC.
|
||||
05 WS-ID PIC X(5).
|
||||
05 WS-AMT PIC 9(5).
|
||||
01 WS-EOF PIC X VALUE 'N'.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN INPUT IN-FILE.
|
||||
READ IN-FILE INTO WS-REC
|
||||
AT END MOVE 'Y' TO WS-EOF.
|
||||
IF WS-EOF = 'N'
|
||||
DISPLAY 'OK: READ INTO'
|
||||
ELSE
|
||||
DISPLAY 'EOF'.
|
||||
CLOSE IN-FILE.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,27 @@
|
||||
* ==== TYPE: ST-REWRITE-FROM ====
|
||||
* FEATURE: REWRITE ... FROM
|
||||
* STATEMENT: REWRITE FROM
|
||||
* BRANCHES: 0, DECISIONS: 0
|
||||
* NOTE: REWRITE FROM is pass-through; no IF
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. REWFRM.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE-A ASSIGN TO 'FILEA.DAT'
|
||||
ORGANIZATION IS INDEXED
|
||||
ACCESS IS RANDOM.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-A.
|
||||
01 REC-A PIC X(80).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-UPD PIC X(80) VALUE 'UPDATED'.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN I-O FILE-A.
|
||||
MOVE WS-UPD TO REC-A.
|
||||
REWRITE REC-A FROM WS-UPD.
|
||||
CLOSE FILE-A.
|
||||
DISPLAY 'OK: REWRITE FROM'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,32 @@
|
||||
* ==== TYPE: ST-START ====
|
||||
* FEATURE: START with KEY IS
|
||||
* STATEMENT: START
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
* NOTE: START INVALID KEY is pass-through; only IF counts
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. STRT.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE-A ASSIGN TO 'FILEA.DAT'
|
||||
ORGANIZATION IS INDEXED
|
||||
ACCESS IS DYNAMIC.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-A.
|
||||
01 REC-A PIC X(80).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-KEY PIC X(10) VALUE 'K00050'.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN INPUT FILE-A.
|
||||
MOVE WS-KEY TO REC-A.
|
||||
START FILE-A KEY IS >= WS-KEY
|
||||
INVALID KEY DISPLAY 'START FAILED'
|
||||
NOT INVALID KEY DISPLAY 'OK: START'.
|
||||
CLOSE FILE-A.
|
||||
IF WS-KEY > SPACES
|
||||
DISPLAY 'OK: START DONE'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: START'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,26 @@
|
||||
* ==== TYPE: ST-WRITE-AFTER ====
|
||||
* FEATURE: WRITE AFTER/BEFORE ADVANCING
|
||||
* STATEMENT: WRITE AFTER
|
||||
* BRANCHES: 0, DECISIONS: 0
|
||||
* NOTE: WRITE AFTER is pass-through; no IF
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. WRTAFT.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT OUT-FILE ASSIGN TO 'OUTDATA.DAT'.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD OUT-FILE.
|
||||
01 OUT-REC PIC X(50).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-DATA PIC X(50) VALUE 'TEST RECORD'.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN OUTPUT OUT-FILE.
|
||||
MOVE WS-DATA TO OUT-REC.
|
||||
WRITE OUT-REC AFTER ADVANCING 1 LINE.
|
||||
WRITE OUT-REC BEFORE ADVANCING 2 LINES.
|
||||
CLOSE OUT-FILE.
|
||||
DISPLAY 'OK: WRITE AFTER/BEFORE'.
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user