*> ============================================================ *> 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.