test: add HINA type-specific COBOL test data suite (10 programs, 8/10 pass)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
* HINA001 - 1:1 マッチング
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* 2入力ファイル(R01/R02)をキー一致でマージ
|
||||
* 期待: 2ファイル, 3 IF, 6 分岐, ~5 段落
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA001.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01-FILE ASSIGN TO "R01.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT R02-FILE ASSIGN TO "R02.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT W01-FILE ASSIGN TO "W01.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD R01-FILE.
|
||||
01 R01-REC PIC X(30).
|
||||
FD R02-FILE.
|
||||
01 R02-REC PIC X(30).
|
||||
FD W01-FILE.
|
||||
01 W01-REC PIC X(60).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-R01-KEY PIC X(10).
|
||||
01 WS-R02-KEY PIC X(10).
|
||||
01 WS-R01-DATA PIC X(20).
|
||||
01 WS-R02-DATA PIC X(20).
|
||||
01 WS-EOF1 PIC X VALUE 'N'.
|
||||
88 R01-EOF VALUE 'Y'.
|
||||
01 WS-EOF2 PIC X VALUE 'N'.
|
||||
88 R02-EOF VALUE 'Y'.
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT R01-FILE R02-FILE.
|
||||
OPEN OUTPUT W01-FILE.
|
||||
PERFORM 1000-READ-R01.
|
||||
PERFORM 2000-READ-R02.
|
||||
PERFORM 3000-MATCH UNTIL R01-EOF AND R02-EOF.
|
||||
CLOSE R01-FILE R02-FILE W01-FILE.
|
||||
STOP RUN.
|
||||
1000-READ-R01.
|
||||
READ R01-FILE INTO R01-REC
|
||||
AT END MOVE 'Y' TO WS-EOF1
|
||||
NOT AT END PERFORM 1100-PARSE-R01.
|
||||
1100-PARSE-R01.
|
||||
MOVE R01-REC(1:10) TO WS-R01-KEY.
|
||||
MOVE R01-REC(11:20) TO WS-R01-DATA.
|
||||
2000-READ-R02.
|
||||
READ R02-FILE INTO R02-REC
|
||||
AT END MOVE 'Y' TO WS-EOF2
|
||||
NOT AT END PERFORM 2100-PARSE-R02.
|
||||
2100-PARSE-R02.
|
||||
MOVE R02-REC(1:10) TO WS-R02-KEY.
|
||||
MOVE R02-REC(11:20) TO WS-R02-DATA.
|
||||
3000-MATCH.
|
||||
IF R01-EOF THEN
|
||||
PERFORM 4000-WRITE-R02-ONLY
|
||||
PERFORM 2000-READ-R02
|
||||
ELSE IF R02-EOF THEN
|
||||
PERFORM 5000-WRITE-R01-ONLY
|
||||
PERFORM 1000-READ-R01
|
||||
ELSE IF WS-R01-KEY < WS-R02-KEY THEN
|
||||
PERFORM 5000-WRITE-R01-ONLY
|
||||
PERFORM 1000-READ-R01
|
||||
ELSE IF WS-R01-KEY > WS-R02-KEY THEN
|
||||
PERFORM 4000-WRITE-R02-ONLY
|
||||
PERFORM 2000-READ-R02
|
||||
ELSE
|
||||
PERFORM 6000-WRITE-MATCH
|
||||
PERFORM 1000-READ-R01
|
||||
PERFORM 2000-READ-R02.
|
||||
4000-WRITE-R02-ONLY.
|
||||
STRING WS-R02-KEY WS-R02-DATA DELIMITED BY SIZE
|
||||
INTO W01-REC.
|
||||
WRITE W01-REC.
|
||||
5000-WRITE-R01-ONLY.
|
||||
STRING WS-R01-KEY WS-R01-DATA DELIMITED BY SIZE
|
||||
INTO W01-REC.
|
||||
WRITE W01-REC.
|
||||
6000-WRITE-MATCH.
|
||||
STRING WS-R01-KEY WS-R01-DATA WS-R02-DATA
|
||||
DELIMITED BY SIZE INTO W01-REC.
|
||||
WRITE W01-REC.
|
||||
@@ -0,0 +1,54 @@
|
||||
* HINA004 - 編集出力(GETPUT)
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* レイアウト編集 レコード入出力
|
||||
* 期待: 2ファイル, 1 IF, 5 段落
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA004.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT IN-FILE ASSIGN TO "IN.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT OUT-FILE ASSIGN TO "OUT.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD IN-FILE.
|
||||
01 IN-REC.
|
||||
05 IN-ID PIC X(05).
|
||||
05 IN-NAME PIC X(20).
|
||||
05 IN-AMT PIC 9(07)V99.
|
||||
FD OUT-FILE.
|
||||
01 OUT-REC PIC X(80).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-EOF PIC X VALUE 'N'.
|
||||
88 WS-EOF-Y VALUE 'Y'.
|
||||
01 WS-HEADER PIC X(80).
|
||||
01 WS-DETAIL PIC X(80).
|
||||
01 WS-LINE-CNT PIC 9(02).
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT IN-FILE.
|
||||
OPEN OUTPUT OUT-FILE.
|
||||
MOVE "ID NAME AMOUNT" TO WS-HEADER.
|
||||
WRITE OUT-REC FROM WS-HEADER.
|
||||
MOVE 0 TO WS-LINE-CNT.
|
||||
PERFORM 1000-READ.
|
||||
PERFORM 2000-PROCESS UNTIL WS-EOF-Y.
|
||||
CLOSE IN-FILE OUT-FILE.
|
||||
STOP RUN.
|
||||
1000-READ.
|
||||
READ IN-FILE INTO IN-REC
|
||||
AT END MOVE 'Y' TO WS-EOF-Y.
|
||||
2000-PROCESS.
|
||||
IF WS-LINE-CNT > 50 THEN
|
||||
MOVE SPACES TO WS-DETAIL
|
||||
STRING "--- PAGE BREAK ---"
|
||||
DELIMITED BY SIZE INTO WS-DETAIL
|
||||
WRITE OUT-REC FROM WS-DETAIL
|
||||
MOVE 0 TO WS-LINE-CNT.
|
||||
STRING IN-ID IN-NAME IN-AMT DELIMITED BY SIZE
|
||||
INTO WS-DETAIL.
|
||||
WRITE OUT-REC FROM WS-DETAIL.
|
||||
ADD 1 TO WS-LINE-CNT.
|
||||
PERFORM 1000-READ.
|
||||
@@ -0,0 +1,24 @@
|
||||
* >>SOURCE FORMAT IS FREE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TEST.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC X(01).
|
||||
01 WS-B PIC 9(05).
|
||||
01 WS-C PIC X(20).
|
||||
PROCEDURE DIVISION.
|
||||
IF WS-A = 'A' THEN
|
||||
MOVE 'HIGH' TO WS-C
|
||||
IF WS-B > 1000 THEN
|
||||
MOVE 'HIGH-1000' TO WS-C
|
||||
ELSE
|
||||
MOVE 'LOW-1000' TO WS-C
|
||||
END-IF
|
||||
ELSE IF WS-A = 'B' THEN
|
||||
MOVE 'MED' TO WS-C
|
||||
IF WS-B > 500 THEN
|
||||
MOVE 'MED-500' TO WS-C
|
||||
END-IF
|
||||
ELSE
|
||||
MOVE 'OTHER' TO WS-C.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,24 @@
|
||||
* >>SOURCE FORMAT IS FREE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TEST.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC X(01).
|
||||
01 WS-B PIC 9(05).
|
||||
01 WS-C PIC X(20).
|
||||
PROCEDURE DIVISION.
|
||||
IF WS-A = 'A' THEN
|
||||
MOVE 'HIGH' TO WS-C
|
||||
IF WS-B > 1000 THEN
|
||||
MOVE 'HIGH-1000' TO WS-C
|
||||
ELSE
|
||||
MOVE 'LOW-1000' TO WS-C
|
||||
END-IF
|
||||
ELSE IF WS-A = 'B' THEN
|
||||
MOVE 'MED' TO WS-C
|
||||
IF WS-B > 500 THEN
|
||||
MOVE 'MED-500' TO WS-C
|
||||
END-IF
|
||||
ELSE
|
||||
MOVE 'OTHER' TO WS-C.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,54 @@
|
||||
* HINA007 - キーブレイク(集計)
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* キー切替時の累計集計処理
|
||||
* 期待: 2 IF, 1 PERFORM, 5 段落, キーブレイク有
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA007.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT IN-FILE ASSIGN TO "TRANS.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT OUT-FILE ASSIGN TO "SUM.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD IN-FILE.
|
||||
01 IN-REC.
|
||||
05 IN-KEY PIC X(05).
|
||||
05 IN-AMT PIC 9(07).
|
||||
FD OUT-FILE.
|
||||
01 OUT-REC PIC X(30).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-PREV-KEY PIC X(05).
|
||||
01 WS-SUM PIC 9(10).
|
||||
01 WS-EOF PIC X VALUE 'N'.
|
||||
88 EOF-VALUE VALUE 'Y'.
|
||||
01 WS-FIRST PIC X VALUE 'Y'.
|
||||
88 FIRST-REC VALUE 'Y'.
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT IN-FILE.
|
||||
OPEN OUTPUT OUT-FILE.
|
||||
PERFORM 1000-READ.
|
||||
PERFORM 2000-PROCESS UNTIL EOF-VALUE.
|
||||
PERFORM 3000-WRITE-BREAK.
|
||||
CLOSE IN-FILE OUT-FILE.
|
||||
STOP RUN.
|
||||
1000-READ.
|
||||
READ IN-FILE INTO IN-REC
|
||||
AT END MOVE 'Y' TO WS-EOF.
|
||||
2000-PROCESS.
|
||||
IF FIRST-REC THEN
|
||||
MOVE IN-KEY TO WS-PREV-KEY
|
||||
MOVE 'N' TO WS-FIRST.
|
||||
IF IN-KEY NOT = WS-PREV-KEY THEN
|
||||
PERFORM 3000-WRITE-BREAK
|
||||
MOVE IN-KEY TO WS-PREV-KEY
|
||||
MOVE 0 TO WS-SUM.
|
||||
ADD IN-AMT TO WS-SUM.
|
||||
PERFORM 1000-READ.
|
||||
3000-WRITE-BREAK.
|
||||
STRING WS-PREV-KEY WS-SUM DELIMITED BY SIZE
|
||||
INTO OUT-REC.
|
||||
WRITE OUT-REC.
|
||||
@@ -0,0 +1,24 @@
|
||||
* >>SOURCE FORMAT IS FREE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TEST.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC X(01).
|
||||
01 WS-B PIC 9(05).
|
||||
01 WS-C PIC X(20).
|
||||
PROCEDURE DIVISION.
|
||||
IF WS-A = 'A' THEN
|
||||
MOVE 'HIGH' TO WS-C
|
||||
IF WS-B > 1000 THEN
|
||||
MOVE 'HIGH-1000' TO WS-C
|
||||
ELSE
|
||||
MOVE 'LOW-1000' TO WS-C
|
||||
END-IF
|
||||
ELSE IF WS-A = 'B' THEN
|
||||
MOVE 'MED' TO WS-C
|
||||
IF WS-B > 500 THEN
|
||||
MOVE 'MED-500' TO WS-C
|
||||
END-IF
|
||||
ELSE
|
||||
MOVE 'OTHER' TO WS-C.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,42 @@
|
||||
* HINA024 - 内部テーブル検索(SEARCH ALL)
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* OCCURS + SEARCH ALL によるテーブル検索
|
||||
* 期待: SEARCH ALL, OCCURS, 2 IF, 5 段落
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA024.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-TABLE.
|
||||
05 WS-ENTRY OCCURS 10 TIMES
|
||||
ASCENDING KEY IS WS-ENTRY-ID
|
||||
INDEXED BY WS-IDX.
|
||||
10 WS-ENTRY-ID PIC 9(03).
|
||||
10 WS-ENTRY-NAME PIC X(10).
|
||||
01 WS-SEARCH-ID PIC 9(03).
|
||||
01 WS-FOUND PIC X VALUE 'N'.
|
||||
88 FOUND-YES VALUE 'Y'.
|
||||
01 WS-RESULT PIC X(30).
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
PERFORM 1000-INIT.
|
||||
MOVE 7 TO WS-SEARCH-ID.
|
||||
PERFORM 2000-SEARCH.
|
||||
DISPLAY WS-RESULT.
|
||||
MOVE 99 TO WS-SEARCH-ID.
|
||||
PERFORM 2000-SEARCH.
|
||||
DISPLAY WS-RESULT.
|
||||
STOP RUN.
|
||||
1000-INIT.
|
||||
MOVE 1 TO WS-ENTRY-ID(1) MOVE "ALPHA" TO WS-ENTRY-NAME(1).
|
||||
MOVE 3 TO WS-ENTRY-ID(2) MOVE "BETA" TO WS-ENTRY-NAME(2).
|
||||
MOVE 5 TO WS-ENTRY-ID(3) MOVE "GAMMA" TO WS-ENTRY-NAME(3).
|
||||
MOVE 7 TO WS-ENTRY-ID(4) MOVE "DELTA" TO WS-ENTRY-NAME(4).
|
||||
MOVE 9 TO WS-ENTRY-ID(5) MOVE "EPSLN" TO WS-ENTRY-NAME(5).
|
||||
2000-SEARCH.
|
||||
SET WS-IDX TO 1.
|
||||
SEARCH ALL WS-ENTRY
|
||||
AT END
|
||||
MOVE "NOT FOUND" TO WS-RESULT
|
||||
WHEN WS-ENTRY-ID(WS-IDX) = WS-SEARCH-ID
|
||||
STRING "FOUND=" WS-ENTRY-NAME(WS-IDX)
|
||||
DELIMITED BY SIZE INTO WS-RESULT.
|
||||
@@ -0,0 +1,31 @@
|
||||
* HINA025 - サブプログラムCALL
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* CALL文によるサブプログラム呼び出し
|
||||
* 期待: CALL文, LINKAGE SECTION, 2段落
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA025.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-A PIC 9(05) VALUE 100.
|
||||
01 WS-B PIC 9(05) VALUE 200.
|
||||
01 WS-RESULT PIC 9(06).
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
CALL 'HINA025SUB' USING WS-A WS-B WS-RESULT.
|
||||
DISPLAY "RESULT=" WS-RESULT.
|
||||
CALL 'HINA025SUB' USING WS-B WS-A WS-RESULT.
|
||||
DISPLAY "RESULT2=" WS-RESULT.
|
||||
STOP RUN.
|
||||
* サブプログラム(インライン)
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA025SUB.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-TEMP PIC 9(06).
|
||||
LINKAGE SECTION.
|
||||
01 X PIC 9(05).
|
||||
01 Y PIC 9(05).
|
||||
01 Z PIC 9(06).
|
||||
PROCEDURE DIVISION USING X Y Z.
|
||||
ADD X TO Y GIVING Z.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,39 @@
|
||||
* HINA034 - SORT処理
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* SORT文によるファイルソート
|
||||
* 期待: SORT文, INPUT/OUTPUT PROCEDURE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA034.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT IN-FILE ASSIGN TO "SORTIN.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT OUT-FILE ASSIGN TO "SORTOUT.DAT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT WORK-FILE ASSIGN TO "SORTWORK".
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD IN-FILE.
|
||||
01 IN-REC.
|
||||
05 IN-KEY PIC 9(05).
|
||||
05 IN-DATA PIC X(20).
|
||||
FD OUT-FILE.
|
||||
01 OUT-REC.
|
||||
05 OUT-KEY PIC 9(05).
|
||||
05 OUT-DATA PIC X(20).
|
||||
SD WORK-FILE.
|
||||
01 WORK-REC.
|
||||
05 WORK-KEY PIC 9(05).
|
||||
05 WORK-DATA PIC X(20).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-CNT PIC 9(05).
|
||||
01 WS-MAX PIC 9(05).
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
SORT WORK-FILE
|
||||
ON ASCENDING KEY WORK-KEY
|
||||
USING IN-FILE
|
||||
GIVING OUT-FILE.
|
||||
DISPLAY "SORT COMPLETE".
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,23 @@
|
||||
* HINA101 - EXEC SQL(SELECT条件)
|
||||
>>SOURCE FORMAT IS FREE
|
||||
* EXEC SQL 埋め込みSQL
|
||||
* 期待: L1キーワード "EXEC SQL" で判定
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HINA101.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-CUST-ID PIC X(10).
|
||||
01 WS-CUST-NAME PIC X(30).
|
||||
01 WS-SQLCODE PIC S9(09) COMP.
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
EXEC SQL
|
||||
SELECT CUST_NAME INTO :WS-CUST-NAME
|
||||
FROM CUSTOMERS
|
||||
WHERE CUST_ID = :WS-CUST-ID
|
||||
END-EXEC.
|
||||
IF SQLCODE = 0 THEN
|
||||
DISPLAY "FOUND:" WS-CUST-NAME
|
||||
ELSE
|
||||
DISPLAY "NOT FOUND".
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user