94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
200 lines
6.0 KiB
COBOL
200 lines
6.0 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
*> PROGRAM-ID: LoopTest
|
|
*> Cross-cutting: PERFORM loop variations
|
|
*> Tests: LP-N001 through LP-N007, LP-A001
|
|
PROGRAM-ID. LoopTest.
|
|
ENVIRONMENT DIVISION.
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
77 I PIC 99 VALUE 0.
|
|
77 J PIC 99 VALUE 0.
|
|
77 K PIC 99 VALUE 0.
|
|
77 WS-SUM PIC 999 VALUE 0.
|
|
77 WS-COUNT PIC 99 VALUE 0.
|
|
77 WS-TOTAL PIC 9999 VALUE 0.
|
|
77 TC PIC 99 VALUE 0.
|
|
PROCEDURE DIVISION.
|
|
*
|
|
* LP-N001: PERFORM VARYING (counting loop 1 TO 10)
|
|
*
|
|
LP-N001.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N001: PERFORM VARYING 1 TO 10".
|
|
MOVE 0 TO WS-SUM.
|
|
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
|
|
ADD I TO WS-SUM
|
|
END-PERFORM.
|
|
IF WS-SUM = 55
|
|
DISPLAY " 1+..+10=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " 1+..+10=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N001: PASS".
|
|
*
|
|
* LP-N002: PERFORM UNTIL (condition loop)
|
|
*
|
|
LP-N002.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N002: PERFORM UNTIL".
|
|
MOVE 1 TO I.
|
|
MOVE 0 TO WS-SUM.
|
|
PERFORM UNTIL I > 10
|
|
ADD I TO WS-SUM
|
|
ADD 1 TO I
|
|
END-PERFORM.
|
|
IF WS-SUM = 55
|
|
DISPLAY " UNTIL SUM=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " UNTIL SUM=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N002: PASS".
|
|
*
|
|
* LP-N003: PERFORM TIMES (fixed count)
|
|
*
|
|
LP-N003.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N003: PERFORM 5 TIMES".
|
|
MOVE 0 TO WS-SUM.
|
|
MOVE 1 TO I.
|
|
PERFORM 5 TIMES
|
|
ADD I TO WS-SUM
|
|
ADD 1 TO I
|
|
END-PERFORM.
|
|
IF WS-SUM = 15
|
|
DISPLAY " 5 TIMES SUM=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " 5 TIMES SUM=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N003: PASS".
|
|
*
|
|
* LP-N004: PERFORM THRU paragraph range
|
|
*
|
|
LP-N004.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N004: PERFORM THRU paragraph range".
|
|
MOVE 0 TO WS-TOTAL.
|
|
PERFORM CALC-A THRU CALC-END.
|
|
IF WS-TOTAL = 30
|
|
DISPLAY " THRU TOTAL=" WS-TOTAL " OK"
|
|
ELSE
|
|
DISPLAY " THRU TOTAL=" WS-TOTAL " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N004: PASS".
|
|
GO TO LP-N005.
|
|
*
|
|
CALC-A.
|
|
ADD 10 TO WS-TOTAL.
|
|
CALC-B.
|
|
ADD 20 TO WS-TOTAL.
|
|
CALC-END.
|
|
EXIT.
|
|
*
|
|
* LP-N005: Nested PERFORM 3 levels
|
|
*
|
|
LP-N005.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N005: Nested PERFORM 3 levels".
|
|
MOVE 0 TO WS-TOTAL.
|
|
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
|
|
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
|
|
PERFORM VARYING K FROM 1 BY 1 UNTIL K > 3
|
|
ADD 1 TO WS-TOTAL
|
|
END-PERFORM
|
|
END-PERFORM
|
|
END-PERFORM.
|
|
* 3*3*3 = 27 iterations
|
|
IF WS-TOTAL = 27
|
|
DISPLAY " 3-LEVEL NEST=" WS-TOTAL " OK"
|
|
ELSE
|
|
DISPLAY " 3-LEVEL NEST=" WS-TOTAL " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N005: PASS".
|
|
*
|
|
* LP-N006: EXIT PERFORM / EXIT PERFORM CYCLE
|
|
*
|
|
LP-N006.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N006: EXIT PERFORM and EXIT PERFORM CYCLE".
|
|
MOVE 0 TO WS-SUM.
|
|
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 20
|
|
IF I > 10
|
|
EXIT PERFORM
|
|
END-IF
|
|
ADD I TO WS-SUM
|
|
END-PERFORM.
|
|
IF WS-SUM = 55
|
|
DISPLAY " EXIT PERFORM SUM(1..10)=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " EXIT PERFORM SUM(1..10)=" WS-SUM " FAIL"
|
|
END-IF.
|
|
*
|
|
* EXIT PERFORM CYCLE test
|
|
*
|
|
MOVE 0 TO WS-SUM.
|
|
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
|
|
IF I = 5
|
|
EXIT PERFORM CYCLE
|
|
END-IF
|
|
ADD I TO WS-SUM
|
|
END-PERFORM.
|
|
* 55 - 5 = 50
|
|
IF WS-SUM = 50
|
|
DISPLAY " EXIT CYCLE SUM(no5)=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " EXIT CYCLE SUM(no5)=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N006: PASS".
|
|
*
|
|
* LP-N007: Zero iteration PERFORM test
|
|
*
|
|
LP-N007.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-N007: Zero iteration PERFORM".
|
|
MOVE 0 TO WS-SUM.
|
|
MOVE 0 TO I.
|
|
PERFORM UNTIL I > 0
|
|
ADD 1 TO WS-SUM
|
|
END-PERFORM.
|
|
IF WS-SUM = 0
|
|
DISPLAY " 0-ITER UNTIL SUM=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " 0-ITER UNTIL SUM=" WS-SUM " FAIL"
|
|
END-IF.
|
|
*
|
|
MOVE 0 TO WS-SUM.
|
|
PERFORM 0 TIMES
|
|
ADD 1 TO WS-SUM
|
|
END-PERFORM.
|
|
IF WS-SUM = 0
|
|
DISPLAY " 0-TIMES SUM=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " 0-TIMES SUM=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-N007: PASS".
|
|
*
|
|
* LP-A001: Inline PERFORM (END-PERFORM) variation
|
|
*
|
|
LP-A001.
|
|
ADD 1 TO TC.
|
|
DISPLAY "LP-A001: Inline PERFORM variation".
|
|
MOVE 0 TO WS-SUM.
|
|
MOVE 1 TO I.
|
|
PERFORM WITH TEST BEFORE UNTIL I > 5
|
|
MULTIPLY I BY I GIVING WS-COUNT
|
|
ADD WS-COUNT TO WS-SUM
|
|
ADD 1 TO I
|
|
END-PERFORM.
|
|
* 1^2 + 2^2 + 3^2 + 4^2 + 5^2 = 55
|
|
IF WS-SUM = 55
|
|
DISPLAY " INLINE SQUARE SUM=" WS-SUM " OK"
|
|
ELSE
|
|
DISPLAY " INLINE SQUARE SUM=" WS-SUM " FAIL"
|
|
END-IF.
|
|
DISPLAY "LP-A001: PASS".
|
|
*
|
|
* Summary
|
|
*
|
|
END-TEST.
|
|
DISPLAY "LOOP: ALL " TC " TESTS DONE".
|
|
STOP RUN.
|