Files
cobol-java-v3/benchmark-programs/cross-cutting/numeric-precision/main-comp-overflow.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

122 lines
3.9 KiB
COBOL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
IDENTIFICATION DIVISION.
PROGRAM-ID. CompOverflow.
*> COMP/数值溢出測試
*> Coverage: NP-A004 (COMP赋值溢出), KB-A002 (累加器溢出SIZE ERROR)
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> NP-A004: COMP溢出
01 WS-COMP-SMALL PIC S9(4) USAGE COMP.
01 WS-COMP-BIG PIC S9(8) USAGE COMP.
01 WS-COMP-RESULT PIC S9(4) USAGE COMP.
01 WS-OVERFLOW-VAL PIC 9(10) VALUE 999999.
*> KB-A002: 累加器溢出(SIZE ERROR)
01 WS-ACCUMULATOR PIC 9(4) VALUE 0.
01 WS-BIG-AMOUNT PIC 9(6).
01 WS-VALUES.
05 WS-VAL-1 PIC 9(6) VALUE 5000.
05 WS-VAL-2 PIC 9(6) VALUE 5000.
05 WS-VAL-3 PIC 9(6) VALUE 50000.
01 WS-I PIC 9(2).
01 WS-PASS PIC 9(2) VALUE 0.
01 WS-FAIL PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
MAIN.
DISPLAY "COMP-OVERFLOW: Starting overflow tests"
*> NP-A004: COMP赋值溢出
DISPLAY "NP-A004: COMP assignment overflow"
*> Test 1: COMP(4)正常値
MOVE 1000 TO WS-COMP-SMALL.
MOVE 1000 TO WS-COMP-RESULT.
IF WS-COMP-RESULT = 1000
ADD 1 TO WS-PASS
DISPLAY "NP-A004-1: COMP(4)=1000 PASS"
ELSE
ADD 1 TO WS-FAIL
DISPLAY "NP-A004-1: FAIL"
END-IF.
*> Test 2: COMP(4)正常辺界値
MOVE 9999 TO WS-COMP-SMALL.
MOVE 9999 TO WS-COMP-RESULT.
IF WS-COMP-RESULT = 9999
ADD 1 TO WS-PASS
DISPLAY "NP-A004-2: COMP(4)=9999 PASS"
ELSE
ADD 1 TO WS-FAIL
DISPLAY "NP-A004-2: FAIL"
END-IF.
*> Test 3: COMP(4)負數
MOVE -9999 TO WS-COMP-SMALL.
MOVE -9999 TO WS-COMP-RESULT.
IF WS-COMP-RESULT = -9999
ADD 1 TO WS-PASS
DISPLAY "NP-A004-3: COMP(4)=-9999 PASS"
ELSE
ADD 1 TO WS-FAIL
DISPLAY "NP-A004-3: FAIL"
END-IF.
*> Test 4: COMP(8)大値
MOVE 99999999 TO WS-COMP-BIG.
IF WS-COMP-BIG = 99999999
ADD 1 TO WS-PASS
DISPLAY "NP-A004-4: COMP(8)=99999999 PASS"
ELSE
ADD 1 TO WS-FAIL
DISPLAY "NP-A004-4: FAIL"
END-IF.
*> KB-A002: 累加器溢出(SIZE ERROR
DISPLAY "KB-A002: Accumulator overflow (SIZE ERROR)"
MOVE 0 TO WS-ACCUMULATOR.
*> 故意溢出:5000+5000+50000 = 60000 > 9999
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
IF WS-I = 1
MOVE WS-VAL-1 TO WS-BIG-AMOUNT
ELSE IF WS-I = 2
MOVE WS-VAL-2 TO WS-BIG-AMOUNT
ELSE
MOVE WS-VAL-3 TO WS-BIG-AMOUNT
END-IF
ADD WS-BIG-AMOUNT TO WS-ACCUMULATOR
ON SIZE ERROR
DISPLAY "KB-A002: SIZE ERROR at ADD " WS-BIG-AMOUNT
" acc=" WS-ACCUMULATOR
ADD 1 TO WS-PASS
NOT ON SIZE ERROR
DISPLAY "KB-A002: ADD " WS-BIG-AMOUNT
" -> acc=" WS-ACCUMULATOR
END-ADD
END-PERFORM.
IF WS-PASS >= 1
ADD 1 TO WS-PASS
DISPLAY "KB-A002: PASS - SIZE ERROR handled"
ELSE
ADD 1 TO WS-FAIL
DISPLAY "KB-A002: FAIL"
END-IF.
DISPLAY " "
DISPLAY "COMP-OVERFLOW: PASS=" WS-PASS " FAIL=" WS-FAIL
IF WS-FAIL = 0
DISPLAY "COMP-OVERFLOW: ALL PASSED"
STOP RUN RETURNING 0
ELSE
DISPLAY "COMP-OVERFLOW: FAILED"
STOP RUN RETURNING 1
END-IF
.
END PROGRAM CompOverflow.