94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
126 lines
4.2 KiB
COBOL
126 lines
4.2 KiB
COBOL
*> ============================================================
|
|
*> caller-nested : 计费子程序嵌套调用 (Nested Subprogram Call)
|
|
*> Input : WS-VAL-A, WS-VAL-B (传递参数)
|
|
*> Output: WS-RESULT (嵌套计算结果)
|
|
*> Coverage: C-N009
|
|
*> ============================================================
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. CallerNested.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 WS-LEVEL PIC 9(1).
|
|
01 WS-VAL-A PIC 9(5).
|
|
01 WS-VAL-B PIC 9(5).
|
|
01 WS-RESULT PIC 9(10).
|
|
01 WS-PASS PIC 9(2) VALUE 0.
|
|
01 WS-FAIL PIC 9(2) VALUE 0.
|
|
|
|
PROCEDURE DIVISION.
|
|
MAIN.
|
|
DISPLAY "CALLER-NESTED: 3-level CALL test (C-N009)"
|
|
|
|
*> Test: CALLER → SUB-A → SUB-B → SUB-C RETURNING
|
|
MOVE 1 TO WS-LEVEL.
|
|
MOVE 10 TO WS-VAL-A.
|
|
MOVE 20 TO WS-VAL-B.
|
|
|
|
CALL 'SUB-A' USING WS-LEVEL WS-VAL-A WS-VAL-B WS-RESULT.
|
|
|
|
IF WS-RESULT = 100 *> (10+20) + (10+20) + 20 = 100
|
|
ADD 1 TO WS-PASS
|
|
DISPLAY "C-N009: PASS - 3-level result=" WS-RESULT
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
DISPLAY "C-N009: FAIL - result=" WS-RESULT
|
|
END-IF.
|
|
|
|
*> Test: CALL with RETURN-CODE from nested
|
|
MOVE 2 TO WS-LEVEL.
|
|
MOVE 5 TO WS-VAL-A.
|
|
MOVE 7 TO WS-VAL-B.
|
|
CALL 'SUB-A' USING WS-LEVEL WS-VAL-A WS-VAL-B WS-RESULT.
|
|
|
|
IF WS-RESULT = 31 *> (5+7) + (5+7) + 7 = 31
|
|
ADD 1 TO WS-PASS
|
|
DISPLAY "C-N009-2: PASS - nested result=" WS-RESULT
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
DISPLAY "C-N009-2: FAIL - result=" WS-RESULT
|
|
END-IF.
|
|
|
|
*> CALL nonexistent program (TC-A051)
|
|
DISPLAY "TC-A051: CALL non-existent program"
|
|
CALL 'NOPGM00' USING WS-VAL-A
|
|
ON EXCEPTION
|
|
ADD 1 TO WS-PASS
|
|
DISPLAY "TC-A051: PASS - exception raised"
|
|
NOT ON EXCEPTION
|
|
ADD 1 TO WS-FAIL
|
|
DISPLAY "TC-A051: FAIL - no exception"
|
|
END-CALL.
|
|
|
|
DISPLAY " "
|
|
DISPLAY "CALLER-NESTED: PASS=" WS-PASS " FAIL=" WS-FAIL
|
|
IF WS-FAIL = 0
|
|
DISPLAY "CALLER-NESTED: ALL PASSED"
|
|
STOP RUN RETURNING 0
|
|
ELSE
|
|
DISPLAY "CALLER-NESTED: FAILED"
|
|
STOP RUN RETURNING 1
|
|
END-IF
|
|
.
|
|
|
|
END PROGRAM CallerNested.
|
|
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. SUB-A.
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 WS-RET PIC 9(10).
|
|
LINKAGE SECTION.
|
|
01 LK-LEVEL PIC 9(1).
|
|
01 LK-VAL-A PIC 9(5).
|
|
01 LK-VAL-B PIC 9(5).
|
|
01 LK-RESULT PIC 9(10).
|
|
PROCEDURE DIVISION USING LK-LEVEL LK-VAL-A LK-VAL-B LK-RESULT.
|
|
ADD LK-VAL-A TO LK-VAL-B GIVING WS-RET.
|
|
CALL 'SUB-B' USING LK-LEVEL LK-VAL-A LK-VAL-B WS-RET LK-RESULT.
|
|
GOBACK.
|
|
END PROGRAM SUB-A.
|
|
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. SUB-B.
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 WS-TEMP PIC 9(10).
|
|
LINKAGE SECTION.
|
|
01 LK-LEVEL PIC 9(1).
|
|
01 LK-VAL-A PIC 9(5).
|
|
01 LK-VAL-B PIC 9(5).
|
|
01 LK-INPUT PIC 9(10).
|
|
01 LK-RESULT PIC 9(10).
|
|
PROCEDURE DIVISION USING LK-LEVEL LK-VAL-A LK-VAL-B
|
|
LK-INPUT LK-RESULT.
|
|
COMPUTE WS-TEMP = LK-INPUT + LK-VAL-B.
|
|
IF LK-LEVEL = 1
|
|
COMPUTE LK-RESULT = WS-TEMP
|
|
ELSE
|
|
CALL 'SUB-C' USING LK-VAL-A LK-VAL-B WS-TEMP LK-RESULT
|
|
END-IF.
|
|
GOBACK.
|
|
END PROGRAM SUB-B.
|
|
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. SUB-C.
|
|
DATA DIVISION.
|
|
LINKAGE SECTION.
|
|
01 LK-VAL-A PIC 9(5).
|
|
01 LK-VAL-B PIC 9(5).
|
|
01 LK-INPUT PIC 9(10).
|
|
01 LK-RESULT PIC 9(10).
|
|
PROCEDURE DIVISION USING LK-VAL-A LK-VAL-B LK-INPUT LK-RESULT.
|
|
COMPUTE LK-RESULT = LK-INPUT + LK-VAL-B.
|
|
GOBACK.
|
|
END PROGRAM SUB-C.
|