Files
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

153 lines
4.9 KiB
COBOL

IDENTIFICATION DIVISION.
*> PROGRAM-ID: RerunTest
*> Cross-cutting: RERUN/RESTART idempotency
*> Tests: RR-N001 through RR-N004
PROGRAM-ID. RerunTest.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO "input.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-INPUT.
SELECT OUTPUT-FILE ASSIGN TO "output.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-OUTPUT.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 IN-REC.
05 IN-KEY PIC X(04).
05 IN-VALUE PIC 9(03).
FD OUTPUT-FILE.
01 OUT-REC.
05 OUT-KEY PIC X(04).
05 OUT-VALUE PIC 9(06).
WORKING-STORAGE SECTION.
77 FS-INPUT PIC XX.
77 FS-OUTPUT PIC XX.
77 WS-SUM PIC 9(06).
77 WS-COUNT PIC 9(03).
77 TC PIC 99 VALUE 0.
PROCEDURE DIVISION.
*
* RR-N001: Initial run - create input and output
*
RR-N001.
ADD 1 TO TC.
DISPLAY "RR-N001: Create initial input data".
OPEN OUTPUT INPUT-FILE.
IF FS-INPUT NOT = "00"
DISPLAY "FAIL: CREATE INPUT FS=" FS-INPUT
STOP RUN.
MOVE "R001" TO IN-KEY.
MOVE 100 TO IN-VALUE.
WRITE IN-REC.
MOVE "R002" TO IN-KEY.
MOVE 200 TO IN-VALUE.
WRITE IN-REC.
MOVE "R003" TO IN-KEY.
MOVE 300 TO IN-VALUE.
WRITE IN-REC.
MOVE "R004" TO IN-KEY.
MOVE 400 TO IN-VALUE.
WRITE IN-REC.
MOVE "R005" TO IN-KEY.
MOVE 500 TO IN-VALUE.
WRITE IN-REC.
CLOSE INPUT-FILE.
DISPLAY "RR-N001: PASS".
*
* RR-N002: Process input to output (idempotent operation)
*
RR-N002.
ADD 1 TO TC.
DISPLAY "RR-N002: Process input -> output".
OPEN INPUT INPUT-FILE.
IF FS-INPUT NOT = "00"
DISPLAY "FAIL: OPEN INPUT FS=" FS-INPUT
STOP RUN.
OPEN OUTPUT OUTPUT-FILE.
IF FS-OUTPUT NOT = "00"
DISPLAY "FAIL: OPEN OUTPUT FS=" FS-OUTPUT
STOP RUN.
MOVE 0 TO WS-SUM.
MOVE 0 TO WS-COUNT.
PERFORM UNTIL FS-INPUT NOT = "00"
READ INPUT-FILE
AT END
EXIT PERFORM
NOT AT END
ADD 1 TO WS-COUNT
MULTIPLY IN-VALUE BY 2 GIVING OUT-VALUE
MOVE IN-KEY TO OUT-KEY
WRITE OUT-REC
ADD IN-VALUE TO WS-SUM
END-READ
END-PERFORM.
CLOSE INPUT-FILE.
CLOSE OUTPUT-FILE.
DISPLAY " RECORDS=" WS-COUNT " SUM=" WS-SUM.
IF WS-COUNT = 5 AND WS-SUM = 1500
DISPLAY " PROCESS OK"
ELSE
DISPLAY " PROCESS FAIL"
END-IF.
DISPLAY "RR-N002: PASS".
*
* RR-N003: Re-run idempotent - same input, same result
*
RR-N003.
ADD 1 TO TC.
DISPLAY "RR-N003: Re-run idempotent verification".
OPEN INPUT INPUT-FILE.
MOVE 0 TO WS-SUM.
MOVE 0 TO WS-COUNT.
PERFORM UNTIL FS-INPUT NOT = "00"
READ INPUT-FILE
AT END
EXIT PERFORM
NOT AT END
ADD 1 TO WS-COUNT
ADD IN-VALUE TO WS-SUM
END-READ
END-PERFORM.
CLOSE INPUT-FILE.
IF WS-COUNT = 5 AND WS-SUM = 1500
DISPLAY " IDEMPOTENT READ OK (same count=" WS-COUNT
" sum=" WS-SUM ")"
ELSE
DISPLAY " IDEMPOTENT READ FAIL count=" WS-COUNT
" sum=" WS-SUM
END-IF.
DISPLAY "RR-N003: PASS".
*
* RR-N004: Output file already exists (STATUS 95 emulation)
*
RR-N004.
ADD 1 TO TC.
DISPLAY "RR-N004: Output file already exists".
OPEN EXTEND OUTPUT-FILE.
IF FS-OUTPUT = "00"
DISPLAY " EXTEND OPEN OK (file exists, FS=" FS-OUTPUT ")"
ELSE
DISPLAY " EXTEND FS=" FS-OUTPUT
END-IF.
MOVE "R999" TO OUT-KEY.
MOVE 999999 TO OUT-VALUE.
WRITE OUT-REC.
IF FS-OUTPUT = "00"
DISPLAY " APPEND OK"
ELSE
DISPLAY " APPEND FAIL FS=" FS-OUTPUT
END-IF.
CLOSE OUTPUT-FILE.
DISPLAY "RR-N004: PASS".
*
* Summary
*
END-TEST.
DISPLAY "RERUN: ALL " TC " TESTS DONE".
STOP RUN.