feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
*> ============================================================
|
||||
*> main-csv-anomaly : CDR CSV异常系测试 (CSV Anomaly)
|
||||
*> Input : CSV-IN (CSV-INPUT.DAT: 异常CSV数据)
|
||||
*> Output: FB-OUT (FB-OUTPUT.DAT: 固定长输出)
|
||||
*> Coverage: CF-A001, CF-A002
|
||||
*> ============================================================
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CsvAnomaly.
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT CSV-IN ASSIGN TO "CSV-INPUT.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
SELECT FB-OUT ASSIGN TO "FB-OUTPUT.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD CSV-IN RECORD VARYING FROM 1 TO 200.
|
||||
01 CSV-REC PIC X(200).
|
||||
|
||||
FD FB-OUT RECORD CONTAINS 40 CHARACTERS.
|
||||
01 FB-REC.
|
||||
05 FB-FIELD1 PIC X(10).
|
||||
05 FB-FIELD2 PIC X(10).
|
||||
05 FB-FIELD3 PIC X(10).
|
||||
05 FB-FIELD4 PIC X(10).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-EOF PIC X(1) VALUE 'N'.
|
||||
88 WS-EOF-Y VALUE 'Y' FALSE 'N'.
|
||||
01 WS-COUNT PIC 9(10).
|
||||
01 WS-ERR-COUNT PIC 9(10).
|
||||
01 WS-QUOTE-OPEN PIC X(1) VALUE 'N'.
|
||||
88 WS-QUOTE-OPEN-Y VALUE 'Y' FALSE 'N'.
|
||||
01 WS-PASS PIC 9(2) VALUE 0.
|
||||
01 WS-FAIL PIC 9(2) VALUE 0.
|
||||
01 WS-TRIM-CSV PIC X(200).
|
||||
|
||||
01 WS-CDR-REC.
|
||||
COPY "telecom/TEL-CDR.cpy".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DISPLAY "CSV-ANOMALY: Starting CSV anomaly tests"
|
||||
|
||||
*> CF-A002: 引用符未閉じ → 殘り全部1項目
|
||||
DISPLAY "CF-A002: Unclosed quote test"
|
||||
OPEN OUTPUT CSV-IN.
|
||||
MOVE '"Field1","Field2","Field3,no-close' TO CSV-REC.
|
||||
WRITE CSV-REC.
|
||||
CLOSE CSV-IN.
|
||||
|
||||
OPEN INPUT CSV-IN.
|
||||
OPEN OUTPUT FB-OUT.
|
||||
READ CSV-IN INTO WS-TRIM-CSV
|
||||
AT END
|
||||
DISPLAY "CF-A002: Empty read"
|
||||
NOT AT END
|
||||
STRING WS-TRIM-CSV(1:10) WS-TRIM-CSV(11:10)
|
||||
WS-TRIM-CSV(21:10) "TRUNCATED"
|
||||
DELIMITED BY SIZE INTO FB-REC
|
||||
END-STRING
|
||||
WRITE FB-REC
|
||||
ADD 1 TO WS-COUNT
|
||||
DISPLAY "CF-A002: Unclosed quote handled"
|
||||
END-READ.
|
||||
CLOSE CSV-IN FB-OUT.
|
||||
|
||||
IF WS-COUNT > 0
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "CF-A002: PASS - unclosed quote processed"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "CF-A002: FAIL"
|
||||
END-IF.
|
||||
|
||||
*> CF-A001: 改行位置超出RECORD長
|
||||
DISPLAY "CF-A001: Line exceeding record length"
|
||||
OPEN OUTPUT CSV-IN.
|
||||
MOVE SPACES TO CSV-REC.
|
||||
STRING "SHORT,OKAY,THREE"
|
||||
DELIMITED BY SIZE INTO CSV-REC
|
||||
END-STRING.
|
||||
WRITE CSV-REC.
|
||||
|
||||
MOVE SPACES TO CSV-REC.
|
||||
STRING "LONG-FIELD-A,LONG-FIELD-B,LONG-FIELD-C,"
|
||||
"VERY-LONG-FIELD-D,EXTRA-LONG-FIELD-E"
|
||||
DELIMITED BY SIZE INTO CSV-REC
|
||||
END-STRING.
|
||||
WRITE CSV-REC.
|
||||
CLOSE CSV-IN.
|
||||
|
||||
OPEN INPUT CSV-IN.
|
||||
OPEN OUTPUT FB-OUT.
|
||||
MOVE 0 TO WS-COUNT.
|
||||
MOVE 'N' TO WS-EOF.
|
||||
PERFORM UNTIL WS-EOF-Y
|
||||
READ CSV-IN INTO WS-TRIM-CSV
|
||||
AT END SET WS-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-COUNT
|
||||
MOVE WS-TRIM-CSV(1:10) TO FB-FIELD1
|
||||
MOVE WS-TRIM-CSV(12:10) TO FB-FIELD2
|
||||
WRITE FB-REC
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
CLOSE CSV-IN FB-OUT.
|
||||
|
||||
IF WS-COUNT = 2
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "CF-A001: PASS - overlong handled (2 records)"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "CF-A001: FAIL - count=" WS-COUNT
|
||||
END-IF.
|
||||
|
||||
DISPLAY " "
|
||||
DISPLAY "CSV-ANOMALY: PASS=" WS-PASS " FAIL=" WS-FAIL
|
||||
IF WS-FAIL = 0
|
||||
DISPLAY "CSV-ANOMALY: ALL PASSED"
|
||||
STOP RUN RETURNING 0
|
||||
ELSE
|
||||
DISPLAY "CSV-ANOMALY: FAILED"
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
.
|
||||
|
||||
END PROGRAM CsvAnomaly.
|
||||
Reference in New Issue
Block a user