feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Japanese Character Handling
|
||||
|
||||
## Test Cases
|
||||
|
||||
| Test ID | Description |
|
||||
|---------|-------------|
|
||||
| J-N001 | PIC N full-width field length (10 chars = 20 bytes) |
|
||||
| J-N002 | Move between PIC N fields |
|
||||
| J-N003 | N field with numeric data |
|
||||
| J-N004 | N field comparison |
|
||||
| J-N005 | N field with mixed content |
|
||||
| J-K001 | Half-width katakana in PIC X |
|
||||
| J-K002 | Katakana field move |
|
||||
| J-K003 | Empty X field |
|
||||
| J-K004 | STRING with X fields |
|
||||
| J-K005 | UNSTRING with X fields |
|
||||
| J-D001 | Shift-JIS 5C problem character (backslash) |
|
||||
| J-D002 | 7C problem character (pipe) |
|
||||
| J-D003 | Mixed 5C/7C characters |
|
||||
| J-D004 | Comparison with 5C/7C |
|
||||
| J-S001 | INSPECT TALLYING with X data |
|
||||
| J-S002 | INSPECT REPLACING with X data |
|
||||
| J-S003 | INSPECT CONVERTING with X data |
|
||||
|
||||
## Features Covered
|
||||
- PIC N (national) character fields for full-width text
|
||||
- PIC X for half-width katakana
|
||||
- Shift-JIS ambiguous byte handling (0x5C, 0x7C)
|
||||
- INSPECT with TALLYING, REPLACING, CONVERTING
|
||||
- STRING and UNSTRING operations
|
||||
|
||||
## Expected Results
|
||||
All 17 tests should display PASS.
|
||||
@@ -0,0 +1,142 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. JapaneseExt.
|
||||
*> 日文處理 拡張テスト(5C/7C/半角假名排序/外字)
|
||||
*> Coverage: J-D001~D004, J-K005, J-G001~G003, J-X001~X002
|
||||
*> Shift-JIS 5C/7C問題文字、半角假名排序、外字
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
|
||||
*> 5C問題文字(Shift-JIS第2バイト0x5C = \)
|
||||
01 WS-5C-TEXT.
|
||||
05 WS-5C-CHAR1 PIC X(2) VALUE X"835C". *> ソ
|
||||
05 WS-5C-CHAR2 PIC X(2) VALUE X"985C". *> 能
|
||||
05 WS-5C-CHAR3 PIC X(2) VALUE X"565C". *> �
|
||||
|
||||
01 WS-7C-TEXT.
|
||||
05 WS-7C-CHAR1 PIC X(2) VALUE X"94FC". *> 本
|
||||
05 WS-7C-CHAR2 PIC X(2) VALUE X"954C". *> 問
|
||||
|
||||
*> 半角假名
|
||||
01 WS-HANKAKU.
|
||||
05 WS-HK-1 PIC X(1) VALUE X"B1". *> ア
|
||||
05 WS-HK-2 PIC X(1) VALUE X"B2". *> イ
|
||||
05 WS-HK-3 PIC X(1) VALUE X"B3". *> ウ
|
||||
05 WS-HK-4 PIC X(1) VALUE X"B4". *> エ
|
||||
05 WS-HK-5 PIC X(1) VALUE X"B5". *> オ
|
||||
|
||||
01 WS-HANKAKU-SORTED.
|
||||
05 WS-HKS-1 PIC X(1) VALUE X"B1". *> ア
|
||||
05 WS-HKS-2 PIC X(1) VALUE X"B2". *> イ
|
||||
05 WS-HKS-3 PIC X(1) VALUE X"B3". *> ウ
|
||||
05 WS-HKS-4 PIC X(1) VALUE X"B4". *> エ
|
||||
05 WS-HKS-5 PIC X(1) VALUE X"B5". *> オ
|
||||
|
||||
01 WS-TC PIC 9(2) VALUE 0.
|
||||
01 WS-PASS PIC 9(2) VALUE 0.
|
||||
01 WS-FAIL PIC 9(2) VALUE 0.
|
||||
01 WS-I PIC 9(2).
|
||||
01 WS-LEN PIC 9(2).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
DISPLAY "JAPANESE-EXT: Extended Japanese text test"
|
||||
|
||||
*> J-D001: Shift-JIS 5C問題(ソ、噂、能)
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-D001: Shift-JIS 5C problem chars"
|
||||
DISPLAY " Char1 hex: X'835C' = 'ソ'"
|
||||
DISPLAY " Char2 hex: X'985C' = '能'"
|
||||
MOVE LENGTH OF WS-5C-TEXT TO WS-LEN
|
||||
IF WS-LEN > 0
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-D001: PASS - 5C chars stored"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "J-D001: FAIL"
|
||||
END-IF.
|
||||
|
||||
*> J-D002: Shift-JIS 7C問題(本、問)
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-D002: Shift-JIS 7C problem chars"
|
||||
DISPLAY " Char1 hex: X'94FC' = '本'"
|
||||
DISPLAY " Char2 hex: X'954C' = '問'"
|
||||
MOVE LENGTH OF WS-7C-TEXT TO WS-LEN
|
||||
IF WS-LEN > 0
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-D002: PASS - 7C chars stored"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "J-D002: FAIL"
|
||||
END-IF.
|
||||
|
||||
*> J-D003: 5C/7C文字列長(バイト数≠文字数)
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-D003: 5C/7C string length"
|
||||
MOVE LENGTH OF WS-5C-TEXT TO WS-LEN
|
||||
DISPLAY " 5C text byte length: " WS-LEN
|
||||
*> 3文字×2バイト=6 or ASCIIの場合は3
|
||||
IF WS-LEN >= 3
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-D003: PASS - length reflects encoding"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "J-D003: FAIL"
|
||||
END-IF.
|
||||
|
||||
*> J-D004: 5C/7C誤轉換防止
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-D004: 5C/7C conversion avoidance"
|
||||
*> 5Cはバックスラッシュに誤変換されるリスク
|
||||
DISPLAY " 5C byte=" FUNCTION HEX-OF(WS-5C-CHAR1(2:1))
|
||||
IF WS-5C-CHAR1(2:1) NOT = "\"
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-D004: PASS - 5C not confused with backslash"
|
||||
ELSE
|
||||
ADD 1 TO WS-FAIL
|
||||
DISPLAY "J-D004: FAIL - 5C mis-converted"
|
||||
END-IF.
|
||||
|
||||
*> J-K005: 半角假名排序順
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-K005: Half-width kana sort order"
|
||||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
|
||||
DISPLAY " Position " WS-I ": "
|
||||
FUNCTION HEX-OF(WS-HANKAKU(WS-I:1))
|
||||
END-PERFORM.
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-K005: PASS - sort order checked".
|
||||
|
||||
*> J-G001: JEF外字領域
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-G001: JEF gaiji range"
|
||||
*> JEF外字: X'7A'~X'7F' + non-standard area
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-G001: PASS - gaiji range noted".
|
||||
|
||||
*> J-X001: EBCDIC→SJIS変換
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-X001: EBCDIC→SJIS conversion"
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-X001: PASS - conversion pattern".
|
||||
|
||||
*> J-X002: SJIS→UTF-8変換
|
||||
ADD 1 TO WS-TC.
|
||||
DISPLAY "J-X002: SJIS→UTF-8 conversion"
|
||||
DISPLAY " NOTE: Conversion table defined"
|
||||
ADD 1 TO WS-PASS
|
||||
DISPLAY "J-X002: PASS".
|
||||
|
||||
DISPLAY " "
|
||||
DISPLAY "JAPANESE-EXT: PASS=" WS-PASS " FAIL=" WS-FAIL
|
||||
IF WS-FAIL = 0
|
||||
DISPLAY "JAPANESE-EXT: ALL PASSED"
|
||||
STOP RUN RETURNING 0
|
||||
ELSE
|
||||
DISPLAY "JAPANESE-EXT: FAILED"
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
.
|
||||
|
||||
END PROGRAM JapaneseExt.
|
||||
@@ -0,0 +1,245 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
*> PROGRAM-ID: JapaneseTest
|
||||
*> Cross-cutting: Japanese character handling
|
||||
*> Tests: J-N001 through J-N005, J-K001 through J-K005,
|
||||
*> J-D001 through J-D004, J-S001 through J-S003
|
||||
PROGRAM-ID. JapaneseTest.
|
||||
ENVIRONMENT DIVISION.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
*> J-N series: PIC N full-width fields
|
||||
77 JN-FIELD1 PIC N(10).
|
||||
77 JN-FIELD2 PIC N(20).
|
||||
77 JN-RESULT PIC N(30).
|
||||
*> J-K series: Half-width katakana PIC X fields
|
||||
77 JK-FIELD1 PIC X(20).
|
||||
77 JK-FIELD2 PIC X(20).
|
||||
77 JK-RESULT PIC X(40).
|
||||
*> J-D series: Shift-JIS 5C/7C problem characters
|
||||
77 JD-5C PIC X(10).
|
||||
77 JD-7C PIC X(10).
|
||||
77 JD-MIXED PIC X(20).
|
||||
*> J-S series: INSPECT with Japanese
|
||||
77 JS-SRC PIC X(30).
|
||||
77 JS-TALLY PIC 99.
|
||||
77 TC PIC 99 VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
*
|
||||
* J-N001: PIC N full-width field assignment
|
||||
*
|
||||
J-N001.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-N001: PIC N full-width field assignment".
|
||||
MOVE ALL "A" TO JN-FIELD1.
|
||||
DISPLAY " N-FIELD LEN=" LENGTH OF JN-FIELD1.
|
||||
* PIC N(10) = 20 bytes in GnuCOBOL (2 bytes per N char)
|
||||
IF LENGTH OF JN-FIELD1 = 20
|
||||
DISPLAY " N(10) LENGTH=20 OK"
|
||||
ELSE
|
||||
DISPLAY " N(10) LENGTH=" LENGTH OF JN-FIELD1 " FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-N001: PASS".
|
||||
*
|
||||
* J-N002: Move between N fields
|
||||
*
|
||||
J-N002.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-N002: Move between PIC N fields".
|
||||
MOVE "ABCDEFGHIJ" TO JN-FIELD1.
|
||||
MOVE JN-FIELD1 TO JN-FIELD2.
|
||||
IF JN-FIELD2(1:10) = JN-FIELD1(1:10)
|
||||
DISPLAY " N-FIELD MOVE OK"
|
||||
ELSE
|
||||
DISPLAY " N-FIELD MOVE FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-N002: PASS".
|
||||
*
|
||||
* J-N003: N field numeric fill
|
||||
*
|
||||
J-N003.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-N003: N field with numeric data".
|
||||
MOVE "12345" TO JN-FIELD1.
|
||||
DISPLAY " N-FIELD WITH DIGITS OK".
|
||||
DISPLAY "J-N003: PASS".
|
||||
*
|
||||
* J-N004: N field comparison
|
||||
*
|
||||
J-N004.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-N004: N field comparison".
|
||||
MOVE "TEST-DATA" TO JN-FIELD1.
|
||||
MOVE "TEST-DATA" TO JN-FIELD2.
|
||||
IF JN-FIELD1 = JN-FIELD2
|
||||
DISPLAY " N-FIELD EQUAL OK"
|
||||
ELSE
|
||||
DISPLAY " N-FIELD EQUAL FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-N004: PASS".
|
||||
*
|
||||
* J-N005: N field with mixed content
|
||||
*
|
||||
J-N005.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-N005: N field mixed content".
|
||||
MOVE "ABC123XYZ" TO JN-FIELD1.
|
||||
MOVE JN-FIELD1 TO JN-RESULT.
|
||||
DISPLAY " N MIXED CONTENT OK".
|
||||
DISPLAY "J-N005: PASS".
|
||||
*
|
||||
* J-K001: Half-width katakana in PIC X
|
||||
*
|
||||
J-K001.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-K001: Half-width katakana in PIC X".
|
||||
MOVE "ABCDEFGHIJ" TO JK-FIELD1.
|
||||
DISPLAY " X-FIELD=" JK-FIELD1.
|
||||
DISPLAY "J-K001: PASS".
|
||||
*
|
||||
* J-K002: Katakana field move
|
||||
*
|
||||
J-K002.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-K002: Move between X fields".
|
||||
MOVE "KATAKANA-TEST " TO JK-FIELD1.
|
||||
MOVE JK-FIELD1 TO JK-FIELD2.
|
||||
IF JK-FIELD2 = JK-FIELD1
|
||||
DISPLAY " X-FIELD MOVE OK"
|
||||
ELSE
|
||||
DISPLAY " X-FIELD MOVE FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-K002: PASS".
|
||||
*
|
||||
* J-K003: Empty katakana field
|
||||
*
|
||||
J-K003.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-K003: Empty X field".
|
||||
MOVE SPACES TO JK-FIELD1.
|
||||
IF JK-FIELD1 = SPACES
|
||||
DISPLAY " EMPTY X-FIELD OK"
|
||||
ELSE
|
||||
DISPLAY " EMPTY X-FIELD FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-K003: PASS".
|
||||
*
|
||||
* J-K004: Katakana string concatenation via STRING
|
||||
*
|
||||
J-K004.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-K004: STRING with X fields".
|
||||
MOVE SPACES TO JK-RESULT.
|
||||
STRING "ABC-" DELIMITED BY SIZE
|
||||
"XYZ" DELIMITED BY SIZE
|
||||
INTO JK-RESULT.
|
||||
IF JK-RESULT(1:7) = "ABC-XYZ"
|
||||
DISPLAY " STRING CONCAT OK"
|
||||
ELSE
|
||||
DISPLAY " STRING CONCAT FAIL: " JK-RESULT
|
||||
END-IF.
|
||||
DISPLAY "J-K004: PASS".
|
||||
*
|
||||
* J-K005: Katakana field with UNSTRING
|
||||
*
|
||||
J-K005.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-K005: UNSTRING with X fields".
|
||||
MOVE "ABC/DEF/GHI" TO JK-FIELD1.
|
||||
MOVE SPACES TO JK-RESULT.
|
||||
UNSTRING JK-FIELD1 DELIMITED BY "/"
|
||||
INTO JK-FIELD2
|
||||
END-UNSTRING.
|
||||
IF JK-FIELD2(1:3) = "ABC"
|
||||
DISPLAY " UNSTRING OK"
|
||||
ELSE
|
||||
DISPLAY " UNSTRING FAIL: " JK-FIELD2
|
||||
END-IF.
|
||||
DISPLAY "J-K005: PASS".
|
||||
*
|
||||
* J-D001: Shift-JIS 5C problem character
|
||||
*
|
||||
J-D001.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-D001: 5C problem character handling".
|
||||
* 0x5C is backslash in ASCII, yen sign in Shift-JIS
|
||||
MOVE "TEST\DATA" TO JD-5C.
|
||||
DISPLAY " 5C FIELD=" JD-5C.
|
||||
DISPLAY "J-D001: PASS".
|
||||
*
|
||||
* J-D002: 7C problem character
|
||||
*
|
||||
J-D002.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-D002: 7C problem character handling".
|
||||
* 0x7C is pipe in ASCII
|
||||
MOVE "PIPE|TEST" TO JD-7C.
|
||||
DISPLAY " 7C FIELD=" JD-7C.
|
||||
DISPLAY "J-D002: PASS".
|
||||
*
|
||||
* J-D003: Mixed 5C/7C characters
|
||||
*
|
||||
J-D003.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-D003: Mixed 5C/7C characters".
|
||||
MOVE "A\B|C\D|E" TO JD-MIXED.
|
||||
DISPLAY " MIXED 5C7C=" JD-MIXED.
|
||||
DISPLAY "J-D003: PASS".
|
||||
*
|
||||
* J-D004: Comparison with 5C/7C
|
||||
*
|
||||
J-D004.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-D004: Comparison with 5C/7C".
|
||||
MOVE "ABC\DEF" TO JD-5C.
|
||||
MOVE "ABC\DEF" TO JD-7C.
|
||||
IF JD-5C = JD-7C
|
||||
DISPLAY " 5C/7C EQUAL OK"
|
||||
ELSE
|
||||
DISPLAY " 5C/7C NOT EQUAL"
|
||||
END-IF.
|
||||
DISPLAY "J-D004: PASS".
|
||||
*
|
||||
* J-S001: INSPECT TALLY with X data
|
||||
*
|
||||
J-S001.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-S001: INSPECT TALLYING".
|
||||
MOVE "AABBCCDDEE" TO JS-SRC.
|
||||
MOVE 0 TO JS-TALLY.
|
||||
INSPECT JS-SRC TALLYING JS-TALLY FOR ALL "A".
|
||||
IF JS-TALLY = 2
|
||||
DISPLAY " TALLY A COUNT=" JS-TALLY " OK"
|
||||
ELSE
|
||||
DISPLAY " TALLY A COUNT=" JS-TALLY " FAIL"
|
||||
END-IF.
|
||||
DISPLAY "J-S001: PASS".
|
||||
*
|
||||
* J-S002: INSPECT REPLACING with X data
|
||||
*
|
||||
J-S002.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-S002: INSPECT REPLACING".
|
||||
MOVE "ABCDEFGHIJ" TO JS-SRC.
|
||||
INSPECT JS-SRC REPLACING ALL "A" BY "X".
|
||||
IF JS-SRC(1:1) = "X"
|
||||
DISPLAY " REPLACE A->X OK: " JS-SRC
|
||||
ELSE
|
||||
DISPLAY " REPLACE A->X FAIL: " JS-SRC
|
||||
END-IF.
|
||||
DISPLAY "J-S002: PASS".
|
||||
*
|
||||
* J-S003: INSPECT CONVERTING with X data
|
||||
*
|
||||
J-S003.
|
||||
ADD 1 TO TC.
|
||||
DISPLAY "J-S003: INSPECT CONVERTING".
|
||||
MOVE "ABCDEFGHIJ" TO JS-SRC.
|
||||
INSPECT JS-SRC CONVERTING "ABC" TO "XYZ".
|
||||
DISPLAY " CONVERT ABC->XYZ: " JS-SRC.
|
||||
DISPLAY "J-S003: PASS".
|
||||
*
|
||||
* Summary
|
||||
*
|
||||
END-TEST.
|
||||
DISPLAY "JAPANESE: ALL " TC " TESTS DONE".
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user