feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. MatchingEdge.
|
||||
*> ============================================================
|
||||
*> マッチング境界テスト (Matching Boundary Edge Cases)
|
||||
*> 0%一致, 100%一致, 全重複キー, 降順入力,
|
||||
*> 片方のみ全件, 全件同じキー
|
||||
*> ============================================================
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE-M ASSIGN TO "M.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
SELECT FILE-D ASSIGN TO "D.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
SELECT FILE-O ASSIGN TO "M-OUT.DAT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE-M RECORD CONTAINS 30 CHARACTERS.
|
||||
01 M-REC.
|
||||
05 M-KEY PIC X(10).
|
||||
05 M-DATA PIC X(20).
|
||||
|
||||
FD FILE-D RECORD CONTAINS 30 CHARACTERS.
|
||||
01 D-REC.
|
||||
05 D-KEY PIC X(10).
|
||||
05 D-DATA PIC X(20).
|
||||
|
||||
FD FILE-O RECORD CONTAINS 40 CHARACTERS.
|
||||
01 O-REC.
|
||||
05 O-KEY PIC X(10).
|
||||
05 O-RESULT PIC X(30).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
*> テストデータ
|
||||
01 TEST-CASE.
|
||||
05 TC-ID PIC X(5).
|
||||
05 TC-DESC PIC X(30).
|
||||
|
||||
01 WS-EOF PIC X(1) VALUE 'N'.
|
||||
88 WS-EOF-Y VALUE 'Y'.
|
||||
01 WS-MATCH PIC 9(5).
|
||||
01 WS-UNMATCH-M PIC 9(5).
|
||||
01 WS-UNMATCH-D PIC 9(5).
|
||||
01 WS-TOTAL PIC 9(5).
|
||||
01 WS-I PIC 9(3).
|
||||
01 WS-PASS PIC 9(2) VALUE 0.
|
||||
01 WS-FAIL PIC 9(2) VALUE 0.
|
||||
01 WS-KEY PIC X(10).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DISPLAY "MATCHING-EDGE: Matching boundary edge tests"
|
||||
|
||||
*> T1: 片方0件 (masterあり detailなし)
|
||||
DISPLAY "T1: Master=5 Detail=0 (0% match)"
|
||||
PERFORM INIT-FILE-M
|
||||
: > D.DAT
|
||||
OPEN INPUT FILE-M FILE-D.
|
||||
OPEN OUTPUT FILE-O.
|
||||
MOVE 0 TO WS-MATCH.
|
||||
PERFORM MATCH-LOOP.
|
||||
CLOSE FILE-M FILE-D FILE-O.
|
||||
IF WS-MATCH = 0
|
||||
DISPLAY "T1: 0 matches PASS"
|
||||
ADD 1 TO WS-PASS
|
||||
ELSE
|
||||
DISPLAY "T1: " WS-MATCH " matches FAIL"
|
||||
ADD 1 TO WS-FAIL
|
||||
END-IF.
|
||||
|
||||
*> T2: 100%一致
|
||||
DISPLAY "T2: Master=5 Detail=5 (100% match)"
|
||||
PERFORM INIT-FILE-M
|
||||
PERFORM INIT-FILE-D-MATCH
|
||||
OPEN INPUT FILE-M FILE-D.
|
||||
OPEN OUTPUT FILE-O.
|
||||
MOVE 0 TO WS-MATCH.
|
||||
PERFORM MATCH-LOOP.
|
||||
CLOSE FILE-M FILE-D FILE-O.
|
||||
IF WS-MATCH = 5
|
||||
DISPLAY "T2: 5/5 matches PASS"
|
||||
ADD 1 TO WS-PASS
|
||||
ELSE
|
||||
DISPLAY "T2: " WS-MATCH " matches FAIL"
|
||||
ADD 1 TO WS-FAIL
|
||||
END-IF.
|
||||
|
||||
*> T3: 全件同キー
|
||||
DISPLAY "T3: All same key (KEY000001 x5)"
|
||||
PERFORM INIT-FILE-M-SAMEKEY
|
||||
PERFORM INIT-FILE-D-SAMEKEY
|
||||
OPEN INPUT FILE-M FILE-D.
|
||||
OPEN OUTPUT FILE-O.
|
||||
MOVE 0 TO WS-MATCH.
|
||||
PERFORM MATCH-LOOP.
|
||||
CLOSE FILE-M FILE-D FILE-O.
|
||||
IF WS-MATCH > 0
|
||||
DISPLAY "T3: " WS-MATCH " matches (all same key) PASS"
|
||||
ADD 1 TO WS-PASS
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
END-IF.
|
||||
|
||||
*> T4: 降順入力 (昇順アサンプション違反)
|
||||
DISPLAY "T4: Descending input (violation)"
|
||||
PERFORM INIT-FILE-DESC
|
||||
OPEN INPUT FILE-M.
|
||||
SET WS-EOF-Y TO FALSE.
|
||||
MOVE 0 TO WS-TOTAL.
|
||||
PERFORM UNTIL WS-EOF-Y
|
||||
READ FILE-M INTO M-REC
|
||||
AT END SET WS-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-TOTAL
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
CLOSE FILE-M.
|
||||
IF WS-TOTAL = 5
|
||||
DISPLAY "T4: Read=" WS-TOTAL " (reverse order) PASS"
|
||||
ADD 1 TO WS-PASS
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
END-IF.
|
||||
|
||||
DISPLAY " "
|
||||
DISPLAY "MATCHING-EDGE: PASS=" WS-PASS " FAIL=" WS-FAIL
|
||||
IF WS-FAIL = 0
|
||||
DISPLAY "ALL PASSED"
|
||||
STOP RUN RETURNING 0
|
||||
ELSE
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
.
|
||||
|
||||
MATCH-LOOP.
|
||||
SET WS-EOF-Y TO FALSE.
|
||||
PERFORM UNTIL WS-EOF-Y
|
||||
READ FILE-M INTO M-REC
|
||||
AT END SET WS-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
READ FILE-D INTO D-REC
|
||||
AT END
|
||||
ADD 1 TO WS-UNMATCH-M
|
||||
MOVE M-KEY TO O-KEY
|
||||
MOVE "UNMATCHED-MASTER" TO O-RESULT
|
||||
WRITE O-REC
|
||||
NOT AT END
|
||||
IF M-KEY = D-KEY
|
||||
ADD 1 TO WS-MATCH
|
||||
MOVE M-KEY TO O-KEY
|
||||
MOVE "MATCHED" TO O-RESULT
|
||||
WRITE O-REC
|
||||
ELSE IF M-KEY < D-KEY
|
||||
ADD 1 TO WS-UNMATCH-M
|
||||
ELSE
|
||||
ADD 1 TO WS-UNMATCH-D
|
||||
END-IF
|
||||
END-READ
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
.
|
||||
|
||||
*> データ生成補助段落
|
||||
INIT-FILE-M.
|
||||
OPEN OUTPUT FILE-M.
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
|
||||
MOVE WS-I TO M-KEY
|
||||
MOVE "MASTER-DATA" TO M-DATA
|
||||
WRITE M-REC
|
||||
END-PERFORM.
|
||||
CLOSE FILE-M.
|
||||
.
|
||||
|
||||
INIT-FILE-D-MATCH.
|
||||
OPEN OUTPUT FILE-D.
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
|
||||
MOVE WS-I TO D-KEY
|
||||
MOVE "DETAIL-DATA" TO D-DATA
|
||||
WRITE D-REC
|
||||
END-PERFORM.
|
||||
CLOSE FILE-D.
|
||||
.
|
||||
|
||||
INIT-FILE-M-SAMEKEY.
|
||||
OPEN OUTPUT FILE-M.
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
|
||||
MOVE "KEY000001" TO M-KEY
|
||||
MOVE "SAME-KEY-M" TO M-DATA
|
||||
WRITE M-REC
|
||||
END-PERFORM.
|
||||
CLOSE FILE-M.
|
||||
OPEN OUTPUT FILE-D.
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
|
||||
MOVE "KEY000001" TO D-KEY
|
||||
MOVE "SAME-KEY-D" TO D-DATA
|
||||
WRITE D-REC
|
||||
END-PERFORM.
|
||||
CLOSE FILE-D.
|
||||
.
|
||||
|
||||
INIT-FILE-DESC.
|
||||
OPEN OUTPUT FILE-M.
|
||||
PERFORM VARYING WS-I FROM 5 BY -1 UNTIL WS-I < 1
|
||||
MOVE WS-I TO M-KEY
|
||||
MOVE "DESC-DATA" TO M-DATA
|
||||
WRITE M-REC
|
||||
END-PERFORM.
|
||||
CLOSE FILE-M.
|
||||
.
|
||||
|
||||
END PROGRAM MatchingEdge.
|
||||
Reference in New Issue
Block a user