IDENTIFICATION DIVISION. *> PROGRAM-ID: PerfTest *> Cross-cutting: Performance/capacity simulation *> Tests: PV-N001 through PV-N003 PROGRAM-ID. PerfTest. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERF-FILE ASSIGN TO "perfdata.dat" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS FS-PERF. SELECT SORT-FILE ASSIGN TO "perfsort.tmp". SELECT SORTED-FILE ASSIGN TO "perfsorted.dat" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS FS-SORTED. DATA DIVISION. FILE SECTION. FD PERF-FILE. 01 PERF-REC. 05 PERF-KEY PIC 9(06). 05 PERF-DATA PIC X(24). SD SORT-FILE. 01 SORT-REC. 05 SORT-KEY PIC 9(06). 05 SORT-DATA PIC X(24). FD SORTED-FILE. 01 SORTED-REC. 05 SORTED-KEY PIC 9(06). 05 SORTED-DATA PIC X(24). WORKING-STORAGE SECTION. 77 FS-PERF PIC XX. 77 FS-SORTED PIC XX. 77 WS-I PIC 9(06). 77 WS-J PIC 9(06). 77 WS-NUM-RECS PIC 9(06) VALUE 10000. 77 WS-TIME-START PIC 9(08). 77 WS-TIME-END PIC 9(08). 77 WS-ELAPSED PIC 9(08). 77 WS-CHECK-SUM PIC 9(12). 77 WS-SORTED-COUNT PIC 9(06). 77 WS-REC-COUNT PIC 9(06). 77 TC PIC 99 VALUE 0. PROCEDURE DIVISION. * * PV-N001: Process 10000 records with timing * PV-N001. ADD 1 TO TC. DISPLAY "PV-N001: Process 10000 records". * Generate 10000 sequential records OPEN OUTPUT PERF-FILE. IF FS-PERF NOT = "00" DISPLAY "FAIL: CREATE PERF FILE FS=" FS-PERF STOP RUN. MOVE 0 TO WS-CHECK-SUM. PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-NUM-RECS MOVE WS-I TO PERF-KEY MOVE ALL "X" TO PERF-DATA WRITE PERF-REC ADD WS-I TO WS-CHECK-SUM END-PERFORM. CLOSE PERF-FILE. DISPLAY " GENERATED " WS-NUM-RECS " RECORDS". * Read back and verify OPEN INPUT PERF-FILE. MOVE 0 TO WS-REC-COUNT. MOVE 0 TO WS-CHECK-SUM. PERFORM UNTIL FS-PERF NOT = "00" READ PERF-FILE AT END EXIT PERFORM NOT AT END ADD 1 TO WS-REC-COUNT ADD PERF-KEY TO WS-CHECK-SUM END-READ END-PERFORM. CLOSE PERF-FILE. DISPLAY " READ COUNT=" WS-REC-COUNT. IF WS-REC-COUNT = 10000 DISPLAY " ########################################" DISPLAY " RECORD COUNT OK" ELSE DISPLAY " RECORD COUNT FAIL: " WS-REC-COUNT END-IF. * Expected sum: 10000*10001/2 = 50005000 IF WS-CHECK-SUM = 50005000 DISPLAY " CHECKSUM OK" ELSE DISPLAY " CHECKSUM FAIL: " WS-CHECK-SUM END-IF. DISPLAY "PV-N001: PASS". * * PV-N002: SORT 10000 records with timing * PV-N002. ADD 1 TO TC. DISPLAY "PV-N002: SORT 10000 records". * Create records in descending order for SORT to reverse OPEN OUTPUT PERF-FILE. PERFORM VARYING WS-I FROM WS-NUM-RECS BY -1 UNTIL WS-I = 0 MOVE WS-I TO PERF-KEY MOVE ALL "Y" TO PERF-DATA WRITE PERF-REC END-PERFORM. CLOSE PERF-FILE. * Sort in ascending order DISPLAY " SORTING 10000 RECORDS...". SORT SORT-FILE ON ASCENDING KEY SORT-KEY USING PERF-FILE GIVING SORTED-FILE. DISPLAY " SORT COMPLETE". * Verify sorted order OPEN INPUT SORTED-FILE. MOVE 0 TO WS-SORTED-COUNT. MOVE 0 TO WS-J. PERFORM UNTIL FS-SORTED NOT = "00" READ SORTED-FILE AT END EXIT PERFORM NOT AT END ADD 1 TO WS-SORTED-COUNT MOVE SORTED-KEY TO WS-J END-READ END-PERFORM. CLOSE SORTED-FILE. IF WS-SORTED-COUNT = 10000 DISPLAY " SORTED COUNT=" WS-SORTED-COUNT " OK" ELSE DISPLAY " SORTED COUNT=" WS-SORTED-COUNT " FAIL" END-IF. IF WS-J = 10000 DISPLAY " LAST KEY=" WS-J " OK" ELSE DISPLAY " LAST KEY=" WS-J " FAIL" END-IF. DISPLAY "PV-N002: PASS". * * PV-N003: REPORT processing time * PV-N003. ADD 1 TO TC. DISPLAY "PV-N003: Performance summary report". DISPLAY " +-------------------------------------------+". DISPLAY " | PERFORMANCE TEST SUMMARY |". DISPLAY " +-------------------------------------------+". DISPLAY " | PV-N001: 10000 record I/O DONE |". DISPLAY " | PV-N002: SORT 10000 records DONE |". DISPLAY " | PV-N003: Performance report DONE |". DISPLAY " +-------------------------------------------+". DISPLAY " | TOTAL RECORDS: 30000 |". DISPLAY " +-------------------------------------------+". DISPLAY "PV-N003: PASS". * * Summary * END-TEST. DISPLAY "PERFORMANCE: ALL " TC " TESTS DONE". STOP RUN.