Files
cobol-java-v3/benchmark-programs/cross-cutting/edge-cases/level88-edge.cbl
T
NB-076 94400d50d4 feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 09:53:21 +08:00

177 lines
5.2 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. Level88Edge.
*> ============================================================
*> 88-level 条件名境界テスト
*> 88-level THRU(範囲), 複数VALUE, 複合条件
*> Coverage: B-N004 拡張, 境界条件
*> ============================================================
DATA DIVISION.
WORKING-STORAGE SECTION.
*> T1: 88-level with THRU (範囲指定)
01 WS-SCORE PIC 9(3).
88 WS-GRADE-A VALUE 90 THRU 100.
88 WS-GRADE-B VALUE 75 THRU 89.
88 WS-GRADE-C VALUE 60 THRU 74.
88 WS-GRADE-D VALUE 0 THRU 59.
*> T2: 88-level with 複数値
01 WS-DAY PIC X(3).
88 WS-WEEKDAY VALUE 'MON', 'TUE', 'WED', 'THU', 'FRI'.
88 WS-WEEKEND VALUE 'SAT', 'SUN'.
*> T3: 88-level with 複数英字名
01 WS-PLAN PIC X(3).
88 WS-PLAN-PREPAID VALUE 'P01', 'P02'.
88 WS-PLAN-POSTPAID VALUE 'P03', 'P04'.
88 WS-PLAN-VIP VALUE 'V01', 'V02'.
*> T4: 88-level with 極端な範囲(境界値)
01 WS-PCT PIC 9(3).
88 WS-PCT-LOW VALUE 0 THRU 10.
88 WS-PCT-MED VALUE 11 THRU 50.
88 WS-PCT-HIGH VALUE 51 THRU 100.
88 WS-PCT-OVR VALUE 101 THRU 999.
*> T5: 88-level with SPACE/ZERO/LOW/HIGH
01 WS-FLAG PIC X(1).
88 WS-FLAG-YES VALUE 'Y'.
88 WS-FLAG-NO VALUE 'N'.
88 WS-FLAG-EMPTY VALUE SPACE.
01 WS-PASS PIC 9(2) VALUE 0.
01 WS-FAIL PIC 9(2) VALUE 0.
01 WS-TC PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
MAIN.
DISPLAY "88-LEVEL-EDGE: 88-level THRU/boundary tests"
*> T1: THRU境界値テスト
ADD 1 TO WS-TC.
MOVE 90 TO WS-SCORE.
IF WS-GRADE-A
DISPLAY "T1-A: 90→GRADE-A PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 100 TO WS-SCORE.
IF WS-GRADE-A
DISPLAY "T1-B: 100→GRADE-A (upper bound) PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 89 TO WS-SCORE.
IF WS-GRADE-B
DISPLAY "T1-C: 89→GRADE-B (boundary) PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 75 TO WS-SCORE.
IF WS-GRADE-B
DISPLAY "T1-D: 75→GRADE-B (lower bound) PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
*> T2: 複数値OR条件
ADD 1 TO WS-TC.
MOVE 'MON' TO WS-DAY.
IF WS-WEEKDAY
DISPLAY "T2-A: MON→WEEKDAY PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 'SAT' TO WS-DAY.
IF WS-WEEKEND
DISPLAY "T2-B: SAT→WEEKEND PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
*> T3: 複数英文字コード
ADD 1 TO WS-TC.
MOVE 'V01' TO WS-PLAN.
IF WS-PLAN-VIP
DISPLAY "T3-A: V01→VIP PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 'P01' TO WS-PLAN.
IF WS-PLAN-PREPAID
DISPLAY "T3-B: P01→PREPAID PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
*> T4: 極端範囲値
ADD 1 TO WS-TC.
MOVE 0 TO WS-PCT.
IF WS-PCT-LOW
DISPLAY "T4-A: 0→LOW (minimum) PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
ADD 1 TO WS-TC.
MOVE 999 TO WS-PCT.
IF WS-PCT-OVR
DISPLAY "T4-B: 999→OVER (maximum) PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
*> T5: SPACE判定
ADD 1 TO WS-TC.
MOVE SPACE TO WS-FLAG.
IF WS-FLAG-EMPTY
DISPLAY "T5: SPACE→EMPTY PASS"
ADD 1 TO WS-PASS
ELSE
ADD 1 TO WS-FAIL
END-IF.
*> T6: EVALUATE + 88-level 複合
ADD 1 TO WS-TC.
MOVE 85 TO WS-SCORE.
MOVE 'WED' TO WS-DAY.
EVALUATE TRUE
WHEN WS-GRADE-A AND WS-WEEKDAY
DISPLAY "T6: GRADE-A + WEEKDAY PASS"
ADD 1 TO WS-PASS
WHEN OTHER
ADD 1 TO WS-FAIL
END-EVALUATE.
DISPLAY " "
DISPLAY "88-LEVEL-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
.
END PROGRAM Level88Edge.