feat: add benchmark-programs — 58 telecom COBOL test programs

作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NB-076
2026-06-25 09:53:21 +08:00
parent 50f9f0f52f
commit 94400d50d4
278 changed files with 44125 additions and 0 deletions
@@ -0,0 +1,175 @@
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.