feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user