feat: add benchmark-programs — 58 telecom COBOL test programs

作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NB-076
2026-06-25 09:53:21 +08:00
parent 50f9f0f52f
commit 94400d50d4
278 changed files with 44125 additions and 0 deletions
@@ -0,0 +1,197 @@
*> ============================================================
*> main-88level : 88-level条件判定 (88-Level Condition Test)
*> Input : FILE-IN (INPUT.DAT: 条件测试数据)
*> Output: FILE-OUT (OUTPUT.DAT: 判定结果)
*> Coverage: B-N004, B-R001
*> ============================================================
IDENTIFICATION DIVISION.
PROGRAM-ID. Test88Level.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE-IN ASSIGN TO "INPUT.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT FILE-OUT ASSIGN TO "OUTPUT.DAT"
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FILE-IN RECORD CONTAINS 40 CHARACTERS.
01 IN-REC.
05 IN-STATUS PIC X(2).
05 IN-CODE PIC X(3).
05 IN-VALUE PIC 9(5).
05 IN-FLAG PIC X(1).
05 FILLER PIC X(29).
FD FILE-OUT RECORD CONTAINS 80 CHARACTERS.
01 OUT-REC.
05 OUT-DESC PIC X(60).
05 OUT-RESULT PIC X(10).
WORKING-STORAGE SECTION.
*> 88-level 条件名定義
01 WS-STATUS.
05 WS-STATUS-X PIC X(2).
88 WS-ACTIVE VALUE 'AC'.
88 WS-INACTIVE VALUE 'IN'.
88 WS-PENDING VALUE 'PE'.
88 WS-CLOSED VALUE 'CL'.
88 WS-ERROR VALUE 'ER'.
01 WS-CODE.
05 WS-CODE-X PIC X(3).
88 WS-CODE-A VALUE 'A01', 'A02', 'A03'.
88 WS-CODE-B VALUE 'B01', 'B02'.
88 WS-CODE-ERR VALUE 'ERR'.
01 WS-FLAG.
05 WS-FLAG-X PIC X(1).
88 WS-FLAG-YES VALUE 'Y' FALSE 'N'.
88 WS-FLAG-NO VALUE 'N'.
01 WS-TYPE PIC X(10).
01 WS-EOF PIC X(1) VALUE 'N'.
88 WS-EOF-Y VALUE 'Y' FALSE 'N'.
01 WS-COUNT PIC 9(5).
01 WS-PASS PIC 9(2).
01 WS-FAIL PIC 9(2).
01 WS-TELECOM-REC.
COPY "telecom/TEL-BILLING.cpy".
PROCEDURE DIVISION.
MAIN.
DISPLAY "TEST-88LEVEL: Starting 88-level condition test"
OPEN INPUT FILE-IN.
OPEN OUTPUT FILE-OUT.
*> Test B-N004-1: 88-level 單值條件
MOVE 'AC' TO WS-STATUS-X.
IF WS-ACTIVE
DISPLAY "B-N004-1: AC → ACTIVE PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-1: FAIL"
ADD 1 TO WS-FAIL
END-IF.
*> Test B-N004-2: 88-level false condition
MOVE 'IN' TO WS-STATUS-X.
IF WS-ACTIVE
DISPLAY "B-N004-2: IN → ACTIVE? FAIL"
ADD 1 TO WS-FAIL
ELSE
DISPLAY "B-N004-2: IN → NOT ACTIVE PASS"
ADD 1 TO WS-PASS
END-IF.
*> Test B-N004-3: 88-level 複數值
MOVE 'A01' TO WS-CODE-X.
IF WS-CODE-A
DISPLAY "B-N004-3: A01 → CODE-A PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-3: FAIL"
ADD 1 TO WS-FAIL
END-IF.
MOVE 'A02' TO WS-CODE-X.
IF WS-CODE-A
DISPLAY "B-N004-4: A02 → CODE-A PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-4: FAIL"
ADD 1 TO WS-FAIL
END-IF.
*> Test B-N004-5: 88-level with NOT
MOVE 'PE' TO WS-STATUS-X.
IF NOT WS-ACTIVE AND NOT WS-INACTIVE
DISPLAY "B-N004-5: PE → NOT ACTIVE/INACTIVE PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-5: FAIL"
ADD 1 TO WS-FAIL
END-IF.
*> Test B-N004-6: 88-level error code
MOVE 'ERR' TO WS-CODE-X.
IF WS-CODE-ERR
DISPLAY "B-N004-6: ERR → CODE-ERR PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-6: FAIL"
ADD 1 TO WS-FAIL
END-IF.
*> Test B-N004-7: Y/N flag 88-level
MOVE 'Y' TO WS-FLAG-X.
IF WS-FLAG-YES
DISPLAY "B-N004-7: Y → FLAG-YES PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-7: FAIL"
ADD 1 TO WS-FAIL
END-IF.
MOVE 'N' TO WS-FLAG-X.
IF WS-FLAG-NO
DISPLAY "B-N004-8: N → FLAG-NO PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-N004-8: FAIL"
ADD 1 TO WS-FAIL
END-IF.
*> Test B-R001: COBOL85 關係運算子
IF WS-PASS > WS-FAIL
DISPLAY "B-R001: RELOP > PASS"
END-IF.
IF WS-FAIL < WS-PASS
DISPLAY "B-R001: RELOP < PASS"
END-IF.
IF WS-PASS >= 6
DISPLAY "B-R001: RELOP >= PASS"
END-IF.
IF WS-FAIL <= 2
DISPLAY "B-R001: RELOP <= PASS"
END-IF.
*> 88-level with EVALUATE
MOVE 'CL' TO WS-STATUS-X.
EVALUATE TRUE
WHEN WS-ACTIVE
MOVE 'ACTIVE' TO WS-TYPE
WHEN WS-INACTIVE
MOVE 'INACTIVE' TO WS-TYPE
WHEN WS-PENDING
MOVE 'PENDING' TO WS-TYPE
WHEN WS-CLOSED
MOVE 'CLOSED' TO WS-TYPE
WHEN WS-ERROR
MOVE 'ERROR' TO WS-TYPE
END-EVALUATE.
IF WS-TYPE = 'CLOSED'
DISPLAY "B-R001: EVALUATE+88-level PASS"
ADD 1 TO WS-PASS
ELSE
DISPLAY "B-R001: EVALUATE+88-level FAIL"
ADD 1 TO WS-FAIL
END-IF.
CLOSE FILE-IN FILE-OUT.
DISPLAY " "
DISPLAY "88-LEVEL: PASS=" WS-PASS " FAIL=" WS-FAIL
IF WS-FAIL = 0
DISPLAY "88-LEVEL: ALL PASSED"
STOP RUN RETURNING 0
ELSE
DISPLAY "88-LEVEL: FAILED"
STOP RUN RETURNING 1
END-IF
.
END PROGRAM Test88Level.