IDENTIFICATION DIVISION. PROGRAM-ID. SortAnomaly. *> SORT 異常系測試 *> Coverage: SR-A002 (INPUT未RELEASE), SR-A003 (OUTPUT未RETURN) 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. SELECT WORK-F ASSIGN TO "WORK.TMP". DATA DIVISION. FILE SECTION. FD FILE-IN RECORD CONTAINS 40 CHARACTERS. 01 IN-REC. 05 IN-KEY PIC X(10). 05 IN-DATA PIC X(30). FD FILE-OUT RECORD CONTAINS 40 CHARACTERS. 01 OUT-REC PIC X(40). SD WORK-F. 01 WRK-REC PIC X(40). WORKING-STORAGE SECTION. 01 WS-EOF PIC X(1) VALUE 'N'. 88 WS-EOF-Y VALUE 'Y' FALSE 'N'. 01 WS-PASS PIC 9(2) VALUE 0. 01 WS-FAIL PIC 9(2) VALUE 0. 01 WS-TEST PIC 9(2) VALUE 0. 01 WS-COUNT PIC 9(5). 01 WS-I PIC 9(5). 01 WS-CDR-REC. COPY "telecom/TEL-CDR.cpy". PROCEDURE DIVISION. MAIN. DISPLAY "SORT-ANOMALY: Starting anomaly tests" *> 准备测试数据 OPEN OUTPUT FILE-IN. PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10 MOVE WS-I TO IN-KEY MOVE "RECORD-" TO IN-DATA WRITE IN-REC END-PERFORM. CLOSE FILE-IN. *> SR-A002: INPUT PROCEDURE 内未RELEASE → 数据丢失 ADD 1 TO WS-TEST. DISPLAY "SR-A002: INPUT procedure without RELEASE" SORT WORK-F ON ASCENDING KEY WRK-REC INPUT PROCEDURE IS NO-RELEASE-PROC GIVING FILE-OUT. OPEN INPUT FILE-OUT. MOVE 0 TO WS-COUNT. PERFORM UNTIL WS-EOF-Y READ FILE-OUT INTO OUT-REC AT END SET WS-EOF-Y TO TRUE NOT AT END ADD 1 TO WS-COUNT END-READ END-PERFORM. CLOSE FILE-OUT. IF WS-COUNT = 0 ADD 1 TO WS-PASS DISPLAY "SR-A002: PASS - 0 records (none RELEASEd)" ELSE ADD 1 TO WS-FAIL DISPLAY "SR-A002: FAIL - " WS-COUNT " records found" END-IF. MOVE 'N' TO WS-EOF. *> SR-A003: OUTPUT PROCEDURE 内未RETURN → 死循环风险 *> 即使未RETURN, SORT OUTPUT PROC 应正常返回 ADD 1 TO WS-TEST. DISPLAY "SR-A003: OUTPUT procedure without RETURN" OPEN INPUT FILE-IN. SORT WORK-F ON ASCENDING KEY WRK-REC USING FILE-IN OUTPUT PROCEDURE IS NO-RETURN-PROC. CLOSE FILE-IN. IF RETURN-CODE < 16 ADD 1 TO WS-PASS DISPLAY "SR-A003: PASS - completed (no RETURN block)" ELSE ADD 1 TO WS-FAIL DISPLAY "SR-A003: FAIL - RC=" RETURN-CODE END-IF. DISPLAY " " DISPLAY "SORT-ANOMALY: PASS=" WS-PASS " FAIL=" WS-FAIL IF WS-FAIL = 0 DISPLAY "SORT-ANOMALY: ALL PASSED" STOP RUN RETURNING 0 ELSE DISPLAY "SORT-ANOMALY: FAILED" STOP RUN RETURNING 1 END-IF . NO-RELEASE-PROC SECTION. OPEN INPUT FILE-IN. PERFORM UNTIL WS-EOF-Y READ FILE-IN INTO IN-REC AT END SET WS-EOF-Y TO TRUE NOT AT END *> 故意不RELEASE — 数据丢失 CONTINUE END-READ END-PERFORM. CLOSE FILE-IN. . NO-RETURN-PROC SECTION. *> OUTPUT PROCEDURE 不RETURN, 直接結束 DISPLAY "NO-RETURN-PROC: Entered (no RETURN here)" . END PROGRAM SortAnomaly.