feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user