94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
176 lines
5.7 KiB
COBOL
176 lines
5.7 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. NumericEdge.
|
|
*> ============================================================
|
|
*> 数値演算境界テスト (Numeric Boundary Edge Cases)
|
|
*> COMP-3 無効サインニブル, SIZE ERROR境界,
|
|
*> ROUNDED境界(0.5, 0.99), 桁あふれ, 符号なし/符号付混算
|
|
*> Coverage: NP-N001~N007, NP-A001~A004 拡張
|
|
*> ============================================================
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
|
|
*> COMP-3 サインニブル検証
|
|
01 WS-C3-POS PIC S9(5) USAGE COMP-3 VALUE 12345.
|
|
01 WS-C3-NEG PIC S9(5) USAGE COMP-3 VALUE -12345.
|
|
01 WS-C3-ZERO PIC S9(5) USAGE COMP-3 VALUE 0.
|
|
01 WS-C3-BIG PIC S9(9) USAGE COMP-3 VALUE 999999999.
|
|
01 WS-C3-DISP PIC S9(5).
|
|
|
|
*> SIZE ERROR境界
|
|
01 WS-SE-A PIC 9(2) VALUE 99.
|
|
01 WS-SE-B PIC 9(2) VALUE 1.
|
|
01 WS-SE-C PIC 9(2) VALUE 99.
|
|
01 WS-SE-RES PIC 9(2).
|
|
|
|
*> ROUNDED境界
|
|
01 WS-RD1 PIC 9(2)V9 VALUE 0.
|
|
01 WS-RD2 PIC 9(2)V99 VALUE 0.
|
|
01 WS-RD-SRC1 PIC 9(3)V99 VALUE 999.995.
|
|
01 WS-RD-SRC2 PIC 9(3)V99 VALUE 999.994.
|
|
01 WS-RD-SRC3 PIC 9(3)V99 VALUE 100.050.
|
|
01 WS-RD-SRC4 PIC 9(3)V99 VALUE 100.049.
|
|
|
|
*> 桁あふれ
|
|
01 WS-OF-A PIC 9(5) VALUE 99999.
|
|
01 WS-OF-B PIC 9(5) VALUE 1.
|
|
01 WS-OF-RES PIC 9(5).
|
|
|
|
*> 符号なし/符号付混算
|
|
01 WS-UNSIGNED PIC 9(5) VALUE 100.
|
|
01 WS-SIGNED PIC S9(5) VALUE -200.
|
|
01 WS-MIX-RES PIC S9(6).
|
|
|
|
*> ゼロ除算トラップ
|
|
01 WS-ZD-DIV PIC 9(5) VALUE 100.
|
|
01 WS-ZD-DIVISOR PIC 9(5) VALUE 0.
|
|
01 WS-ZD-RES PIC 9(5).
|
|
|
|
01 WS-PASS PIC 9(2) VALUE 0.
|
|
01 WS-FAIL PIC 9(2) VALUE 0.
|
|
01 WS-TC PIC 9(2) VALUE 0.
|
|
01 WS-VAL PIC 9(5).
|
|
|
|
PROCEDURE DIVISION.
|
|
MAIN.
|
|
DISPLAY "NUMERIC-EDGE: Numeric boundary edge tests"
|
|
|
|
*> T1: COMP-3 sign nibble (positive/negative/zero)
|
|
ADD 1 TO WS-TC.
|
|
MOVE WS-C3-POS TO WS-C3-DISP.
|
|
IF WS-C3-DISP = 12345
|
|
DISPLAY "T1-C3-POS: 12345→" WS-C3-DISP " PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
ADD 1 TO WS-TC.
|
|
MOVE WS-C3-NEG TO WS-C3-DISP.
|
|
IF WS-C3-DISP = -12345
|
|
DISPLAY "T1-C3-NEG: -12345→" WS-C3-DISP " PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
ADD 1 TO WS-TC.
|
|
MOVE WS-C3-ZERO TO WS-C3-DISP.
|
|
IF WS-C3-DISP = 0
|
|
DISPLAY "T1-C3-ZERO: 0→" WS-C3-DISP " PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
*> T2: SIZE ERROR境界
|
|
ADD 1 TO WS-TC.
|
|
ADD WS-SE-A TO WS-SE-B
|
|
ON SIZE ERROR
|
|
DISPLAY "T2-SE: 99+1=100 > 99 SIZE ERROR PASS"
|
|
ADD 1 TO WS-PASS
|
|
NOT ON SIZE ERROR
|
|
ADD 1 TO WS-FAIL
|
|
END-ADD.
|
|
|
|
*> 正常範囲: 1+98=99
|
|
ADD 1 TO WS-TC.
|
|
MOVE 1 TO WS-SE-A.
|
|
MOVE 98 TO WS-SE-C.
|
|
ADD WS-SE-A TO WS-SE-C GIVING WS-SE-RES
|
|
ON SIZE ERROR
|
|
ADD 1 TO WS-FAIL
|
|
NOT ON SIZE ERROR
|
|
IF WS-SE-RES = 99
|
|
DISPLAY "T2-SE-NORM: 1+98=99 PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
END-IF
|
|
END-ADD.
|
|
|
|
*> T3: ROUNDED境界
|
|
ADD 1 TO WS-TC.
|
|
COMPUTE WS-RD1 ROUNDED = WS-RD-SRC1.
|
|
IF WS-RD1 = 1000.0
|
|
DISPLAY "T3-RD1: 999.995 rounded→1000.0 PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
DISPLAY "T3-RD1: " WS-RD1 " FAIL"
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
ADD 1 TO WS-TC.
|
|
COMPUTE WS-RD1 ROUNDED = WS-RD-SRC2.
|
|
IF WS-RD1 = 999.9
|
|
DISPLAY "T3-RD2: 999.994→999.9 PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
DISPLAY "T3-RD2: " WS-RD1 " FAIL"
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
*> T4: 桁あふれ
|
|
ADD 1 TO WS-TC.
|
|
ADD WS-OF-A TO WS-OF-B GIVING WS-OF-RES
|
|
ON SIZE ERROR
|
|
DISPLAY "T4-OF: 99999+1 SIZE ERROR PASS"
|
|
ADD 1 TO WS-PASS
|
|
NOT ON SIZE ERROR
|
|
ADD 1 TO WS-FAIL
|
|
END-ADD.
|
|
|
|
*> T5: 符号なし/符号付混算
|
|
ADD 1 TO WS-TC.
|
|
COMPUTE WS-MIX-RES = WS-UNSIGNED + WS-SIGNED.
|
|
IF WS-MIX-RES = -100
|
|
DISPLAY "T5-MIX: 100 + (-200) = -100 PASS"
|
|
ADD 1 TO WS-PASS
|
|
ELSE
|
|
ADD 1 TO WS-FAIL
|
|
END-IF.
|
|
|
|
*> T6: ゼロ除算トラップ
|
|
ADD 1 TO WS-TC.
|
|
DIVIDE WS-ZD-DIV BY WS-ZD-DIVISOR
|
|
GIVING WS-ZD-RES
|
|
ON SIZE ERROR
|
|
DISPLAY "T6-ZDIV: Zero divide SIZE ERROR PASS"
|
|
ADD 1 TO WS-PASS
|
|
NOT ON SIZE ERROR
|
|
DISPLAY "T6-ZDIV: NOT TRAPPED FAIL"
|
|
ADD 1 TO WS-FAIL
|
|
END-DIVIDE.
|
|
|
|
DISPLAY " "
|
|
DISPLAY "NUMERIC-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 NumericEdge.
|