feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
*> ============================================================
|
||||
*> main-validation-withdup : 重复CDR检测 (Duplicate CDR)
|
||||
*> Input : FILE-IN (INPUT.DAT: 排序済KEY付CDR)
|
||||
*> Output: FILE-PASS (PASS.DAT: 非重複)
|
||||
*> Coverage: VF-N003, VF-N004, VF-R001
|
||||
*> ============================================================
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. VALIDATE-DUP.
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE-IN ASSIGN TO "INPUT.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL
|
||||
FILE STATUS IS WS-FS.
|
||||
|
||||
SELECT FILE-PASS ASSIGN TO "PASS.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
SELECT FILE-ERR ASSIGN TO "ERR.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-IN RECORD CONTAINS 40 CHARACTERS.
|
||||
01 IN-REC.
|
||||
05 IN-KEY PIC X(10).
|
||||
05 IN-VALUE PIC 9(10).
|
||||
05 IN-DATA PIC X(20).
|
||||
|
||||
FD FILE-PASS RECORD CONTAINS 40 CHARACTERS.
|
||||
01 PASS-REC PIC X(40).
|
||||
|
||||
FD FILE-ERR RECORD CONTAINS 60 CHARACTERS.
|
||||
01 ERR-REC.
|
||||
05 ERR-KEY PIC X(10).
|
||||
05 ERR-VALUE PIC 9(10).
|
||||
05 ERR-MSG PIC X(40).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-FS PIC X(2).
|
||||
01 WS-EOF PIC X(1) VALUE 'N'.
|
||||
88 WS-EOF-Y VALUE 'Y' FALSE 'N'.
|
||||
01 WS-PREV-KEY PIC X(10).
|
||||
01 WS-FIRST PIC X(1) VALUE 'Y'.
|
||||
88 WS-FIRST-Y VALUE 'Y' FALSE 'N'.
|
||||
01 WS-READ-COUNT PIC 9(10).
|
||||
01 WS-PASS-COUNT PIC 9(10).
|
||||
01 WS-DUP-COUNT PIC 9(10).
|
||||
|
||||
01 WS-TELECOM-REC.
|
||||
COPY "telecom/TEL-BILLING.cpy".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DISPLAY "VALIDATE-DUP: Starting validation with dup detection"
|
||||
OPEN INPUT FILE-IN.
|
||||
IF WS-FS NOT = "00"
|
||||
DISPLAY "OPEN FAIL: " WS-FS
|
||||
STOP RUN RETURNING 1
|
||||
END-IF.
|
||||
OPEN OUTPUT FILE-PASS FILE-ERR.
|
||||
|
||||
PERFORM UNTIL WS-EOF-Y
|
||||
READ FILE-IN INTO IN-REC
|
||||
AT END
|
||||
SET WS-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-READ-COUNT
|
||||
IF WS-FIRST-Y
|
||||
MOVE IN-KEY TO WS-PREV-KEY
|
||||
MOVE 'N' TO WS-FIRST
|
||||
PERFORM WRITE-PASS
|
||||
ELSE
|
||||
IF IN-KEY = WS-PREV-KEY
|
||||
PERFORM WRITE-DUP
|
||||
ELSE
|
||||
MOVE IN-KEY TO WS-PREV-KEY
|
||||
PERFORM WRITE-PASS
|
||||
END-IF
|
||||
END-IF
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
|
||||
CLOSE FILE-IN FILE-PASS FILE-ERR.
|
||||
|
||||
DISPLAY "VALIDATE-DUP: READ=" WS-READ-COUNT
|
||||
" PASS=" WS-PASS-COUNT " DUP=" WS-DUP-COUNT
|
||||
|
||||
IF WS-READ-COUNT = WS-PASS-COUNT + WS-DUP-COUNT
|
||||
DISPLAY "VALIDATE-DUP: PASS (R001 count match)"
|
||||
STOP RUN RETURNING 0
|
||||
ELSE
|
||||
DISPLAY "VALIDATE-DUP: FAIL - count mismatch"
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
.
|
||||
|
||||
WRITE-PASS.
|
||||
ADD 1 TO WS-PASS-COUNT.
|
||||
MOVE IN-REC TO PASS-REC.
|
||||
WRITE PASS-REC.
|
||||
DISPLAY "PASS: " IN-KEY " (first occurrence)"
|
||||
.
|
||||
|
||||
WRITE-DUP.
|
||||
ADD 1 TO WS-DUP-COUNT.
|
||||
MOVE IN-KEY TO ERR-KEY.
|
||||
MOVE IN-VALUE TO ERR-VALUE.
|
||||
STRING "DUPLICATE KEY DETECTED - previous key was "
|
||||
WS-PREV-KEY DELIMITED BY SIZE INTO ERR-MSG
|
||||
END-STRING.
|
||||
WRITE ERR-REC.
|
||||
DISPLAY "DUP: " IN-KEY " (duplicate, rejected)"
|
||||
.
|
||||
|
||||
END PROGRAM VALIDATE-DUP.
|
||||
Reference in New Issue
Block a user