feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user