feat: add benchmark-programs — 58 telecom COBOL test programs

作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NB-076
2026-06-25 09:53:21 +08:00
parent 50f9f0f52f
commit 94400d50d4
278 changed files with 44125 additions and 0 deletions
@@ -0,0 +1,24 @@
# PERFORM Loop Variations
## Test Cases
| Test ID | Description |
|---------|-------------|
| LP-N001 | PERFORM VARYING (counting loop 1 TO 10) |
| LP-N002 | PERFORM UNTIL (condition loop) |
| LP-N003 | PERFORM TIMES (fixed count) |
| LP-N004 | PERFORM THRU paragraph range |
| LP-N005 | Nested PERFORM 3 levels |
| LP-N006 | EXIT PERFORM / EXIT PERFORM CYCLE |
| LP-N007 | Zero iteration PERFORM test |
| LP-A001 | Inline PERFORM (END-PERFORM) variation |
## Features Covered
- All PERFORM variants (VARYING, UNTIL, TIMES, THRU)
- Inline PERFORM with END-PERFORM scope terminator
- Nested loops at 3 levels (27 iterations)
- Loop exit (EXIT PERFORM) and cycle skip (EXIT PERFORM CYCLE)
- Zero-iteration boundary cases
## Expected Results
All 8 tests should display PASS.
@@ -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.