94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
215 lines
6.9 KiB
COBOL
215 lines
6.9 KiB
COBOL
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.
|