feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
*> ============================================================
|
||||
*> main-validation-halfwidth : 电话号码校验 (Phone Validation)
|
||||
*> Input : FILE-IN (INPUT.DAT: 电话号码文字列)
|
||||
*> Output: FILE-PASS (PASS.DAT: 校验通过)
|
||||
*> Coverage: VF-N005, VF-N006, VF-A001, VF-A002, VF-R001
|
||||
*> ============================================================
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. VALIDATE-HALF.
|
||||
|
||||
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-FAIL ASSIGN TO "FAIL.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-IN RECORD CONTAINS 60 CHARACTERS.
|
||||
01 IN-RECORD.
|
||||
05 IN-ID PIC X(10).
|
||||
05 IN-HALF20 PIC X(20).
|
||||
05 IN-HALF4 PIC X(4).
|
||||
05 IN-CHECK-TYPE PIC X(1).
|
||||
05 IN-FILLER PIC X(25).
|
||||
|
||||
FD FILE-PASS RECORD CONTAINS 60 CHARACTERS.
|
||||
01 PASS-REC PIC X(60).
|
||||
|
||||
FD FILE-FAIL RECORD CONTAINS 80 CHARACTERS.
|
||||
01 FAIL-REC.
|
||||
05 FAIL-ID PIC X(10).
|
||||
05 FAIL-REASON PIC X(30).
|
||||
05 FAIL-DATA 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-READ-COUNT PIC 9(10).
|
||||
01 WS-PASS-COUNT PIC 9(10).
|
||||
01 WS-FAIL-COUNT PIC 9(10).
|
||||
01 WS-I PIC 9(2).
|
||||
01 WS-CHAR PIC X(1).
|
||||
01 WS-IS-HALF PIC X(1) VALUE 'Y'.
|
||||
88 WS-IS-HALF-Y VALUE 'Y' FALSE 'N'.
|
||||
01 WS-CHECK-20 PIC X(20).
|
||||
01 WS-CHECK-4 PIC X(4).
|
||||
01 WS-HALF-LOWER PIC X(26) VALUE 'abcdefghijklmnopqrstuvwxyz'.
|
||||
01 WS-HALF-UPPER PIC X(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
|
||||
01 WS-HALF-DIGIT PIC X(10) VALUE '0123456789'.
|
||||
01 WS-HALF-SYMBOL PIC X(33) VALUE ' !"#$%&''()*+,-./:;<=>?@[\]^_`{|}~'.
|
||||
|
||||
01 WS-TELECOM-REC.
|
||||
COPY "telecom/TEL-BILLING.cpy".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DISPLAY "VALIDATE-HALF: Starting halfwidth validation"
|
||||
OPEN INPUT FILE-IN.
|
||||
OPEN OUTPUT FILE-PASS FILE-FAIL.
|
||||
|
||||
PERFORM UNTIL WS-EOF-Y
|
||||
READ FILE-IN INTO IN-RECORD
|
||||
AT END
|
||||
SET WS-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-READ-COUNT
|
||||
MOVE IN-HALF20 TO WS-CHECK-20
|
||||
PERFORM CHECK-HALF20
|
||||
IF WS-IS-HALF-Y
|
||||
MOVE IN-HALF4 TO WS-CHECK-4
|
||||
PERFORM CHECK-HALF4
|
||||
END-IF
|
||||
IF WS-IS-HALF-Y
|
||||
ADD 1 TO WS-PASS-COUNT
|
||||
MOVE IN-RECORD TO PASS-REC
|
||||
WRITE PASS-REC
|
||||
DISPLAY "PASS: " IN-ID " - halfwidth OK"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL-COUNT
|
||||
MOVE IN-ID TO FAIL-ID
|
||||
STRING "HALFWIDTH CHECK FAILED - data contains "
|
||||
"non-halfwidth characters"
|
||||
DELIMITED BY SIZE INTO FAIL-REASON
|
||||
END-STRING
|
||||
MOVE IN-HALF20 TO FAIL-DATA
|
||||
WRITE FAIL-REC
|
||||
DISPLAY "FAIL: " IN-ID " - non-halfwidth detected"
|
||||
END-IF
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
|
||||
CLOSE FILE-IN FILE-PASS FILE-FAIL.
|
||||
|
||||
DISPLAY "VALIDATE-HALF: READ=" WS-READ-COUNT
|
||||
" PASS=" WS-PASS-COUNT " FAIL=" WS-FAIL-COUNT
|
||||
DISPLAY "VALIDATE-HALF: Total = READ (R001)"
|
||||
|
||||
IF WS-READ-COUNT = WS-PASS-COUNT + WS-FAIL-COUNT
|
||||
DISPLAY "VALIDATE-HALF: PASS"
|
||||
STOP RUN RETURNING 0
|
||||
ELSE
|
||||
DISPLAY "VALIDATE-HALF: FAIL - count mismatch"
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
.
|
||||
|
||||
CHECK-HALF20.
|
||||
SET WS-IS-HALF TO TRUE
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 20
|
||||
MOVE WS-CHECK-20(WS-I:1) TO WS-CHAR
|
||||
IF WS-CHAR = SPACE
|
||||
CONTINUE
|
||||
ELSE
|
||||
IF WS-CHAR >= 'a' AND <= 'z'
|
||||
CONTINUE
|
||||
ELSE IF WS-CHAR >= 'A' AND <= 'Z'
|
||||
CONTINUE
|
||||
ELSE IF WS-CHAR >= '0' AND <= '9'
|
||||
CONTINUE
|
||||
ELSE
|
||||
MOVE 'N' TO WS-IS-HALF
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-IF
|
||||
END-PERFORM
|
||||
.
|
||||
|
||||
CHECK-HALF4.
|
||||
SET WS-IS-HALF TO TRUE
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 4
|
||||
MOVE WS-CHECK-4(WS-I:1) TO WS-CHAR
|
||||
IF WS-CHAR = SPACE
|
||||
CONTINUE
|
||||
ELSE
|
||||
IF WS-CHAR >= 'a' AND <= 'z'
|
||||
CONTINUE
|
||||
ELSE IF WS-CHAR >= 'A' AND <= 'Z'
|
||||
CONTINUE
|
||||
ELSE IF WS-CHAR >= '0' AND <= '9'
|
||||
CONTINUE
|
||||
ELSE
|
||||
MOVE 'N' TO WS-IS-HALF
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-IF
|
||||
END-PERFORM
|
||||
.
|
||||
|
||||
END PROGRAM VALIDATE-HALF.
|
||||
Reference in New Issue
Block a user