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,21 @@
|
||||
* ==== TYPE: ST-ADD-GIVING ====
|
||||
* FEATURE: ADD ... GIVING (single and multi-source)
|
||||
* STATEMENT: ADD
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ADDGIV.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC 9(5) VALUE 30.
|
||||
01 WS-B PIC 9(5) VALUE 20.
|
||||
01 WS-SUM PIC 9(5) VALUE 0.
|
||||
01 WS-TOTAL PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
ADD 10 TO WS-A GIVING WS-SUM.
|
||||
ADD WS-A WS-B GIVING WS-TOTAL.
|
||||
IF WS-TOTAL = 60
|
||||
DISPLAY 'OK: 30+10+20=60'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: WRONG SUM'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,20 @@
|
||||
* ==== TYPE: ST-ADD-ROUNDED ====
|
||||
* FEATURE: ADD ROUNDED
|
||||
* STATEMENT: ADD ROUNDED
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ADDRND.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-VAL1 PIC 9(3)V99 VALUE 100.50.
|
||||
01 WS-VAL2 PIC 9(3)V99 VALUE 200.75.
|
||||
01 WS-RESULT PIC 9(3)V99 VALUE 0.
|
||||
01 WS-CHECK PIC 9(3)V99 VALUE 301.25.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
ADD WS-VAL1 TO WS-VAL2 GIVING WS-RESULT ROUNDED.
|
||||
IF WS-RESULT = WS-CHECK
|
||||
DISPLAY 'OK: 100.50+200.75=301.25'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: WRONG SUM'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,21 @@
|
||||
* ==== TYPE: ST-ADD-TO ====
|
||||
* FEATURE: ADD x TO y (constant / variable)
|
||||
* STATEMENT: ADD
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ADDTO.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-VALUE PIC 9(5) VALUE 100.
|
||||
01 WS-RESULT PIC 9(5) VALUE 0.
|
||||
01 WS-DELTA PIC 9(5) VALUE 25.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
ADD 50 TO WS-VALUE.
|
||||
MOVE WS-VALUE TO WS-RESULT.
|
||||
ADD WS-DELTA TO WS-RESULT.
|
||||
IF WS-RESULT = 175
|
||||
DISPLAY 'OK: 100+50+25=175'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: WRONG VALUE'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,26 @@
|
||||
* ==== TYPE: ST-COMPLEX ====
|
||||
* FEATURE: COMPUTE with multiple operators
|
||||
* STATEMENT: COMPUTE
|
||||
* BRANCHES: 4, DECISIONS: 2
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. COMPLX.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-X PIC 9(5) VALUE 10.
|
||||
01 WS-Y PIC 9(5) VALUE 20.
|
||||
01 WS-Z PIC 9(5) VALUE 5.
|
||||
01 WS-R1 PIC 9(5) VALUE 0.
|
||||
01 WS-R2 PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
COMPUTE WS-R1 = WS-X + WS-Y.
|
||||
COMPUTE WS-R2 = (WS-Y - WS-X) * WS-Z.
|
||||
IF WS-R1 = 30
|
||||
DISPLAY 'OK: R1=30'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: R1'.
|
||||
IF WS-R2 = 50
|
||||
DISPLAY 'OK: R2=50'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: R2'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,25 @@
|
||||
* ==== TYPE: ST-DIV-BY-GIVING ====
|
||||
* FEATURE: DIVIDE ... BY ... GIVING ... REMAINDER
|
||||
* STATEMENT: DIVIDE BY GIVING
|
||||
* BRANCHES: 4, DECISIONS: 2
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. DIVBYG.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC 9(5) VALUE 100.
|
||||
01 WS-B PIC 9(5) VALUE 30.
|
||||
01 WS-RESULT PIC 9(5) VALUE 0.
|
||||
01 WS-REM PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DIVIDE WS-A BY WS-B GIVING WS-RESULT
|
||||
REMAINDER WS-REM.
|
||||
IF WS-RESULT = 3
|
||||
DISPLAY 'OK: QUOTIENT=3'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: QUOTIENT'.
|
||||
IF WS-REM = 10
|
||||
DISPLAY 'OK: REMAINDER=10'
|
||||
ELSE
|
||||
DISPLAY 'ERROR: REMAINDER'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,19 @@
|
||||
* ==== TYPE: ST-MUL-BY ====
|
||||
* FEATURE: MULTIPLY ... BY (constant)
|
||||
* STATEMENT: MULTIPLY
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. MULBY.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-AMOUNT PIC 9(5) VALUE 50.
|
||||
01 WS-RESULT PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
MULTIPLY 3 BY WS-AMOUNT.
|
||||
MOVE WS-AMOUNT TO WS-RESULT.
|
||||
IF WS-RESULT = 150
|
||||
DISPLAY 'OK: 50*3=150'
|
||||
ELSE
|
||||
DISPLAY 'ERROR'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,19 @@
|
||||
* ==== TYPE: ST-MUL-GIVING ====
|
||||
* FEATURE: MULTIPLY ... BY ... GIVING
|
||||
* STATEMENT: MULTIPLY GIVING
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. MULGIV.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC 9(5) VALUE 7.
|
||||
01 WS-B PIC 9(5) VALUE 8.
|
||||
01 WS-RESULT PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
MULTIPLY WS-A BY WS-B GIVING WS-RESULT.
|
||||
IF WS-RESULT = 56
|
||||
DISPLAY 'OK: 7*8=56'
|
||||
ELSE
|
||||
DISPLAY 'ERROR'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,19 @@
|
||||
* ==== TYPE: ST-SUB-FROM ====
|
||||
* FEATURE: SUBTRACT ... FROM (constant / variable)
|
||||
* STATEMENT: SUBTRACT
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUBFRM.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-VALUE PIC 9(5) VALUE 100.
|
||||
01 WS-RESULT PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
SUBTRACT 30 FROM WS-VALUE.
|
||||
MOVE WS-VALUE TO WS-RESULT.
|
||||
IF WS-RESULT = 70
|
||||
DISPLAY 'OK: 100-30=70'
|
||||
ELSE
|
||||
DISPLAY 'ERROR'.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,19 @@
|
||||
* ==== TYPE: ST-SUB-GIVING ====
|
||||
* FEATURE: SUBTRACT ... FROM ... GIVING
|
||||
* STATEMENT: SUBTRACT
|
||||
* BRANCHES: 2, DECISIONS: 1
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUBGIV.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-TOTAL PIC 9(5) VALUE 500.
|
||||
01 WS-PAID PIC 9(5) VALUE 120.
|
||||
01 WS-BALANCE PIC 9(5) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
SUBTRACT WS-PAID FROM WS-TOTAL GIVING WS-BALANCE.
|
||||
IF WS-BALANCE = 380
|
||||
DISPLAY 'OK: 500-120=380'
|
||||
ELSE
|
||||
DISPLAY 'ERROR'.
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user