Files
NB-076 94400d50d4 feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 09:53:21 +08:00

246 lines
7.7 KiB
COBOL

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.