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,442 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. TA-TELAMTCAL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
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-NORMAL PIC S9(04) COMP VALUE 0.
01 CON-ADD-COUNT PIC 9(04) COMP VALUE 1.
01 CON-ADD-TOTAL-COUNT PIC 9(04) COMP VALUE 1.
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
01 WRK-FLAGS.
03 WB-ERROR-FLAG PIC S9(04) COMP.
03 WB-LOOP-FLAG PIC S9(04) COMP.
01 WRK-PARAM-COUNT PIC 9(04) COMP.
01 WRK-TOTAL-COUNT PIC 9(08) COMP.
01 WRK-LOOP-COUNT PIC 9(04) COMP.
01 WRK-PROC-COUNT PIC 9(08) COMP.
01 WRK-REC-COUNT PIC 9(08) COMP.
01 WRK-IDX PIC 9(02) COMP.
01 WRK-JDX PIC 9(02) COMP.
01 WRK-EMS-RET PIC S9(04) COMP.
01 WRK-ABEND-COD PIC S9(04) COMP.
01 WRK-TARIFF-COUNT PIC 9(02) COMP VALUE 5.
01 WRK-TARIFF-TABLE.
03 WRK-TP-ENTRY OCCURS 5 TIMES.
05 TP-CODE PIC X(03).
05 TP-NAME PIC X(08).
05 TP-BASE-FEE PIC 9(09) COMP.
05 TP-UNIT-PRICE PIC 9(04) COMP.
05 TP-FREE-SEC PIC 9(09) COMP.
05 TP-OVER-PRICE PIC 9(04) COMP.
05 TP-ROAM-PRICE PIC 9(04) COMP.
05 TP-SMS-PRICE PIC 9(04) COMP.
05 TP-DATA-PRICE PIC 9(04) COMP.
01 CDR-REC.
03 CDR-ID PIC X(10).
03 CDR-CALLER PIC X(11).
03 CDR-CALLEE PIC X(11).
03 CDR-START PIC X(14).
03 CDR-DURATION PIC 9(09) COMP.
03 CDR-CALL-TYPE PIC X(02).
03 CDR-ROAM-FLAG PIC X(01).
01 BLL-REC.
03 BLL-CALL-ID PIC X(10).
03 BLL-CUST-ID PIC X(10).
03 BLL-PLAN-CODE PIC X(03).
03 BLL-CALL-TYPE PIC X(02).
03 BLL-DURATION PIC 9(09) COMP.
03 BLL-FREE-MIN PIC 9(09) COMP.
03 BLL-OVER-USAGE PIC 9(09) COMP.
03 BLL-UNIT-PRICE PIC 9(04) COMP.
03 BLL-BASE-CHARGE PIC 9(09) COMP.
03 BLL-OVER-CHARGE PIC 9(09) COMP.
03 BLL-ROAM-CHARGE PIC 9(09) COMP.
03 BLL-TOTAL-CHARGE PIC 9(09) COMP.
03 BLL-STATUS PIC X(01).
01 CALC-AREA.
03 CALC-DURATION PIC 9(09) COMP.
03 CALC-FREE-MIN PIC 9(09) COMP.
03 CALC-OVER-SEC PIC 9(09) COMP.
03 CALC-UNIT-PRICE PIC 9(04) COMP.
03 CALC-BASE-CHARGE PIC 9(09) COMP.
03 CALC-OVER-CHARGE PIC 9(09) COMP.
03 CALC-ROAM-CHARGE PIC 9(09) COMP.
03 CALC-TOTAL-CHARGE PIC 9(09) COMP.
03 CALC-TP-IDX PIC 9(02) COMP.
03 CALC-FOUND PIC X(01).
88 CALC-FOUND-YES VALUE 'Y'.
03 CALC-PLAN-CODE PIC X(03).
03 CALC-CALL-TYPE PIC X(02).
03 CALC-ROAM-FLAG PIC X(01).
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-COUNT PIC 9(09) VALUE 0.
01 SUM-ERROR-COUNT PIC 9(09) VALUE 0.
01 CDR-TEST-COUNT PIC 9(02) COMP VALUE 8.
01 CDR-TEST-DATA.
03 CDR-TEST-ENTRY OCCURS 8 TIMES.
05 TE-ID PIC X(10).
05 TE-CALLER PIC X(11).
05 TE-CALLEE PIC X(11).
05 TE-START PIC X(14).
05 TE-DURATION PIC 9(09) COMP.
05 TE-TYPE PIC X(02).
05 TE-ROAM PIC X(01).
PROCEDURE DIVISION.
0000-MAIN SECTION.
DISPLAY "TA-TELAMTCAL: Starting"
DISPLAY "Telecom Amount Calculation System"
PERFORM 0100-INIT.
PERFORM 0200-LOAD-TARIFF.
PERFORM 0300-LOAD-TEST-DATA.
PERFORM VARYING WRK-IDX FROM 1 BY 1
UNTIL WRK-IDX > CDR-TEST-COUNT
OR WB-LOOP-FLAG = CON-FLAG-ON
PERFORM 0400-PROCESS-CDR
END-PERFORM.
PERFORM 0700-CHECKPOINT.
PERFORM 0800-SUMMARY.
DISPLAY "TA-TELAMTCAL: Normal end"
DISPLAY "PROCESSED: " SUM-COUNT
" TOTAL-CHARGE: " SUM-CHARGE
STOP RUN.
0100-INIT SECTION.
MOVE CON-FLAG-OFF TO WB-LOOP-FLAG.
MOVE CON-NORMAL TO WB-ERROR-FLAG.
MOVE CON-STATUS-OFF TO WB-ERROR-FLAG.
MOVE ZERO TO WRK-TOTAL-COUNT.
MOVE ZERO TO WRK-LOOP-COUNT.
MOVE ZERO TO WRK-REC-COUNT.
MOVE ZERO TO WRK-PROC-COUNT.
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
DISPLAY "INIT: OK".
EXIT.
0200-LOAD-TARIFF SECTION.
MOVE 5 TO WRK-TARIFF-COUNT.
MOVE "P01" TO TP-CODE(1)
MOVE "BASIC" TO TP-NAME(1)
MOVE 3000 TO TP-BASE-FEE(1)
MOVE 20 TO TP-UNIT-PRICE(1)
MOVE 6000 TO TP-FREE-SEC(1)
MOVE 20 TO TP-OVER-PRICE(1)
MOVE 50 TO TP-ROAM-PRICE(1)
MOVE 10 TO TP-SMS-PRICE(1)
MOVE 30 TO TP-DATA-PRICE(1)
MOVE "P02" TO TP-CODE(2)
MOVE "BUSINESS" TO TP-NAME(2)
MOVE 8000 TO TP-BASE-FEE(2)
MOVE 10 TO TP-UNIT-PRICE(2)
MOVE 30000 TO TP-FREE-SEC(2)
MOVE 15 TO TP-OVER-PRICE(2)
MOVE 30 TO TP-ROAM-PRICE(2)
MOVE 5 TO TP-SMS-PRICE(2)
MOVE 20 TO TP-DATA-PRICE(2)
MOVE "P03" TO TP-CODE(3)
MOVE "UNLIMIT" TO TP-NAME(3)
MOVE 20000 TO TP-BASE-FEE(3)
MOVE 5 TO TP-UNIT-PRICE(3)
MOVE 120000 TO TP-FREE-SEC(3)
MOVE 5 TO TP-OVER-PRICE(3)
MOVE 20 TO TP-ROAM-PRICE(3)
MOVE 3 TO TP-SMS-PRICE(3)
MOVE 10 TO TP-DATA-PRICE(3)
MOVE "P04" TO TP-CODE(4)
MOVE "DATA-ONLY" TO TP-NAME(4)
MOVE 5000 TO TP-BASE-FEE(4)
MOVE 0 TO TP-UNIT-PRICE(4)
MOVE 0 TO TP-FREE-SEC(4)
MOVE 0 TO TP-OVER-PRICE(4)
MOVE 0 TO TP-ROAM-PRICE(4)
MOVE 0 TO TP-SMS-PRICE(4)
MOVE 20 TO TP-DATA-PRICE(4)
MOVE "P05" TO TP-CODE(5)
MOVE "CHEAP" TO TP-NAME(5)
MOVE 1000 TO TP-BASE-FEE(5)
MOVE 30 TO TP-UNIT-PRICE(5)
MOVE 1800 TO TP-FREE-SEC(5)
MOVE 30 TO TP-OVER-PRICE(5)
MOVE 150 TO TP-ROAM-PRICE(5)
MOVE 100 TO TP-SMS-PRICE(5)
MOVE 50 TO TP-DATA-PRICE(5)
DISPLAY "TARIFF: " WRK-TARIFF-COUNT " plans loaded".
PERFORM VARYING WRK-JDX FROM 1 BY 1
UNTIL WRK-JDX > WRK-TARIFF-COUNT
DISPLAY " " TP-CODE(WRK-JDX)
" " TP-NAME(WRK-JDX)
" BASE=" TP-BASE-FEE(WRK-JDX)
" UNIT=" TP-UNIT-PRICE(WRK-JDX)
" FREE=" TP-FREE-SEC(WRK-JDX)
END-PERFORM.
EXIT.
0300-LOAD-TEST-DATA SECTION.
MOVE 8 TO CDR-TEST-COUNT.
MOVE "CDR0000001" TO TE-ID(1)
MOVE "86138001380" TO TE-CALLER(1)
MOVE "86139009990" TO TE-CALLEE(1)
MOVE "20250601083000" TO TE-START(1)
MOVE 120 TO TE-DURATION(1)
MOVE "01" TO TE-TYPE(1)
MOVE "N" TO TE-ROAM(1)
MOVE "CDR0000002" TO TE-ID(2)
MOVE "86138001380" TO TE-CALLER(2)
MOVE "86137007770" TO TE-CALLEE(2)
MOVE "20250601084500" TO TE-START(2)
MOVE 45 TO TE-DURATION(2)
MOVE "01" TO TE-TYPE(2)
MOVE "N" TO TE-ROAM(2)
MOVE "CDR0000003" TO TE-ID(3)
MOVE "86138001380" TO TE-CALLER(3)
MOVE "86136006660" TO TE-CALLEE(3)
MOVE "20250601090000" TO TE-START(3)
MOVE 300 TO TE-DURATION(3)
MOVE "01" TO TE-TYPE(3)
MOVE "N" TO TE-ROAM(3)
MOVE "CDR0000004" TO TE-ID(4)
MOVE "86139002100" TO TE-CALLER(4)
MOVE "86138001380" TO TE-CALLEE(4)
MOVE "20250601100000" TO TE-START(4)
MOVE 600 TO TE-DURATION(4)
MOVE "01" TO TE-TYPE(4)
MOVE "N" TO TE-ROAM(4)
MOVE "CDR0000005" TO TE-ID(5)
MOVE "86139002100" TO TE-CALLER(5)
MOVE "86138001380" TO TE-CALLEE(5)
MOVE "20250601110000" TO TE-START(5)
MOVE 1 TO TE-DURATION(5)
MOVE "02" TO TE-TYPE(5)
MOVE "N" TO TE-ROAM(5)
MOVE "CDR0000006" TO TE-ID(6)
MOVE "86137005500" TO TE-CALLER(6)
MOVE "86139002100" TO TE-CALLEE(6)
MOVE "20250601120000" TO TE-START(6)
MOVE 1200 TO TE-DURATION(6)
MOVE "01" TO TE-TYPE(6)
MOVE "Y" TO TE-ROAM(6)
MOVE "CDR0000007" TO TE-ID(7)
MOVE "86138001380" TO TE-CALLER(7)
MOVE "86136006660" TO TE-CALLEE(7)
MOVE "20250601130000" TO TE-START(7)
MOVE 900 TO TE-DURATION(7)
MOVE "03" TO TE-TYPE(7)
MOVE "N" TO TE-ROAM(7)
MOVE "CDR0000008" TO TE-ID(8)
MOVE "86137005500" TO TE-CALLER(8)
MOVE "86135005550" TO TE-CALLEE(8)
MOVE "20250601140000" TO TE-START(8)
MOVE 1800 TO TE-DURATION(8)
MOVE "01" TO TE-TYPE(8)
MOVE "N" TO TE-ROAM(8)
DISPLAY "CDR-DATA: " CDR-TEST-COUNT " records loaded".
EXIT.
0400-PROCESS-CDR SECTION.
MOVE TE-ID(WRK-IDX) TO CDR-ID OF CDR-REC.
MOVE TE-CALLER(WRK-IDX) TO CDR-CALLER.
MOVE TE-CALLEE(WRK-IDX) TO CDR-CALLEE.
MOVE TE-START(WRK-IDX) TO CDR-START.
MOVE TE-DURATION(WRK-IDX) TO CDR-DURATION.
MOVE TE-TYPE(WRK-IDX) TO CDR-CALL-TYPE.
MOVE TE-ROAM(WRK-IDX) TO CDR-ROAM-FLAG.
ADD 1 TO WRK-REC-COUNT.
ADD 1 TO WRK-TOTAL-COUNT.
MOVE 'N' TO CALC-FOUND.
MOVE "P01" TO CALC-PLAN-CODE.
PERFORM VARYING WRK-JDX FROM 1 BY 1
UNTIL WRK-JDX > WRK-TARIFF-COUNT
IF CDR-ID(1:3) = TP-CODE(WRK-JDX)(1:3)
MOVE "P01" TO CALC-PLAN-CODE
MOVE 'Y' TO CALC-FOUND
MOVE WRK-JDX TO CALC-TP-IDX
EXIT PERFORM
END-IF
END-PERFORM.
IF NOT CALC-FOUND-YES
MOVE 1 TO CALC-TP-IDX
END-IF.
MOVE CDR-CALL-TYPE TO CALC-CALL-TYPE.
MOVE CDR-ROAM-FLAG TO CALC-ROAM-FLAG.
MOVE CDR-DURATION TO CALC-DURATION.
EVALUATE CALC-CALL-TYPE
WHEN "01"
PERFORM 0500-VOICE-CHARGE
WHEN "02"
PERFORM 0510-SMS-CHARGE
WHEN "03"
PERFORM 0520-DATA-CHARGE
WHEN OTHER
MOVE CON-FLAG-ON TO WB-LOOP-FLAG
DISPLAY "ERROR: Invalid call type "
CALC-CALL-TYPE " for " CDR-ID
ADD 1 TO SUM-ERROR-COUNT
END-EVALUATE.
IF WB-LOOP-FLAG NOT = CON-FLAG-ON
PERFORM 0600-WRITE-BILLING
END-IF.
IF WRK-REC-COUNT >= CON-COMMIT-MAX
DISPLAY "COMMIT: " WRK-REC-COUNT " records"
MOVE ZERO TO WRK-REC-COUNT
PERFORM 0700-CHECKPOINT
END-IF.
EXIT.
0500-VOICE-CHARGE SECTION.
COMPUTE CALC-FREE-MIN =
TP-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 * TP-OVER-PRICE(CALC-TP-IDX)
END-IF.
COMPUTE CALC-BASE-CHARGE =
CALC-FREE-MIN * TP-UNIT-PRICE(CALC-TP-IDX).
IF CDR-ROAM-FLAG = 'Y'
COMPUTE CALC-ROAM-CHARGE =
CALC-DURATION * TP-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.
EXIT.
0510-SMS-CHARGE SECTION.
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 TP-SMS-PRICE(CALC-TP-IDX) TO CALC-ROAM-CHARGE.
MOVE CALC-ROAM-CHARGE TO CALC-TOTAL-CHARGE.
EXIT.
0520-DATA-CHARGE SECTION.
MOVE ZERO TO CALC-FREE-MIN.
COMPUTE CALC-OVER-SEC = CALC-DURATION.
COMPUTE CALC-OVER-CHARGE =
CALC-DURATION * TP-DATA-PRICE(CALC-TP-IDX) / 1000.
MOVE ZERO TO CALC-BASE-CHARGE.
MOVE ZERO TO CALC-ROAM-CHARGE.
MOVE CALC-OVER-CHARGE TO CALC-TOTAL-CHARGE.
EXIT.
0600-WRITE-BILLING SECTION.
MOVE CDR-ID TO BLL-CALL-ID OF BLL-REC.
MOVE CDR-CALLER TO BLL-CUST-ID OF BLL-REC.
MOVE CALC-PLAN-CODE TO BLL-PLAN-CODE OF BLL-REC.
MOVE CALC-CALL-TYPE TO BLL-CALL-TYPE OF BLL-REC.
MOVE CALC-DURATION TO BLL-DURATION OF BLL-REC.
MOVE CALC-FREE-MIN TO BLL-FREE-MIN OF BLL-REC.
MOVE CALC-OVER-SEC TO BLL-OVER-USAGE OF BLL-REC.
MOVE TP-UNIT-PRICE(CALC-TP-IDX) TO BLL-UNIT-PRICE.
MOVE CALC-BASE-CHARGE TO BLL-BASE-CHARGE.
MOVE CALC-OVER-CHARGE TO BLL-OVER-CHARGE.
MOVE CALC-ROAM-CHARGE TO BLL-ROAM-CHARGE.
MOVE CALC-TOTAL-CHARGE TO BLL-TOTAL-CHARGE.
MOVE "0" TO BLL-STATUS.
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 WRK-PROC-COUNT.
DISPLAY "BILL: " BLL-CALL-ID OF BLL-REC
" PLAN:" BLL-PLAN-CODE OF BLL-REC
" TYPE:" BLL-CALL-TYPE OF BLL-REC
" DUR:" BLL-DURATION OF BLL-REC
" FREE:" BLL-FREE-MIN OF BLL-REC
" OVER:" BLL-OVER-USAGE OF BLL-REC
" BASE:" BLL-BASE-CHARGE OF BLL-REC
" OVER-C:" BLL-OVER-CHARGE OF BLL-REC
" ROAM:" BLL-ROAM-CHARGE OF BLL-REC
" TOTAL:" BLL-TOTAL-CHARGE OF BLL-REC.
EXIT.
0700-CHECKPOINT SECTION.
DISPLAY "CHKPT: TOTAL=" WRK-TOTAL-COUNT
" PROC=" WRK-PROC-COUNT
" BATCH=" WRK-LOOP-COUNT
DISPLAY "CHKPT-POINT checkpoint registered".
EXIT.
0800-SUMMARY SECTION.
DISPLAY " "
DISPLAY "=== BILLING SUMMARY ==="
DISPLAY "TOTAL CDRs: " WRK-TOTAL-COUNT
DISPLAY "BILLED CDRs: " SUM-COUNT
DISPLAY "ERROR CDRs: " SUM-ERROR-COUNT
DISPLAY " "
DISPLAY "BASE CHARGE: " SUM-BASE
DISPLAY "OVER CHARGE: " SUM-OVER
DISPLAY "ROAM CHARGE: " SUM-ROAM
DISPLAY "TOTAL CHARGE: " SUM-CHARGE
DISPLAY " "
DISPLAY "=== NORMAL END ===".
EXIT.
END PROGRAM TA-TELAMTCAL.