Files
cobol-java-v3/benchmark-programs/cross-cutting/edge-cases/call-edge-case.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

94 lines
3.3 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. CallEdgeCase.
*> ============================================================
*> CALL境界テスト (CALL Edge Cases)
*> CALL CANCEL, 静的CALL, 動的CALL,
*> CALL ON EXCEPTION, ネストプログラム
*> ============================================================
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PGM-NAME PIC X(8) VALUE "SUB-EDGE".
01 WS-VAL-A PIC 9(5) VALUE 100.
01 WS-VAL-B PIC 9(5) VALUE 200.
01 WS-RESULT PIC 9(10) VALUE 0.
01 WS-EXPECTED PIC 9(10) VALUE 300.
01 WS-PASS PIC 9(2) VALUE 0.
01 WS-FAIL PIC 9(2) VALUE 0.
01 WS-TC PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
MAIN.
DISPLAY "CALL-EDGE: CALL edge case tests"
*> T1: CALL ON EXCEPTION (存在しないプログラム)
ADD 1 TO WS-TC.
DISPLAY "T1: CALL nonexistent ON EXCEPTION"
CALL 'NOPGM000' USING WS-VAL-A
ON EXCEPTION
DISPLAY "T1: Exception caught PASS"
ADD 1 TO WS-PASS
NOT ON EXCEPTION
DISPLAY "T1: No exception FAIL"
ADD 1 TO WS-FAIL
END-CALL.
*> T2: CALL CANCEL (呼出→CANCEL→再呼出)
ADD 1 TO WS-TC.
DISPLAY "T2: CALL CANCEL cycle"
MOVE 100 TO WS-VAL-A.
MOVE 200 TO WS-VAL-B.
CALL 'SUB-EDGE' USING WS-VAL-A WS-VAL-B WS-RESULT.
DISPLAY "T2-1: RESULT=" WS-RESULT " (expect 300)".
CANCEL 'SUB-EDGE'.
MOVE 50 TO WS-VAL-A.
MOVE 70 TO WS-VAL-B.
CALL 'SUB-EDGE' USING WS-VAL-A WS-VAL-B WS-RESULT.
IF WS-RESULT = 120
DISPLAY "T2: CANCEL+recall PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "T2: CANCEL+recall FAIL (result=" WS-RESULT ")"
ADD 1 TO WS-FAIL
END-IF.
*> T3: CALL with RETURN-CODE
ADD 1 TO WS-TC.
MOVE 15 TO WS-VAL-A.
MOVE 25 TO WS-VAL-B.
CALL 'SUB-EDGE' USING WS-VAL-A WS-VAL-B WS-RESULT.
IF RETURN-CODE = 0
DISPLAY "T3: RETURN-CODE=0 PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "T3: RETURN-CODE=" RETURN-CODE " FAIL"
ADD 1 TO WS-FAIL
END-IF.
DISPLAY " "
DISPLAY "CALL-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 CallEdgeCase.
*> ============================================================
*> ネストサブプログラム (Nested Subprogram)
*> ============================================================
IDENTIFICATION DIVISION.
PROGRAM-ID. SUB-EDGE.
DATA DIVISION.
LINKAGE SECTION.
01 LK-A PIC 9(5).
01 LK-B PIC 9(5).
01 LK-RES PIC 9(10).
PROCEDURE DIVISION USING LK-A LK-B LK-RES.
COMPUTE LK-RES = LK-A + LK-B.
GOBACK.
END PROGRAM SUB-EDGE.