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,184 @@
*> ============================================================
*> main-matching-1-1 : 请求书↔支付对账 (Invoice↔Payment Matching)
*> Input : FILE-MAST (MASTER.DAT: 请求书), FILE-DETL (DETAIL.DAT: 支付)
*> Output: FILE-OUT (OUTPUT.DAT: 一致), FILE-ERR (ERROR.DAT: 不一致)
*> Coverage: MT-N001, MT-N004, MT-N005, MT-N006, MT-R001
*> ============================================================
IDENTIFICATION DIVISION.
PROGRAM-ID. MATCHING-11.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE-MAST ASSIGN TO "MASTER.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS1.
SELECT FILE-DETL ASSIGN TO "DETAIL.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS2.
SELECT FILE-OUT ASSIGN TO "OUTPUT.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT FILE-ERR ASSIGN TO "ERROR.DAT"
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FILE-MAST RECORD CONTAINS 40 CHARACTERS.
01 MAST-REC.
05 M-KEY PIC X(10).
05 M-NAME PIC X(20).
05 M-AMOUNT PIC 9(10).
FD FILE-DETL RECORD CONTAINS 40 CHARACTERS.
01 DETL-REC.
05 D-KEY PIC X(10).
05 D-NAME PIC X(20).
05 D-AMOUNT PIC 9(10).
FD FILE-OUT RECORD CONTAINS 40 CHARACTERS.
01 OUT-REC.
05 O-KEY PIC X(10).
05 O-NAME PIC X(20).
05 O-AMOUNT PIC 9(10).
FD FILE-ERR RECORD CONTAINS 80 CHARACTERS.
01 ERR-REC.
05 ERR-TYPE PIC X(10).
05 ERR-KEY PIC X(10).
05 ERR-NAME PIC X(20).
05 ERR-AMOUNT PIC 9(10).
05 ERR-FILLER PIC X(30).
WORKING-STORAGE SECTION.
01 WS-FS1 PIC X(2).
01 WS-FS2 PIC X(2).
01 WS-EOF1 PIC X(1) VALUE 'N'.
88 WS-EOF1-Y VALUE 'Y' FALSE 'N'.
01 WS-EOF2 PIC X(1) VALUE 'N'.
88 WS-EOF2-Y VALUE 'Y' FALSE 'N'.
01 WS-READ-MAST PIC 9(10).
01 WS-READ-DETL PIC 9(10).
01 WS-WRITTEN PIC 9(10).
01 WS-UNMATCH-MAST PIC 9(10).
01 WS-UNMATCH-DETL PIC 9(10).
PROCEDURE DIVISION.
MAIN.
DISPLAY "MATCHING-11: Starting 1:1 matching"
OPEN INPUT FILE-MAST FILE-DETL.
OPEN OUTPUT FILE-OUT FILE-ERR.
IF WS-FS1 NOT = "00" OR WS-FS2 NOT = "00"
DISPLAY "OPEN FAIL: MAST=" WS-FS1 " DETL=" WS-FS2
STOP RUN RETURNING 1
END-IF.
READ FILE-MAST INTO MAST-REC
AT END SET WS-EOF1-Y TO TRUE
END-READ.
READ FILE-DETL INTO DETL-REC
AT END SET WS-EOF2-Y TO TRUE
END-READ.
PERFORM UNTIL WS-EOF1-Y AND WS-EOF2-Y
IF WS-EOF1-Y
PERFORM WRITE-DETL-REMAINING
ELSE IF WS-EOF2-Y
PERFORM WRITE-MAST-REMAINING
ELSE
IF M-KEY = D-KEY
PERFORM MATCH-FOUND
ELSE IF M-KEY < D-KEY
PERFORM MAST-UNMATCHED
ELSE
PERFORM DETL-UNMATCHED
END-IF
END-IF
END-PERFORM.
CLOSE FILE-MAST FILE-DETL FILE-OUT FILE-ERR.
DISPLAY "MATCH: MASTER-READ=" WS-READ-MAST
" DETL-READ=" WS-READ-DETL
DISPLAY "MATCH: MATCHED=" WS-WRITTEN
" UNMATCH-MAST=" WS-UNMATCH-MAST
" UNMATCH-DETL=" WS-UNMATCH-DETL
IF WS-WRITTEN > 0
DISPLAY "MATCHING-11: PASS"
STOP RUN RETURNING 0
ELSE
DISPLAY "MATCHING-11: FAIL - no matches"
STOP RUN RETURNING 1
END-IF
.
MATCH-FOUND.
ADD 1 TO WS-READ-MAST WS-READ-DETL WS-WRITTEN.
MOVE M-KEY TO O-KEY.
MOVE M-NAME TO O-NAME.
MOVE M-AMOUNT TO O-AMOUNT.
WRITE OUT-REC.
READ FILE-MAST INTO MAST-REC
AT END SET WS-EOF1-Y TO TRUE
END-READ.
READ FILE-DETL INTO DETL-REC
AT END SET WS-EOF2-Y TO TRUE
END-READ.
.
MAST-UNMATCHED.
ADD 1 TO WS-READ-MAST WS-UNMATCH-MAST.
MOVE "MAST-UNMTC" TO ERR-TYPE.
MOVE M-KEY TO ERR-KEY.
MOVE M-NAME TO ERR-NAME.
MOVE M-AMOUNT TO ERR-AMOUNT.
WRITE ERR-REC.
READ FILE-MAST INTO MAST-REC
AT END SET WS-EOF1-Y TO TRUE
END-READ.
.
DETL-UNMATCHED.
ADD 1 TO WS-READ-DETL WS-UNMATCH-DETL.
MOVE "DETL-UNMTC" TO ERR-TYPE.
MOVE D-KEY TO ERR-KEY.
MOVE D-NAME TO ERR-NAME.
MOVE D-AMOUNT TO ERR-AMOUNT.
WRITE ERR-REC.
READ FILE-DETL INTO DETL-REC
AT END SET WS-EOF2-Y TO TRUE
END-READ.
.
WRITE-DETL-REMAINING.
ADD 1 TO WS-READ-DETL WS-UNMATCH-DETL.
MOVE "DETL-REMAIN" TO ERR-TYPE.
MOVE D-KEY TO ERR-KEY.
MOVE D-NAME TO ERR-NAME.
MOVE D-AMOUNT TO ERR-AMOUNT.
WRITE ERR-REC.
READ FILE-DETL INTO DETL-REC
AT END SET WS-EOF2-Y TO TRUE
END-READ.
.
WRITE-MAST-REMAINING.
ADD 1 TO WS-READ-MAST WS-UNMATCH-MAST.
MOVE "MAST-REMAIN" TO ERR-TYPE.
MOVE M-KEY TO ERR-KEY.
MOVE M-NAME TO ERR-NAME.
MOVE M-AMOUNT TO ERR-AMOUNT.
WRITE ERR-REC.
READ FILE-MAST INTO MAST-REC
AT END SET WS-EOF1-Y TO TRUE
END-READ.
.
END PROGRAM MATCHING-11.