feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TAMAIN.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
|
||||
01 CON-NORMAL PIC S9(04) COMP VALUE 0.
|
||||
01 CON-FLAG-OFF PIC S9(04) COMP VALUE 0.
|
||||
01 CON-STATUS-ON PIC S9(08) COMP VALUE 1.
|
||||
01 CON-STATUS-OFF PIC S9(08) COMP VALUE 0.
|
||||
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
|
||||
01 WB-ERROR-FLAG PIC S9(04) COMP.
|
||||
01 WB-LOOP-FLAG PIC S9(04) COMP.
|
||||
01 WB-REC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-IDX PIC 9(02) COMP.
|
||||
01 WRK-JDX PIC 9(02) COMP.
|
||||
01 CALC-DURATION PIC 9(09) COMP.
|
||||
01 CALC-FREE-MIN PIC 9(09) COMP.
|
||||
01 CALC-OVER-SEC PIC 9(09) COMP.
|
||||
01 CALC-UNIT-PRICE PIC 9(04) COMP.
|
||||
01 CALC-BASE-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-OVER-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-ROAM-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-TP-IDX PIC 9(02) COMP.
|
||||
01 CALC-FOUND PIC X(01).
|
||||
88 CALC-FOUND-YES VALUE 'Y'.
|
||||
01 CALC-CALL-TYPE PIC X(02).
|
||||
01 CALC-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 SUM-COUNT PIC 9(09) VALUE 0.
|
||||
01 SUM-CHARGE PIC 9(15) VALUE 0.
|
||||
01 SUM-BASE PIC 9(15) VALUE 0.
|
||||
01 SUM-OVER PIC 9(15) VALUE 0.
|
||||
01 SUM-ROAM PIC 9(15) VALUE 0.
|
||||
01 SUM-ERROR-COUNT PIC 9(09) VALUE 0.
|
||||
|
||||
01 CDR-ID PIC X(10).
|
||||
01 CDR-CALLER PIC X(11).
|
||||
01 CDR-CALLEE PIC X(11).
|
||||
01 CDR-START PIC X(14).
|
||||
01 CDR-DURATION PIC 9(09) COMP.
|
||||
01 CDR-CALL-TYPE PIC X(02).
|
||||
01 CDR-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 COMMONMEMORY GLOBAL EXTERNAL.
|
||||
03 CM-TARIFF-TABLE.
|
||||
05 CM-TP-ENTRY OCCURS 5 TIMES.
|
||||
10 CTP-CODE PIC X(03).
|
||||
10 CTP-NAME PIC X(08).
|
||||
10 CTP-BASE-FEE PIC 9(09) COMP.
|
||||
10 CTP-UNIT-PRICE PIC 9(04) COMP.
|
||||
10 CTP-FREE-SEC PIC 9(09) COMP.
|
||||
10 CTP-OVER-PRICE PIC 9(04) COMP.
|
||||
10 CTP-ROAM-PRICE PIC 9(04) COMP.
|
||||
10 CTP-SMS-PRICE PIC 9(04) COMP.
|
||||
10 CTP-DATA-PRICE PIC 9(04) COMP.
|
||||
03 CM-TARIFF-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-DATA.
|
||||
05 CMT-ENTRY OCCURS 8 TIMES.
|
||||
10 CMT-ID PIC X(10).
|
||||
10 CMT-CALLER PIC X(11).
|
||||
10 CMT-CALLEE PIC X(11).
|
||||
10 CMT-START PIC X(14).
|
||||
10 CMT-DURATION PIC 9(09) COMP.
|
||||
10 CMT-TYPE PIC X(02).
|
||||
10 CMT-ROAM PIC X(01).
|
||||
03 CM-COMMIT-COUNT PIC 9(04) COMP.
|
||||
03 CM-PROC-COUNT PIC 9(08) COMP.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 LK-STATUS PIC S9(08) COMP.
|
||||
|
||||
PROCEDURE DIVISION USING LK-STATUS.
|
||||
0000-MAIN SECTION.
|
||||
MOVE CON-STATUS-OFF TO LK-STATUS
|
||||
MOVE ZERO TO SUM-COUNT
|
||||
MOVE ZERO TO SUM-ERROR-COUNT
|
||||
MOVE ZERO TO SUM-CHARGE
|
||||
MOVE ZERO TO SUM-BASE
|
||||
MOVE ZERO TO SUM-OVER
|
||||
MOVE ZERO TO SUM-ROAM
|
||||
MOVE ZERO TO WB-REC-COUNT
|
||||
MOVE CON-FLAG-OFF TO WB-LOOP-FLAG
|
||||
MOVE CON-NORMAL TO WB-ERROR-FLAG
|
||||
|
||||
DISPLAY "TAMAIN: tariff=" CM-TARIFF-COUNT
|
||||
" cdrs=" CM-TEST-COUNT " processing..."
|
||||
|
||||
PERFORM VARYING WRK-IDX FROM 1 BY 1
|
||||
UNTIL WRK-IDX > CM-TEST-COUNT
|
||||
OR WB-LOOP-FLAG = CON-FLAG-ON
|
||||
MOVE CMT-ID(WRK-IDX) TO CDR-ID
|
||||
MOVE CMT-CALLER(WRK-IDX) TO CDR-CALLER
|
||||
MOVE CMT-CALLEE(WRK-IDX) TO CDR-CALLEE
|
||||
MOVE CMT-START(WRK-IDX) TO CDR-START
|
||||
MOVE CMT-DURATION(WRK-IDX) TO CDR-DURATION
|
||||
MOVE CMT-TYPE(WRK-IDX) TO CDR-CALL-TYPE
|
||||
MOVE CMT-ROAM(WRK-IDX) TO CDR-ROAM-FLAG
|
||||
ADD 1 TO WB-REC-COUNT
|
||||
|
||||
PERFORM 1000-RATE-CALC
|
||||
|
||||
IF WB-ERROR-FLAG = CON-NORMAL
|
||||
PERFORM 2000-WRITE-BILLING
|
||||
ELSE
|
||||
ADD 1 TO SUM-ERROR-COUNT
|
||||
END-IF
|
||||
|
||||
IF WB-REC-COUNT >= CM-COMMIT-COUNT
|
||||
DISPLAY "COMMIT: " WB-REC-COUNT " recs"
|
||||
MOVE ZERO TO WB-REC-COUNT
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
|
||||
DISPLAY "TAMAIN: billed=" SUM-COUNT
|
||||
" errors=" SUM-ERROR-COUNT
|
||||
" total=" SUM-CHARGE
|
||||
GOBACK.
|
||||
|
||||
1000-RATE-CALC SECTION.
|
||||
MOVE CDR-CALL-TYPE TO CALC-CALL-TYPE
|
||||
MOVE CDR-ROAM-FLAG TO CALC-ROAM-FLAG
|
||||
MOVE CDR-DURATION TO CALC-DURATION
|
||||
|
||||
MOVE 'N' TO CALC-FOUND
|
||||
MOVE 1 TO CALC-TP-IDX
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > CM-TARIFF-COUNT
|
||||
IF CDR-ID(1:3) = CTP-CODE(WRK-JDX)(1:3)
|
||||
MOVE WRK-JDX TO CALC-TP-IDX
|
||||
MOVE 'Y' TO CALC-FOUND
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
EVALUATE CALC-CALL-TYPE
|
||||
WHEN "01"
|
||||
COMPUTE CALC-FREE-MIN =
|
||||
CTP-FREE-SEC(CALC-TP-IDX) * 60
|
||||
IF CALC-DURATION <= CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
ELSE
|
||||
COMPUTE CALC-OVER-SEC =
|
||||
CALC-DURATION - CALC-FREE-MIN
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-OVER-SEC *
|
||||
CTP-OVER-PRICE(CALC-TP-IDX)
|
||||
END-IF
|
||||
COMPUTE CALC-BASE-CHARGE =
|
||||
CALC-FREE-MIN *
|
||||
CTP-UNIT-PRICE(CALC-TP-IDX)
|
||||
IF CDR-ROAM-FLAG = 'Y'
|
||||
COMPUTE CALC-ROAM-CHARGE =
|
||||
CALC-DURATION *
|
||||
CTP-ROAM-PRICE(CALC-TP-IDX)
|
||||
ELSE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
END-IF
|
||||
COMPUTE CALC-TOTAL-CHARGE =
|
||||
CALC-BASE-CHARGE + CALC-OVER-CHARGE
|
||||
+ CALC-ROAM-CHARGE
|
||||
WHEN "02"
|
||||
MOVE ZERO TO CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-BASE-CHARGE
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
MOVE CTP-SMS-PRICE(CALC-TP-IDX)
|
||||
TO CALC-ROAM-CHARGE
|
||||
MOVE CALC-ROAM-CHARGE TO CALC-TOTAL-CHARGE
|
||||
WHEN "03"
|
||||
MOVE ZERO TO CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-BASE-CHARGE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-DURATION *
|
||||
CTP-DATA-PRICE(CALC-TP-IDX) / 1000
|
||||
MOVE CALC-OVER-CHARGE TO CALC-TOTAL-CHARGE
|
||||
WHEN OTHER
|
||||
MOVE CON-FLAG-ON TO WB-LOOP-FLAG
|
||||
DISPLAY "ERROR: type=" CALC-CALL-TYPE
|
||||
END-EVALUATE
|
||||
EXIT.
|
||||
|
||||
2000-WRITE-BILLING SECTION.
|
||||
ADD CALC-TOTAL-CHARGE TO SUM-CHARGE
|
||||
ADD CALC-BASE-CHARGE TO SUM-BASE
|
||||
ADD CALC-OVER-CHARGE TO SUM-OVER
|
||||
ADD CALC-ROAM-CHARGE TO SUM-ROAM
|
||||
ADD 1 TO SUM-COUNT
|
||||
ADD 1 TO CM-PROC-COUNT
|
||||
DISPLAY "BILL: " CDR-ID " TYPE:" CDR-CALL-TYPE
|
||||
" DUR:" CDR-DURATION " TOTAL:" CALC-TOTAL-CHARGE
|
||||
EXIT.
|
||||
|
||||
END PROGRAM TAMAIN.
|
||||
Reference in New Issue
Block a user