IDENTIFICATION DIVISION. PROGRAM-ID. MinimalPgmEdge. *> ============================================================ *> 最小限プログラム境界テスト (Minimal Program Edge Cases) *> 型判定下限: どのタイプにも分類できない極小プログラム *> *> T1: PROCEDURE DIVISIONだけで何もしない *> T2: STOP RUNのみ *> T3: DISPLAYのみ *> T4: CALL+Gobackのみ (Subprogram最小) *> T5: IFのみでELSEなし *> T6: 空PERFORM *> T7: 88-levelのみ判定 (ファイル入出力なし) *> T8: 全ての分岐を省略 (fall-through only) *> ============================================================ DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-PASS PIC 9(2) VALUE 0. 01 WS-FAIL PIC 9(2) VALUE 0. 01 WS-X PIC 9(1) VALUE 0. 01 WS-Y PIC 9(1) VALUE 1. PROCEDURE DIVISION. MAIN. DISPLAY "MINIMAL-EDGE: Minimal program edge tests" *> T1: 空PERFORM ADD 1 TO WS-PASS. PERFORM EMPTY-PARA. DISPLAY "T1-EMPTY-PERFORM: PASS". *> T2: IFのみELSEなし ADD 1 TO WS-PASS. IF WS-X = 0 DISPLAY "T2-IF-ONLY: x=0 true (no ELSE) PASS" END-IF. *> T3: IF FALSE (何もしない) ADD 1 TO WS-PASS. IF WS-X = 1 DISPLAY "T3-IF-FALSE: SHOULD NOT REACH" ADD 1 TO WS-FAIL END-IF. DISPLAY "T3-IF-FALSE: skipped correctly PASS". *> T4: 88-levelのみ (ファイルなし) ADD 1 TO WS-PASS. IF WS-PASS > WS-FAIL DISPLAY "T4-88-ONLY: relational op PASS" END-IF. *> T5: PERFORM VARYING 0回 ADD 1 TO WS-PASS. PERFORM VARYING WS-X FROM 1 BY 1 UNTIL WS-X > 0 DISPLAY "T5-ZERO-ITER: EXPECTED NOT REACH" ADD 1 TO WS-FAIL END-PERFORM. DISPLAY "T5-ZERO-ITER: 0 iterations PASS". *> T6: 段落スルー (FROM paragraph) ADD 1 TO WS-PASS. GO TO T6-PARA. T6-END. DISPLAY "T6-FALL-THRU: reached PASS". GO TO T6-DONE. T6-PARA. DISPLAY " T6-PARA: entering" GO TO T6-END. T6-DONE. CONTINUE. DISPLAY " " DISPLAY "MINIMAL-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 . EMPTY-PARA. EXIT. . END PROGRAM MinimalPgmEdge.