Files
cobol-java-v3/benchmark-programs/cross-cutting/edge-cases/prog-struct-edge.cbl
T
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

143 lines
4.2 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. ProgStructEdge.
*> ============================================================
*> 程序構造境界テスト (Program Structure Edge Cases)
*> レガシーCOBOL構造: PERFORM THRU, GO TO DEPENDING ON,
*> 段落スルー, ALTER(非推奨), 複数SECTION
*> ============================================================
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SWITCH PIC X(1) VALUE 'N'.
88 WS-ON VALUE 'Y'.
01 WS-COUNT PIC 9(5) VALUE 0.
01 WS-GO-TO-IDX PIC 9(1) VALUE 0.
01 WS-PASS PIC 9(2) VALUE 0.
01 WS-FAIL PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
MAIN.
DISPLAY "PROG-STRUCT-EDGE: Program structure edge tests"
*> Test 1: PERFORM THRU (段落範囲実行)
ADD 1 TO WS-COUNT.
DISPLAY "T1-THRU: PERFORM THRU para range"
PERFORM PARA-A THRU PARA-C
DISPLAY "T1-THRU: PASS"
ADD 1 TO WS-PASS.
*> Test 2: 段落スルー (Paragraph fall-through)
ADD 1 TO WS-COUNT.
DISPLAY "T2-FALL: Paragraph fall-through (A->B)"
PERFORM PARA-D THRU PARA-E
DISPLAY "T2-FALL: PASS"
ADD 1 TO WS-PASS.
*> Test 3: GO TO DEPENDING ON
ADD 1 TO WS-COUNT.
DISPLAY "T3-GOTO: GO TO DEPENDING ON"
MOVE 0 TO WS-GO-TO-IDX.
GO TO PARA-X PARA-Y PARA-Z
DEPENDING ON WS-GO-TO-IDX.
*> WS-GO-TO-IDX=0 → 次段落へ (何も実行しない)
DISPLAY "T3-GOTO: IDX=0 skipped (PASS)"
ADD 1 TO WS-PASS.
MOVE 2 TO WS-GO-TO-IDX.
GO TO PARA-X PARA-Y PARA-Z
DEPENDING ON WS-GO-TO-IDX
. *> ここには来ない
*> Test 4: GO TO (単純)
ADD 1 TO WS-COUNT.
DISPLAY "T4-GOTO-SIMPLE: Simple GO TO"
GO TO PARA-END-T4.
DISPLAY "T4-GOTO: FAIL - should not reach"
ADD 1 TO WS-FAIL.
GO TO PARA-END-T4-EXIT.
PARA-END-T4.
DISPLAY "T4-GOTO-SIMPLE: PASS"
ADD 1 TO WS-PASS.
PARA-END-T4-EXIT.
CONTINUE.
*> Test 5: EXIT PARAGRAPH vs EXIT SECTION
ADD 1 TO WS-COUNT.
DISPLAY "T5-EXIT: EXIT PARAGRAPH"
PERFORM PARA-EXIT-DEMO
DISPLAY "T5-EXIT: PASS"
ADD 1 TO WS-PASS.
*> Test 6: ALTER (非推奨だがレガシーCOBOLに存在)
ADD 1 TO WS-COUNT.
DISPLAY "T6-ALTER: ALTER (legacy)"
ALTER PARA-ALTER-TARGET TO PROCEED TO PARA-ALTER-OK
GO TO PARA-ALTER-TARGET.
PARA-ALTER-TARGET.
DISPLAY "T6-ALTER: FAIL - old path"
ADD 1 TO WS-FAIL.
GO TO PARA-ALTER-DONE.
PARA-ALTER-OK.
DISPLAY "T6-ALTER: PASS"
ADD 1 TO WS-PASS.
PARA-ALTER-DONE.
CONTINUE.
*> Summary
DISPLAY " "
DISPLAY "PROG-STRUCT-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
.
*> === PERFORM THRU 段落群 ===
PARA-A.
DISPLAY " PARA-A: start"
.
PARA-B.
DISPLAY " PARA-B: middle (THRU includes)"
.
PARA-C.
DISPLAY " PARA-C: end (THRU target)"
.
*> === 段落スルー デモ ===
PARA-D.
DISPLAY " PARA-D: fall through to PARA-E"
.
PARA-E.
DISPLAY " PARA-E: reached via fall-through"
.
*> === GO TO DEPENDING ON 飛び先 ===
PARA-X.
DISPLAY " PARA-X: IDX=1"
.
PARA-Y.
DISPLAY " PARA-Y: IDX=2"
.
PARA-Z.
DISPLAY " PARA-Z: IDX=3"
.
*> === EXIT PARAGRAPH デモ ===
PARA-EXIT-DEMO.
DISPLAY " Before EXIT PARAGRAPH"
IF WS-PASS >= 0
EXIT PARAGRAPH
END-IF
DISPLAY " After EXIT PARAGRAPH (NOT reached)"
.
END PROGRAM ProgStructEdge.