diff --git a/gcc/cobol/UAT/failsuite.src/run_functions.at b/gcc/cobol/UAT/failsuite.src/run_functions.at
index 6cd43f4ae8b692cae9e4eccc369654786022cca2..60f90e2c1a4b256e3d4da19067dab9014221496c 100644
--- a/gcc/cobol/UAT/failsuite.src/run_functions.at
+++ b/gcc/cobol/UAT/failsuite.src/run_functions.at
@@ -21,275 +21,6 @@
 ### ISO+IEC+1989-2002 15 Intrinsic Functions
 ### ISO+IEC+1989-2002 9.4 User-Defined Functions
 
-AT_SETUP([FUNCTION ABS])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   S9(4)V9(4) VALUE -1.2345.
-       PROCEDURE        DIVISION.
-           COMPUTE X = FUNCTION ABS( X )
-           DISPLAY X
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[+0001.2345
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ACOS])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ACOS ( -0.2345 ) TO Z.
-           IF Z NOT = 1.807500521108243435101500438523210
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ANNUITY])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ANNUITY ( 3, 5 ) TO Z.
-           IF Z NOT = 3.002932551319648093841642228739002
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ASIN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ASIN ( -0.2345 ) TO Y.
-           IF Y NOT = -0.236704194313346815870178746883458
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ATAN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ATAN ( 1 ) TO Y.
-           IF Y NOT = 0.785398163397448309615660845819875
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION BYTE-LENGTH])
-AT_KEYWORDS([functions length])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC      X(4).
-       01  TEST-FLD     PIC S9(04)V9(08).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION BYTE-LENGTH ( TEST-FLD )   TO TEST-FLD.
-           DISPLAY "BYTE-LENGTH of PIC S9(04)V9(08) is " TEST-FLD
-           MOVE FUNCTION BYTE-LENGTH ( X )          TO TEST-FLD.
-           DISPLAY "BYTE-LENGTH of PIC X(4) is "       TEST-FLD
-           MOVE FUNCTION BYTE-LENGTH ( '00128' )    TO TEST-FLD
-           DISPLAY "BYTE-LENGTH of PIC '00128' is "    TEST-FLD
-           MOVE FUNCTION BYTE-LENGTH ( x'a0' )      TO TEST-FLD
-           DISPLAY "BYTE-LENGTH of PIC x'a0' is "      TEST-FLD
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [BYTE-LENGTH of PIC S9(04)V9(08) is +0012.00000000
-BYTE-LENGTH of PIC X(4) is +0004.00000000
-BYTE-LENGTH of PIC '00128' is +0005.00000000
-BYTE-LENGTH of PIC x'a0' is +0001.00000000
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION CHAR])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X            PIC   S9(4)V9(4) VALUE 108.
-       01  TEST-FLD.
-           05  TEST-DATA  PIC X(01).
-               88  VALID-DATA   VALUE 'k'.
-           05  TEST-UNSET PIC X VALUE '_'.
-               88  VALID-UNSET  VALUE '_'.
-       PROCEDURE        DIVISION.
-           STRING FUNCTION CHAR ( X )
-                  DELIMITED BY SIZE
-                  INTO TEST-FLD
-           END-STRING.
-           EVALUATE TRUE
-              WHEN NOT VALID-UNSET
-                 DISPLAY "FUNCTION result too long"
-                 END-DISPLAY
-              WHEN VALID-DATA
-                 CONTINUE
-              WHEN OTHER
-                 DISPLAY TEST-DATA
-                 END-DISPLAY
-           END-EVALUATE.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION COMBINED-DATETIME])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(04)V9(08).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION COMBINED-DATETIME ( 987, 345.6 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 987.003456
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION CONCAT / CONCATENATE])
-AT_KEYWORDS([functions])
-
-# note: CONCAT was added in COBOL 202x with GnuCOBOL's CONCATENATE
-#       as blueprint
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y            PIC   X(4).
-       01  TEST-FLD.
-           05  TEST-DATA  PIC X(14).
-               88  VALID-DATA   VALUE 'defxabczz55666'.
-           05  TEST-UNSET PIC X VALUE '_'.
-               88  VALID-UNSET  VALUE '_'.
-       PROCEDURE        DIVISION.
-           MOVE "defx" TO Y.
-           STRING FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
-                  DELIMITED BY SIZE
-                  INTO TEST-FLD
-           END-STRING.
-           EVALUATE TRUE
-              WHEN NOT VALID-UNSET
-                 DISPLAY "FUNCTION result too long"
-                 END-DISPLAY
-              WHEN TEST-DATA
-                <> FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
-                 DISPLAY "CONCAT issue, '" TEST-DATA
-                     "' vs. '"
-                     FUNCTION CONCAT ( Y "abc" "zz" "55" "666" ) "'"
-                 END-DISPLAY
-              WHEN VALID-DATA
-                 CONTINUE
-              WHEN OTHER
-                 DISPLAY TEST-DATA
-                 END-DISPLAY
-           END-EVALUATE.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION CONCAT with reference modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y            PIC X(4).
-       01  TEST-FLD     PIC X(9) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE 'defx' TO Y.
-           MOVE FUNCTION CONCAT
-                ( Y "abc" "zz" "55" "666" ) (2 : 9)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 'efxabczz5'
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
 AT_SETUP([FUNCTION CONTENT-LENGTH])
 AT_KEYWORDS([functions length])
 AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
@@ -394,68 +125,6 @@ AT_DATA([prog.cob], [
            STOP RUN.
 ])
 
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-# Invalid test.
-# prog.cob:18: ANY LENGTH valid only for 01 in LIKAGE SECTION of a contained program
-# "subprog", so called, is not contained.
-
-AT_SETUP([FUNCTION as CALL parameter BY CONTENT])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. prog.
-
-       PROCEDURE DIVISION.
-       PROG-MAIN.
-           CALL "subprog" USING BY CONTENT 
-                                FUNCTION CONCAT("Abc" "D")
-           STOP RUN.
-
-       *> *****************************
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. subprog.
-
-       DATA DIVISION.
-       LINKAGE SECTION.
-       01 TESTING PIC X ANY LENGTH.
-
-       PROCEDURE DIVISION USING TESTING.
-       SUBPROG-MAIN.
-           DISPLAY TESTING
-           GOBACK.
-       END PROGRAM subprog.
-       END PROGRAM prog. *> bzzt
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [AbcD
-], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION COS])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y            PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION COS ( -0.2345 ) TO Y.
-           IF Y NOT = 0.972630641256258184713416962414561
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
 AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
 AT_CLEANUP
@@ -482,3396 +151,308 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION CURRENT-DATE])
+AT_SETUP([FUNCTION MODULE-CALLER-ID])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
+
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
        ENVIRONMENT      DIVISION.
        DATA             DIVISION.
        WORKING-STORAGE SECTION.
-       01  TEST-FLD.
-           02  WS-YEAR            PIC 9(04).
-               88 VALID-YEAR      VALUE 1980 THRU 9999.
-           02  WS-MONTH           PIC 9(02).
-               88 VALID-MONTH     VALUE 01 THRU 12.
-           02  WS-DAY             PIC 9(02).
-               88 VALID-DAY       VALUE 01 THRU 31.
-           02  WS-HOUR            PIC 9(02).
-               88 VALID-HOUR      VALUE 00 THRU 23.
-           02  WS-MIN             PIC 9(02).
-               88 VALID-MIN       VALUE 00 THRU 59.
-           02  WS-SEVALIDD        PIC 9(02).
-               88 VALID-SEC       VALUE 00 THRU 59.
-           02  WS-HUNDSEC         PIC 9(02).
-               88 VALID-HUNDSEC   VALUE 00 THRU 99.
-           02  WS-GREENW          PIC X.
-               88 VALID-GREENW    VALUE "-", "+", "0".
-               88 ZERO-GREENW     VALUE "0".
-           02  WS-OFFSET          PIC 9(02).
-               88 VALID-OFFSET    VALUE 00 THRU 13.
-               88 ZERO-OFFSET     VALUE 00.
-           02  WS-OFFSET2         PIC 9(02).
-               88 VALID-OFFSET2   VALUE 00 THRU 59.
-               88 ZERO-OFFSET2    VALUE 00.
-           02  WS-UNSET           PIC X VALUE '_'.
-               88 VALID-UNSET     VALUE '_'.
        PROCEDURE        DIVISION.
-           STRING FUNCTION CURRENT-DATE
-                  DELIMITED BY SIZE
-                  INTO TEST-FLD
-           END-STRING.
-           EVALUATE TRUE
-              WHEN NOT VALID-UNSET
-                 DISPLAY "FUNCTION result too long"
-                 END-DISPLAY
-              WHEN VALID-YEAR     AND
-                 VALID-MONTH    AND
-                 VALID-DAY      AND
-                 VALID-HOUR     AND
-                 VALID-MIN      AND
-                 VALID-SEC      AND
-                 VALID-HUNDSEC  AND
-                 VALID-GREENW   AND
-                 VALID-OFFSET   AND
-                 VALID-OFFSET2  AND
-                 VALID-UNSET    AND
-                 ((NOT ZERO-GREENW) OR (ZERO-OFFSET AND ZERO-OFFSET2))
-                 CONTINUE
-              WHEN OTHER
-                 DISPLAY "CURRENT-DATE with wrong format: "
-                         TEST-FLD (01:21)
-                 END-DISPLAY
-           END-EVALUATE.
+           CALL "prog2"
+           END-CALL.
            STOP RUN.
 ])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION DATE-OF-INTEGER])
-AT_KEYWORDS([functions])
 
-AT_DATA([prog.cob], [
+AT_DATA([prog2.cob], [
        IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
+       PROGRAM-ID.      prog2.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
+       WORKING-STORAGE SECTION.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION DATE-OF-INTEGER ( 146000 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 20000925
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
+           DISPLAY FUNCTION MODULE-CALLER-ID NO ADVANCING
+           END-DISPLAY.
+           EXIT PROGRAM.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COMPILE_MODULE prog2.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION DATE-TO-YYYYMMDD])
+AT_SETUP([FUNCTION MODULE-DATE])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
+       WORKING-STORAGE SECTION.
+       01  TEST-DATE    PIC 9(8) VALUE 0.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION DATE-TO-YYYYMMDD ( 981002, -10, 1994 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 018981002
-              DISPLAY TEST-FLD
-              END-DISPLAY
+           MOVE FUNCTION MODULE-DATE TO TEST-DATE.
+           IF   TEST-DATE NOT = 0
+             DISPLAY "OK" NO ADVANCING
+             END-DISPLAY
            END-IF.
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION DAY-OF-INTEGER])
+AT_SETUP([FUNCTION MODULE-FORMATTED-DATE])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION DAY-OF-INTEGER ( 146000 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 2000269
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION DAY-TO-YYYYDDD])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
+       WORKING-STORAGE SECTION.
+       01  TEST-DATE    PIC X(16) VALUE SPACES.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION DAY-TO-YYYYDDD ( 95005, -10, 2013 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 001995005
-              DISPLAY TEST-FLD
-              END-DISPLAY
+           MOVE FUNCTION MODULE-FORMATTED-DATE TO TEST-DATE.
+           IF   TEST-DATE NOT = SPACES
+             DISPLAY "OK" NO ADVANCING
+             END-DISPLAY
            END-IF.
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION E])
+AT_SETUP([FUNCTION MODULE-ID])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE    FUNCTION E TO Y.
-           IF Y NOT = 2.718281828459045235360287471352662
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION EXCEPTION-FILE])
-AT_KEYWORDS([functions exceptions])
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
        ENVIRONMENT      DIVISION.
-       INPUT-OUTPUT     SECTION.
-       FILE-CONTROL.
-           SELECT TEST-FILE ASSIGN "NOTEXIST"
-           FILE STATUS IS TEST-STATUS.
        DATA             DIVISION.
-       FILE             SECTION.
-       FD  TEST-FILE.
-       01  TEST-REC      PIC X(4).
        WORKING-STORAGE SECTION.
-       01  TEST-STATUS  PIC XX.
        PROCEDURE        DIVISION.
-           DISPLAY FUNCTION EXCEPTION-FILE '|'
-                   NO ADVANCING
-           END-DISPLAY.
-           OPEN INPUT TEST-FILE.
-           DISPLAY FUNCTION EXCEPTION-FILE
-                   NO ADVANCING
+           DISPLAY FUNCTION MODULE-ID NO ADVANCING
            END-DISPLAY.
            STOP RUN.
 ])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[00|35TEST-FILE], [])
 
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION EXCEPTION-LOCATION])
-AT_KEYWORDS([functions exceptions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       INPUT-OUTPUT     SECTION.
-       FILE-CONTROL.
-           SELECT TEST-FILE ASSIGN "NOTEXIST"
-           FILE STATUS IS TEST-STATUS.
-       DATA             DIVISION.
-       FILE             SECTION.
-       FD  TEST-FILE.
-       01  TEST-REC      PIC X(4).
-       WORKING-STORAGE SECTION.
-       01  TEST-STATUS  PIC XX.
-       PROCEDURE        DIVISION.
-       DECLARATIVES.
-            EC-ALL-SECTION SECTION.
-            USE EC EC-ALL
-                RESUME NEXT STATEMENT.
-            END DECLARATIVES.
-       A00-MAIN SECTION.
-       A00.
-            SET LAST EXCEPTION TO OFF
-            DISPLAY "EXCEPTION-LOCATION before open attempt: "
-                   """" FUNCTION EXCEPTION-LOCATION """".
-       B00-MAIN SECTION.
-       B00.
-            SET LAST EXCEPTION TO OFF
-            OPEN INPUT TEST-FILE.
-            DISPLAY "EXCEPTION-LOCATION after open attempt: "
-                   """" FUNCTION EXCEPTION-LOCATION """".
-       C00-MAIN SECTION.
-       C00.
-            >>TURN EC-ALL CHECKING ON
-            SET LAST EXCEPTION TO OFF
-            OPEN INPUT TEST-FILE.
-            DISPLAY "EXCEPTION-LOCATION after CHECKED open attempt: "
-                   """" FUNCTION EXCEPTION-LOCATION """".
-            STOP RUN.
-])
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[EXCEPTION-LOCATION before open attempt: " "
-EXCEPTION-LOCATION after open attempt: "prog; B00 OF B00-MAIN; prog.cob:29 "
-EXCEPTION-LOCATION after CHECKED open attempt: "prog; C00 OF C00-MAIN; prog.cob:36 "
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION EXCEPTION-STATEMENT])
-AT_KEYWORDS([functions exceptions])
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        ENVIRONMENT      DIVISION.
-        INPUT-OUTPUT     SECTION.
-        FILE-CONTROL.
-        SELECT TEST-FILE ASSIGN "NOTEXIST"
-        FILE STATUS IS TEST-STATUS.
-        DATA             DIVISION.
-        FILE             SECTION.
-            FD  TEST-FILE.
-            01  TEST-REC      PIC X(4).
-        WORKING-STORAGE SECTION.
-            01  TEST-STATUS  PIC XX.
-        PROCEDURE        DIVISION.
-        DISPLAY "EXCEPTION-STATEMENT before bad OPEN: " 
-                """" FUNCTION EXCEPTION-STATEMENT """"
-        OPEN INPUT TEST-FILE.
-        DISPLAY "EXCEPTION-STATEMENT  after bad OPEN: " 
-                """" FUNCTION EXCEPTION-STATEMENT """"
-        STOP RUN.
-])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog])
 
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[EXCEPTION-STATEMENT before bad OPEN: " "
-EXCEPTION-STATEMENT  after bad OPEN: "OPEN"
-], [])
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION EXCEPTION-STATUS])
-AT_KEYWORDS([functions exceptions])
+AT_SETUP([FUNCTION MODULE-PATH])
+AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
+
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
        ENVIRONMENT      DIVISION.
-       INPUT-OUTPUT     SECTION.
-       FILE-CONTROL.
-           SELECT TEST-FILE ASSIGN "NOTEXIST"
-           FILE STATUS IS TEST-STATUS.
        DATA             DIVISION.
-       FILE             SECTION.
-       FD  TEST-FILE.
-       01  TEST-REC      PIC X(4).
        WORKING-STORAGE SECTION.
-       01  TEST-STATUS  PIC XX.
-       PROCEDURE        DIVISION.
-           DISPLAY "EXCEPTION STATUS before bad open: " 
-                    """" FUNCTION EXCEPTION-STATUS """"
-           OPEN INPUT TEST-FILE.
-           DISPLAY "EXCEPTION STATUS  after bad open: " 
-                    """" FUNCTION EXCEPTION-STATUS """"
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[EXCEPTION STATUS before bad open: " "
-EXCEPTION STATUS  after bad open: "EC-I-O-PERMANENT-ERROR"
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION EXP])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S99V9(31).
+       01  TEST-PATH    PIC X(16) VALUE SPACES.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION EXP ( 3 ) TO Y.
-           IF Y NOT = 20.0855369231876677409285296545817
-              DISPLAY Y
-              END-DISPLAY
+           MOVE FUNCTION MODULE-PATH TO TEST-PATH.
+           IF   TEST-PATH NOT = SPACES
+             DISPLAY "OK" NO ADVANCING
+             END-DISPLAY
            END-IF.
            STOP RUN.
 ])
+
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
+
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION EXP10])
+AT_SETUP([FUNCTION MODULE-SOURCE])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
+       WORKING-STORAGE SECTION.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION EXP10 ( 4 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 000010000
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
+           DISPLAY FUNCTION MODULE-SOURCE NO ADVANCING
+           END-DISPLAY.
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog.cob])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FACTORIAL])
+AT_SETUP([FUNCTION MODULE-TIME])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
+       WORKING-STORAGE SECTION.
+       01  TEST-TIME    PIC 9(6) VALUE 0.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION FACTORIAL ( 6 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 000000720
-              DISPLAY TEST-FLD
-              END-DISPLAY
+           MOVE FUNCTION MODULE-TIME TO TEST-TIME.
+           IF   TEST-TIME NOT = 0
+             DISPLAY "OK" NO ADVANCING
+             END-DISPLAY
            END-IF.
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FORMATTED-CURRENT-DATE])
+AT_SETUP([FUNCTION MONETARY-DECIMAL-POINT])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Datetime-Format CONSTANT "YYYYMMDDThhmmss.ss+hhmm".
-       01  str             PIC X(25).
+       WORKING-STORAGE SECTION.
+       01  TEST-FLD     PIC X(8) VALUE SPACES.
        PROCEDURE        DIVISION.
-      *>   Test normal inputs.
-           MOVE FUNCTION FORMATTED-CURRENT-DATE ( Datetime-Format )
-             TO str
-           IF FUNCTION TEST-FORMATTED-DATETIME ( Datetime-Format, str)
-                   <> 0
-              DISPLAY "Test 1 failed: " str END-DISPLAY
-           END-IF.
-
+           MOVE FUNCTION MONETARY-DECIMAL-POINT TO TEST-FLD.
+           DISPLAY "OK" NO ADVANCING
+           END-DISPLAY
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FORMATTED-DATE])
+AT_SETUP([FUNCTION MONETARY-THOUSANDS-SEPARATOR])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(10).
+       WORKING-STORAGE SECTION.
+       01  TEST-FLD     PIC X(8) VALUE SPACES.
        PROCEDURE        DIVISION.
-      *>   Test normal inputs.
-           MOVE FUNCTION FORMATTED-DATE ( "YYYYMMDD", 1 ) TO str
-           IF str <> "16010101"
-              DISPLAY "Test 1 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATE ( "YYYY-MM-DD", 1 ) TO str
-           IF str <> "1601-01-01"
-              DISPLAY "Test 2 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATE ( "YYYYDDD", 1 ) TO str
-           IF str <> "1601001"
-              DISPLAY "Test 3 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATE ( "YYYY-DDD", 1 ) TO str
-           IF str <> "1601-001"
-              DISPLAY "Test 4 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 1 ) TO str
-           IF str <> "1601W011"
-              DISPLAY "Test 5 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATE ( "YYYY-Www-D", 1 ) TO str
-           IF str <> "1601-W01-1"
-              DISPLAY "Test 6 failed: " str END-DISPLAY
-           END-IF
-
-      *>   Test week number edge cases.
-      *>   For 2012-01-01.
-           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150115 ) TO str
-           IF str <> "2011W527"
-              DISPLAY "Test 7 failed: " str END-DISPLAY
-           END-IF
-
-      *>   and for 2013-12-30.
-           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150844 ) TO str
-           IF str <> "2014W011"
-              DISPLAY "Test 8 failed: " str END-DISPLAY
-           END-IF
-
+           MOVE FUNCTION MONETARY-THOUSANDS-SEPARATOR TO TEST-FLD.
+           DISPLAY "OK" NO ADVANCING
+           END-DISPLAY
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FORMATTED-DATE with ref modding])
+AT_SETUP([FUNCTION NUMERIC-DECIMAL-POINT])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(04).
+       WORKING-STORAGE SECTION.
+       01  TEST-FLD     PIC X(8) VALUE SPACES.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION FORMATTED-DATE ("YYYYMMDD", 1) (3:4)
-             TO STR
-           IF STR NOT = '0101'
-              DISPLAY STR
-              END-DISPLAY
-           END-IF
+           MOVE FUNCTION NUMERIC-DECIMAL-POINT TO TEST-FLD.
+           DISPLAY "OK" NO ADVANCING
+           END-DISPLAY
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FORMATTED-DATETIME])
+AT_SETUP([FUNCTION NUMERIC-THOUSANDS-SEPARATOR])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
        DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(40).
+       WORKING-STORAGE SECTION.
+       01  TEST-FLD     PIC X(8) VALUE SPACES.
        PROCEDURE        DIVISION.
-      *>   Test normal inputs.
-           MOVE FUNCTION FORMATTED-DATETIME
-                   ("YYYYMMDDThhmmss", 1, 45296)
-               TO str
-           IF str <> "16010101T123456"
-               DISPLAY "Test 1 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATETIME
-                   ("YYYY-MM-DDThh:mm:ss", 1, 45296)
-               TO str
-           IF str <> "1601-01-01T12:34:56"
-               DISPLAY "Test 2 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATETIME
-                    ("YYYYDDDThhmmss+hhmm", 1, 45296, -754)
-               TO str
-           IF str <> "1601001T123456-1234"
-               DISPLAY "Test 3 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-DATETIME
-                    ("YYYYDDDThhmmss+hhmm", 1, 45296)
-               TO str
-           IF str <> "1601001T123456+0000"
-               DISPLAY "Test 4 failed: " str END-DISPLAY
-           END-IF
-
-           *> Test underflow to next day due to offset
-           MOVE FUNCTION FORMATTED-DATETIME
-                    ("YYYYDDDThhmmss.sssssssssZ", 150846, 0,
-                     1)
-               TO str
-           IF str <> "2013365T235900.000000000Z"
-               DISPLAY "Test 5 failed: " str END-DISPLAY
-           END-IF
-
+           MOVE FUNCTION NUMERIC-THOUSANDS-SEPARATOR TO TEST-FLD.
+           DISPLAY "OK" NO ADVANCING
+           END-DISPLAY
            STOP RUN.
 ])
 
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
 
 AT_CLEANUP
 
 
-AT_SETUP([FUNCTION FORMATTED-DATETIME with ref modding])
+AT_SETUP([FUNCTION STORED-CHAR-LENGTH])
 AT_KEYWORDS([functions])
+AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
 
 AT_DATA([prog.cob], [
        IDENTIFICATION   DIVISION.
        PROGRAM-ID.      prog.
        DATA             DIVISION.
        WORKING-STORAGE  SECTION.
-       01  str          PIC X(04).
+       01  Y   PIC   X(24).
+       01  Z   USAGE BINARY-LONG.
        PROCEDURE        DIVISION.
-           MOVE FUNCTION FORMATTED-DATETIME
-               ("YYYYMMDDThhmmss", 1, 1) (3:4)
-             TO STR
-           IF STR NOT = '0101'
-              DISPLAY STR
+           MOVE "123456789012" TO Y.
+           MOVE FUNCTION STORED-CHAR-LENGTH ( Y ) TO Z.
+           IF Z NOT = 12
+              DISPLAY Z
               END-DISPLAY
-           END-IF
+           END-IF.
            STOP RUN.
 ])
-
 AT_CHECK([$COMPILE prog.cob], [0], [], [])
 AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION FORMATTED-TIME])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(20).
-       PROCEDURE        DIVISION.
-      *>   Test normal inputs.
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss", 45296 ) TO str
-           IF str <> "123456"
-               DISPLAY "Test 1 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss", 45296 ) TO str
-           IF str <> "12:34:56"
-               DISPLAY "Test 2 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmssZ", 86399, -1 ) TO str
-           IF str <> "000059Z"
-               DISPLAY "Test 3 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ssZ", 45296)
-               TO str
-           IF str <> "12:34:56Z"
-               DISPLAY "Test 4 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss.ss", 45296.78 ) TO str
-           IF str <> "123456.78"
-               DISPLAY "Test 5 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss.ssZ", 0, 120)
-               TO str
-           IF str <> "22:00:00.00Z"
-               DISPLAY "Test 6 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 45296)
-               TO str
-           IF str <> "123456+0000"
-               DISPLAY "Test 7 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss+hh:mm", 45296, 0 )
-               TO str
-           IF str <> "12:34:56+00:00"
-               DISPLAY "Test 8 failed: " str END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 45296, -754)
-               TO str
-           IF str <> "123456-1234"
-               DISPLAY "Test 9 failed: " str END-DISPLAY
-           END-IF
-
-      *>   Test with invalid/missing offset times.
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 1, 3000 )
-               TO str
-           DISPLAY "Test 10 " """" str """"
-           DISPLAY "Test 10 " """" FUNCTION EXCEPTION-STATUS """"
-           DISPLAY "Test 10 " """" FUNCTION EXCEPTION-LOCATION """"
-
-           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 1, -3000 )
-               TO str
-           DISPLAY "Test 11 " """" str """"
-           DISPLAY "Test 11 " """" FUNCTION EXCEPTION-STATUS """"
-           DISPLAY "Test 11 " """" FUNCTION EXCEPTION-LOCATION """"
-
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [Test 10 "                    "
-Test 10 "EC-ARGUMENT-FUNCTION"
-Test 10 "prog; ; prog.cob:60 "
-Test 11 "                    "
-Test 11 "EC-ARGUMENT-FUNCTION"
-Test 11 "prog; ; prog.cob:66 "
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION FORMATTED-TIME DP.COMMA])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-
-       ENVIRONMENT      DIVISION.
-       CONFIGURATION    SECTION.
-       SPECIAL-NAMES.
-           DECIMAL-POINT IS COMMA.
-
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(11).
-
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION FORMATTED-TIME ("hh:mm:ss,ss", 45296) TO str
-           IF str <> "12:34:56,00"
-               DISPLAY "Test 1 failed: " str END-DISPLAY
-           END-IF
-
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION FORMATTED-TIME with ref modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  str          PIC X(04).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION FORMATTED-TIME ("hhmmss", 45296) (3:4)
-             TO STR
-           IF STR NOT = '3456'
-              DISPLAY STR
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION FRACTION-PART])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(04)V9(04).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION FRACTION-PART ( 3.12345 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = +0000.1234
-              DISPLAY 'FRACTION-PART ( +3.12345 ) wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION FRACTION-PART ( -3.12345 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = -0000.1234
-              DISPLAY 'FRACTION-PART ( -3.12345 ) wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-AT_SETUP([FUNCTION HEX-OF])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01 PAC PIC 9(5) COMP-3 VALUE 12345.
-        PROCEDURE        DIVISION.
-            DISPLAY FUNCTION HEX-OF('Hello, world!')
-            DISPLAY FUNCTION HEX-OF(PAC)
-            END PROGRAM prog.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [48656C6C6F2C20776F726C6421
-12345F
-], [])
-AT_CLEANUP
-
-AT_SETUP([FUNCTION HIGHEST-ALGEBRAIC])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  F1           PIC S999.
-       01  F2           PIC S9(4) BINARY.
-       01  F3           PIC 99V9(3).
-       01  F4           PIC $**,**9.99BCR.
-       01  F5           PIC $**,**9.99.
-       01  F6           USAGE BINARY-CHAR SIGNED.
-       01  F7           USAGE BINARY-CHAR UNSIGNED.
-       01  F8           PIC 999PPP.
-       01  F9           PIC P99.
-       01  TEST-FLD     PIC S9(08)V9(04).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F1)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 999
-              DISPLAY "Test 1 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F2)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 9999
-              DISPLAY "Test 2 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F3)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 99.999
-              DISPLAY "Test 3 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F4)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 99999.99
-              DISPLAY "Test 4 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F5)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 99999.99
-              DISPLAY "Test 5 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F6)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 127
-              DISPLAY "Test 6 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F7)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 255
-              DISPLAY "Test 7 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F8)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 999000
-              DISPLAY "Test 7 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION HIGHEST-ALGEBRAIC (F9)
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 0.099
-              DISPLAY "Test 7 fail: " TEST-FLD
-              END-DISPLAY
-           END-IF.
-
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-AT_SETUP([FUNCTION INTEGER])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X            PIC   S9(4)V9(4) VALUE -1.5.
-       01  Y            PIC   9(12)      VALUE 600851475143.
-       01  TEST-FLD     PIC S9(14)V9(08).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION INTEGER ( X )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = -2
-              DISPLAY 'INTEGER ( X ) wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION INTEGER ( Y / 71 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 8462696833
-              DISPLAY 'INTEGER ( Y / 71 ) wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION INTEGER-OF-DATE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION INTEGER-OF-DATE ( 20000925 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 000146000
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION INTEGER-OF-DAY])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  TEST-FLD     PIC S9(09)V9(02).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION INTEGER-OF-DAY ( 2000269 )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = 000146000
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION INTEGER-OF-FORMATTED-DATE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  day-int      PIC 9(9).
-
-       PROCEDURE        DIVISION.
-           *> The date 2013-12-30 is used as it can also be used to
-           *> check the conversion of dates in week form.
-           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
-                   ("YYYY-MM-DD", "2013-12-30")
-               TO day-int
-           IF day-int <> 150844
-               DISPLAY "Test 1 failed: " day-int END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
-                   ("YYYY-DDD", "2013-364")
-               TO day-int
-           IF day-int <> 150844
-               DISPLAY "Test 2 failed: " day-int END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
-                   ("YYYY-Www-D", "2014-W01-1")
-               TO day-int
-           IF day-int <> 150844
-               DISPLAY "Test 3 failed: " day-int END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
-                   ("YYYY-MM-DDThh:mm:ss", "2013-12-30T12:34:56")
-               TO day-int
-           IF day-int <> 150844
-               DISPLAY "Test 4 failed: " day-int END-DISPLAY
-           END-IF
-
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION INTEGER-PART])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   S9(4)V9(4) VALUE -1.5.
-       01  TEST-FLD     PIC S9(04)V9(02).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION INTEGER-PART ( X )
-             TO TEST-FLD.
-           IF TEST-FLD NOT = -1
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LENGTH])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC      S9(4)V9(4) VALUE -1.5.
-       01  TEST-FLD     PIC S9(04)V9(02).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LENGTH ( X )  TO TEST-FLD
-           IF TEST-FLD NOT = 8
-              DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION LENGTH ( '00128' )
-             TO TEST-FLD
-           IF TEST-FLD NOT = 5
-              DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION LENGTH ( x'a0' )
-             TO TEST-FLD
-           IF TEST-FLD NOT = 1
-              DISPLAY 'LENGTH x"a0" wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF
-
-           MOVE FUNCTION LENGTH ( z'a0' )
-             TO TEST-FLD
-           IF TEST-FLD NOT = 3
-              DISPLAY 'LENGTH z"a0" wrong: ' TEST-FLD
-              END-DISPLAY
-           END-IF
-
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOCALE-COMPARE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           IF FUNCTION LOCALE-COMPARE ("A", "B") NOT = "<"
-              DISPLAY "Test 1 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOCALE-COMPARE ("B", "A") NOT = ">"
-              DISPLAY "Test 2 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOCALE-COMPARE ("A", "A") NOT = "="
-              DISPLAY "Test 3 fail"
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOCALE-DATE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(32)   VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOCALE-DATE ( "19630302" ) TO X.
-           IF X NOT = SPACES
-                DISPLAY "OK"
-                END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[OK
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOCALE-TIME])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(32)   VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOCALE-TIME ( "233012" ) TO X.
-           IF X NOT = SPACES
-                DISPLAY "OK"
-                END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[OK
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOCALE-TIME-FROM-SECONDS])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(32)   VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOCALE-TIME-FROM-SECONDS ( 33012 ) TO X.
-           IF X NOT = SPACES
-              DISPLAY "OK"
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[OK
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOG])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOG ( 1.5 ) TO Y.
-           IF Y NOT = 0.405465108108164381978013115464349
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOG10])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOG10 ( 1.5 ) TO Y.
-           IF Y NOT = 0.176091259055681242081289008530622
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOWER-CASE])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X            PIC X(10) VALUE "A#B.C%D+E$".
-       01  TEST-FLD     PIC X(12) VALUE ALL '_'.
-       PROCEDURE        DIVISION.
-           STRING FUNCTION LOWER-CASE ( X )
-                  DELIMITED BY SIZE
-                  INTO TEST-FLD
-           END-STRING
-           IF TEST-FLD NOT = 'a#b.c%d+e$__'
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOWER-CASE with reference modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X            PIC X(10) VALUE "A#B.C%D+E$".
-       01  TEST-FLD     PIC X(03).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION LOWER-CASE ( X ) (1 : 3)
-             TO TEST-FLD
-           IF TEST-FLD NOT = 'a#b'
-              DISPLAY TEST-FLD
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION LOWEST-ALGEBRAIC])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  F1           PIC S999.
-       01  F2           PIC S9(4) BINARY.
-       01  F3           PIC 99V9(3).
-       01  F4           PIC $**,**9.99BCR.
-       01  F5           PIC $**,**9.99.
-       01  F6           USAGE BINARY-CHAR SIGNED.
-       01  F7           USAGE BINARY-CHAR UNSIGNED.
-       01  F8           PIC S999PPP.
-       01  F9           PIC SP99.
-       PROCEDURE        DIVISION.
-           IF FUNCTION LOWEST-ALGEBRAIC (F1) NOT = -999
-              DISPLAY "Test 1 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F2) NOT = -9999
-              DISPLAY "Test 2 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F3) NOT = 0
-              DISPLAY "Test 3 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F4) NOT = -99999.99
-              DISPLAY "Test 4 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F5) NOT = 0
-              DISPLAY "Test 5 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F6) NOT = -128
-              DISPLAY "Test 6 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F7) NOT = 0
-              DISPLAY "Test 7 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F8) NOT = -999000
-              DISPLAY "Test 8 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION LOWEST-ALGEBRAIC (F9) NOT = -0.099
-              DISPLAY "Test 9 fail"
-              END-DISPLAY
-           END-IF.
-
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MAX])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MAX ( 3 -14 0 8 -3 )
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[8
-], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MEAN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 result        PIC S999V999.
-       PROCEDURE        DIVISION.
-           COMPUTE result = FUNCTION MEAN ( 3 -14 0 8 -3 )
-           DISPLAY result
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[-001.200
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MEDIAN])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MEDIAN ( 3 -14 0 8 -3 )
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[0
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MIDRANGE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC S999V999.
-       PROCEDURE        DIVISION.
-           COMPUTE RESULT = FUNCTION MIDRANGE ( 3 -14 0 8 -3 )
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[-003.000
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MIN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MIN ( 3 -14 0 8 -3 )
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[-14
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MOD (valid)])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y            PIC 9(12)      VALUE 600851475143.
-       01  R            PIC S9(4)V9(4) VALUE 0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MOD ( -11 5 ) TO R
-           IF R NOT = 4
-              DISPLAY 'first one wrong: ' R
-              END-DISPLAY
-           END-IF
-           MOVE FUNCTION MOD ( Y, 71 ) TO R
-           IF R NOT = 0
-              DISPLAY 'second one wrong: ' R
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MOD (invalid)])
-AT_KEYWORDS([functions exceptions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            PIC 9          VALUE 0.
-       01  R            PIC S9(4)V9(4) VALUE 1.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MOD ( -11 Z ) TO R
-           IF FUNCTION EXCEPTION-STATUS
-           NOT = 'EC-ARGUMENT-FUNCTION'
-              DISPLAY 'Wrong/missing exception: '
-                      FUNCTION EXCEPTION-STATUS
-              END-DISPLAY
-           END-IF
-           IF R NOT = 0
-              DISPLAY 'result is not zero: ' R
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-CALLER-ID])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       PROCEDURE        DIVISION.
-           CALL "prog2"
-           END-CALL.
-           STOP RUN.
-])
-
-AT_DATA([prog2.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog2.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MODULE-CALLER-ID NO ADVANCING
-           END-DISPLAY.
-           EXIT PROGRAM.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COMPILE_MODULE prog2.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-DATE])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-DATE    PIC 9(8) VALUE 0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MODULE-DATE TO TEST-DATE.
-           IF   TEST-DATE NOT = 0
-             DISPLAY "OK" NO ADVANCING
-             END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-FORMATTED-DATE])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-DATE    PIC X(16) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MODULE-FORMATTED-DATE TO TEST-DATE.
-           IF   TEST-DATE NOT = SPACES
-             DISPLAY "OK" NO ADVANCING
-             END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-ID])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MODULE-ID NO ADVANCING
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-PATH])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-PATH    PIC X(16) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MODULE-PATH TO TEST-PATH.
-           IF   TEST-PATH NOT = SPACES
-             DISPLAY "OK" NO ADVANCING
-             END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-SOURCE])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION MODULE-SOURCE NO ADVANCING
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [prog.cob])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MODULE-TIME])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-TIME    PIC 9(6) VALUE 0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MODULE-TIME TO TEST-TIME.
-           IF   TEST-TIME NOT = 0
-             DISPLAY "OK" NO ADVANCING
-             END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MONETARY-DECIMAL-POINT])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-FLD     PIC X(8) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MONETARY-DECIMAL-POINT TO TEST-FLD.
-           DISPLAY "OK" NO ADVANCING
-           END-DISPLAY
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION MONETARY-THOUSANDS-SEPARATOR])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-FLD     PIC X(8) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION MONETARY-THOUSANDS-SEPARATOR TO TEST-FLD.
-           DISPLAY "OK" NO ADVANCING
-           END-DISPLAY
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMERIC-DECIMAL-POINT])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-FLD     PIC X(8) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION NUMERIC-DECIMAL-POINT TO TEST-FLD.
-           DISPLAY "OK" NO ADVANCING
-           END-DISPLAY
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMERIC-THOUSANDS-SEPARATOR])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  TEST-FLD     PIC X(8) VALUE SPACES.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION NUMERIC-THOUSANDS-SEPARATOR TO TEST-FLD.
-           DISPLAY "OK" NO ADVANCING
-           END-DISPLAY
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [OK], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMVAL])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X1  PIC   X(12) VALUE " -9876.1234 ".
-       01  X2  PIC   X(18) VALUE " 19876.1234 CR".
-       01  N   PIC   s9(5)v9(5).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION NUMVAL ( X1 ) TO N
-           IF N NOT = -9876.1234
-              DISPLAY N
-              END-DISPLAY
-           END-IF
-           MOVE FUNCTION NUMVAL ( X2 ) TO N
-           IF N NOT = -19876.1234
-              DISPLAY N
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMVAL-C])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X1  PIC   X(14) VALUE " -% 9876.1234 ".
-       01  X2  PIC   X(20) VALUE " % 19,876.1234 DB".
-       01  N   PIC   s9(5)v9(5).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
-           IF N NOT = -9876.1234
-              DISPLAY N
-              END-DISPLAY
-           END-IF
-           MOVE FUNCTION NUMVAL-C ( X2 , "%" ) TO N
-           IF N NOT = -19876.1234
-              DISPLAY N
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMVAL-C DP.COMMA])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       CONFIGURATION    SECTION.
-       SPECIAL-NAMES.
-           DECIMAL-POINT IS COMMA
-           .
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X1  PIC   X(20) VALUE " % 19.876,1234 DB".
-       01  N   PIC   s9(5)v9(5).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
-           IF N NOT = -19876,1234
-              DISPLAY N
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION NUMVAL-F])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01   result      PIC S9(8)V9(9) COMP-5.
-       01   vector.     
-        05  vd.
-          10  FILLER   PIC  X(32)  VALUE   " - 123.456 E + 2 ".
-          10  FILLER   PIC  X(32)  VALUE   "123".
-          10  FILLER   PIC  X(32)  VALUE   ".456".
-          10  FILLER   PIC  X(32)  VALUE   "123.456".
-          10  FILLER   PIC  X(32)  VALUE   "-123.456".
-          10  FILLER   PIC  X(32)  VALUE   "123.456E2".
-          10  FILLER   PIC  X(32)  VALUE   "-123.456E-2".
-          10  FILLER   PIC  X(32)  VALUE   "DONE".
-          10  FILLER   PIC  X(32)  OCCURS 100 TIMES.
-        05  datat REDEFINES vd PIC X(32) OCCURS 100 TIMES INDEXED BY I.
-       PROCEDURE        DIVISION.
-            SET I TO 1
-            PERFORM UNTIL datat(I) EQUALS "DONE"
-                DISPLAY """"datat(I)"""" SPACE WITH NO ADVANCING
-                MOVE FUNCTION NUMVAL-F(datat(I)) TO result
-                DISPLAY result
-                ADD 1 TO I
-                END-PERFORM.
-            STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[" - 123.456 E + 2                " -00012345.600000000
-"123                             " +00000123.000000000
-".456                            " +00000000.456000000
-"123.456                         " +00000123.456000000
-"-123.456                        " -00000123.456000000
-"123.456E2                       " +00012345.600000000
-"-123.456E-2                     " -00000001.234560000
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ORD])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 999.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ORD ( "k" ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[108
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ORD-MAX])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 999.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ORD-MAX ( 3 -14 0 8 -3 ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[004
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION ORD-MIN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 999.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION ORD-MIN ( 3 -14 0 8 -3 ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[002
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION PI])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   9V9(32).
-       PROCEDURE        DIVISION.
-           MOVE    FUNCTION PI TO Y.
-           IF Y NOT = 3.14159265358979323846264338327950
-              DISPLAY Y
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION PRESENT-VALUE])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 9(5)V9(4).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION PRESENT-VALUE ( 3 2 1 ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[00000.5625
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION RANDOM])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S99V99   COMP VALUE -1.0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION RANDOM ( ) TO Y.
-           IF Y < 0
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION RANGE])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            PIC S9(4)V9(4) COMP-5.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION RANGE ( 3 -14 0 8 -3 ) TO Z.
-           IF Z NOT = 22
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION REM (valid)])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  R            PIC S9(4)V9(4) COMP-5 VALUE 0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION REM ( -11 5 ) TO R
-           IF R NOT = -1
-              DISPLAY R END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION REM (invalid)])
-AT_KEYWORDS([functions exceptions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  R            PIC S9(4)V9(4) COMP-5 VALUE 4.1.
-       01  Z            PIC 9 COMP-5 VALUE 0.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION REM ( -11 Z ) TO R
-           IF FUNCTION EXCEPTION-STATUS
-           NOT = 'EC-ARGUMENT-FUNCTION'
-              DISPLAY 'Wrong/missing exception: '
-                      FUNCTION EXCEPTION-STATUS
-              END-DISPLAY
-           END-IF
-           IF R NOT = 0
-              DISPLAY 'result is not zero: ' R
-              END-DISPLAY
-           END-IF
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION REVERSE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(10) VALUE "A#B.C%D+E$".
-       01  Z   PIC   X(10).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION REVERSE ( X ) TO Z.
-           IF Z NOT = "$E+D%C.B#A"
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION REVERSE with reference modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(10) VALUE "A#B.C%D+E$".
-       01  Z   PIC   X(10).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION REVERSE ( X ) (1 : 4) TO Z.
-           IF Z NOT = "$E+D      "
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SECONDS-FROM-FORMATTED-TIME])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  result       PIC 9(8)V9(9) COMP-5.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("hhmmss", "010203")
-               TO result.
-           IF result NOT = 3723
-                   DISPLAY "Test 1 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("hh:mm:ss", "01:02:03")
-               TO result.
-           IF result NOT = 3723
-                   DISPLAY "Test 2 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("hhmmss.ssssssss", "010203.04050607")
-               TO result.
-           IF result NOT = 3723.04050607
-                   DISPLAY "Test 3 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("hhmmssZ", "010203Z")
-               TO result.
-           IF result NOT = 3723
-                   DISPLAY "Test 4 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("hhmmss+hhmm", "010203+0405")
-               TO result.
-           IF result NOT = 3723
-                   DISPLAY "Test 5 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
-                    ("YYYYMMDDThhmmss", "16010101T010203")
-               TO result.
-           IF result NOT = 3723
-                   DISPLAY "Test 6 failed: " result
-                   END-DISPLAY
-           END-IF.
-
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SECONDS-PAST-MIDNIGHT])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC      9(8)   COMP-5.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SECONDS-PAST-MIDNIGHT TO Y.
-           IF Y NOT < 86402
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SIGN])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            USAGE BINARY-LONG SIGNED.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SIGN ( 3.12345 ) TO Z.
-           IF Z NOT = 1
-              DISPLAY "Sign 1 " Z
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION SIGN ( -0.0 ) TO Z.
-           IF Z NOT = 0
-              DISPLAY "Sign 2 " Z
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION SIGN ( 0.0 ) TO Z.
-           IF Z NOT = 0
-              DISPLAY "Sign 3 " Z
-              END-DISPLAY
-           END-IF.
-           MOVE FUNCTION SIGN ( -3.12345 ) TO Z.
-           IF Z NOT = -1
-              DISPLAY "Sign 4 " Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SIN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SIN ( 1.5 ) TO Y.
-           IF Y NOT = 0.997494986604054430941723371141487
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SQRT])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(33).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SQRT ( 1.5 ) TO Y.
-           IF Y NOT = 1.224744871391589049098642037352945
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION STANDARD-DEVIATION])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S9V9(32).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION STANDARD-DEVIATION ( 3 -14 0 8 -3 ) TO Y.
-           IF Y NOT = 7.35934779718963954877237043574538
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION STORED-CHAR-LENGTH])
-AT_KEYWORDS([functions])
-AT_XFAIL_IF([test "$COB_DIALECT" != "gnu"])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   X(24).
-       01  Z   USAGE BINARY-LONG.
-       PROCEDURE        DIVISION.
-           MOVE "123456789012" TO Y.
-           MOVE FUNCTION STORED-CHAR-LENGTH ( Y ) TO Z.
-           IF Z NOT = 12
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SUBSTITUTE])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   X(24).
-       PROCEDURE        DIVISION.
-           MOVE "abc111444555defxxabc" TO Y
-           DISPLAY FUNCTION TRIM (FUNCTION SUBSTITUTE ( Y "abc" "zz" "55" "666" ))
-           
-           MOVE "bobBobjimJimbobBobjimJim" TO Y
-           DISPLAY FUNCTION SUBSTITUTE ( Y "bob" "FILLER" "jim" "Z")
-      
-           MOVE "bobBobjimJimbobBobjimJim" TO Y
-           DISPLAY FUNCTION SUBSTITUTE ( Y FIRST "bob" "FILLER" "jim" "Z")
-      
-           MOVE "bobBobjimJimbobBobjimJim" TO Y
-           DISPLAY FUNCTION SUBSTITUTE ( Y LAST "bob" "FILLER" "jim" "Z")
-
-           MOVE "bobBobjimJimbobBobjimJim" TO Y
-           DISPLAY FUNCTION SUBSTITUTE ( Y ANYCASE "bob" "FILLER" ANYCASE "jim" "Z")
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], 
-[zz1114446665defxxzz
-FILLERBobZJimFILLERBobZJim
-FILLERBobZJimbobBobZJim
-bobBobZJimFILLERBobZJim
-FILLERFILLERZZFILLERFILLERZZ
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SUBSTITUTE with reference modding])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   X(20).
-       01  Z   PIC   X(20).
-       PROCEDURE        DIVISION.
-           MOVE "abc111444555defxxabc" TO Y.
-           MOVE FUNCTION SUBSTITUTE
-                   ( Y "abc" "zz" "55" "666" ) (2 : 9)
-                TO Z.
-           IF Z NOT = "z11144466"
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SUBSTITUTE-CASE])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   X(20).
-       01  Z   PIC   X(20).
-       PROCEDURE        DIVISION.
-           MOVE "ABC111444555defxxabc" TO Y.
-           MOVE FUNCTION SUBSTITUTE (Y anycase "abc" "zz" 
-                                       anycase "55" "666")
-                TO Z.
-           IF Z NOT = "zz1114446665defxxzz"
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SUBSTITUTE-CASE with reference mod])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   X(20).
-       01  Z   PIC   X(20).
-       PROCEDURE        DIVISION.
-           MOVE "abc111444555defxxabc" TO Y.
-           MOVE FUNCTION SUBSTITUTE
-                   ( Y anycase "ABC" "zz" 
-                       anycase "55" "666" ) (2 : 9)
-                TO Z.
-           IF Z NOT = "z11144466"
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION SUM])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            USAGE BINARY-LONG.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION SUM ( 3 -14 0 8 -3 ) TO Z.
-           IF Z NOT = -6
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TAN])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Y   PIC   S99V9(31).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION TAN ( 1.5 ) TO Y.
-           IF Y NOT = 14.1014199471717193876460836519877
-                   DISPLAY Y
-                   END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-DATE-YYYYMMDD])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 999.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION TEST-DATE-YYYYMMDD ( 20020231 ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[003
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-DAY-YYYYDDD])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 RESULT PIC 999.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION TEST-DAY-YYYYDDD ( 2002400 ) TO RESULT
-           DISPLAY RESULT
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[002
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with dates])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        PROCEDURE        DIVISION.
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "16010101") <> 0
-                DISPLAY "Test 1 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYY-MM-DD", "1601-01-01") <> 0
-                DISPLAY "Test 2 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYDDD", "1601001") <> 0
-                DISPLAY "Test 3 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYY-DDD", "1601-001") <> 0
-                DISPLAY "Test 4 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "1601W011") <> 0
-                DISPLAY "Test 5 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYY-Www-D", "1601-W01-1") <> 0
-                DISPLAY "Test 6 failed" END-DISPLAY
-            END-IF
-
-
-            *> How will this work with zero-length items?
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "1") <> 2
-                DISPLAY "Test 7 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "160A0101") <> 4
-                DISPLAY "Test 8 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "00000101") <> 1
-                DISPLAY "Test 9 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "16000101") <> 4
-                DISPLAY "Test 10 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "16010001") <> 6
-                DISPLAY "Test 11 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "16011301") <> 6
-                DISPLAY "Test 12 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "16010190") <> 7
-                DISPLAY "Test 13 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "18000229") <> 8
-                DISPLAY "Test 14 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYY-MM-DD", "1601 01 01") <> 5
-                DISPLAY "Test 15 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "160101010") <> 9
-                DISPLAY "Test 16 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "1601A011") <> 5
-                DISPLAY "Test 17 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "1601W531") <> 7
-                DISPLAY "Test 18 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "1601W601") <> 6
-                DISPLAY "Test 19 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "2009W531") <> 0
-                DISPLAY "Test 20 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYWwwD", "1601W018") <> 8
-                DISPLAY "Test 21 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYDDD", "1601366") <> 7
-                DISPLAY "Test 22 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYDDD", "1601370") <> 6
-                DISPLAY "Test 23 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYDDD", "1601400") <> 5
-                DISPLAY "Test 24 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "01") <> 1
-                DISPLAY "Test 25 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                   ("YYYYMMDD", "1601010") <> 8
-                DISPLAY "Test 26 failed" END-DISPLAY
-            END-IF
-
-            STOP RUN
-            .
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with times])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        PROCEDURE        DIVISION.
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss.sssssssssZ", "000000.000000000Z") <> 0
-                DISPLAY "Test 1 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hh:mm:ss.sssssssssZ", "00:00:00.000000000Z") <> 0
-                DISPLAY "Test 2 failed" END-DISPLAY
-            END-IF
-            *> 0 instead of +/- valid in sending fields with offset of zero.
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss.sssssssss+hhmm", "000000.00000000000000")
-                    <> 0
-                DISPLAY "Test 3 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hh:mm:ss.sssssssss+hh:mm",
-                    "00:00:00.000000000+00:00")
-                    <> 0
-                DISPLAY "Test 4 failed" END-DISPLAY
-            END-IF
-
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss", "300000") <> 1
-                DISPLAY "Test 5 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss", "250000") <> 2
-                DISPLAY "Test 6 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss", "006000") <> 3
-                DISPLAY "Test 7 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss", "000060") <> 5
-                DISPLAY "Test 8 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hh:mm:ss", "00-00-00") <> 3
-                DISPLAY "Test 9 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss.ss", "000000,00") <> 7
-                DISPLAY "Test 10 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss+hhmm", "000000 0000") <> 7
-                DISPLAY "Test 11 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss+hhmm", "00000000001") <> 11
-                DISPLAY "Test 12 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmssZ", "000000A") <> 7
-                DISPLAY "Test 13 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss", SPACE) <> 1
-                DISPLAY "Test 14 failed" END-DISPLAY
-            END-IF
-
-            STOP RUN
-            .
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with datetimes])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        77 RESULT        PIC 9(02).
-        PROCEDURE        DIVISION.
-            MOVE FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss", "16010101T000000")
-              TO RESULT
-            IF RESULT <> 0
-               DISPLAY "Test 1 failed: " RESULT END-DISPLAY
-            END-IF
-            MOVE FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYY-MM-DDThh:mm:ss.sssssssss+hh:mm",
-                    "1601-01-01T00:00:00.000000000+00:00")
-              TO RESULT
-            IF RESULT <> 0
-               DISPLAY "Test 2 failed: " RESULT END-DISPLAY
-            END-IF
-
-            MOVE FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss", "16010101 000000")
-              TO RESULT
-            IF RESULT <> 9
-               DISPLAY "Test 3 failed: " RESULT END-DISPLAY
-            END-IF
-            MOVE FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss", SPACE)
-              TO RESULT
-            IF RESULT <> 1
-               DISPLAY "Test 4 failed: " RESULT END-DISPLAY
-            END-IF
-            MOVE FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss", "16010101T      ")
-              TO RESULT
-            IF RESULT <> 10
-               DISPLAY "Test 5 failed: " RESULT END-DISPLAY
-            END-IF
-
-            STOP RUN
-            .
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME DP.COMMA])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        ENVIRONMENT      DIVISION.
-        CONFIGURATION    SECTION.
-        SPECIAL-NAMES.
-            DECIMAL-POINT IS COMMA.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        PROCEDURE        DIVISION.
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss,ss", "000000,00") <> 0
-                DISPLAY "Test 1 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss,ss", "16010101T000000,00") <> 0
-                DISPLAY "Test 2 failed" END-DISPLAY
-            END-IF
-
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("hhmmss,ss", "000000.00") <> 7
-                DISPLAY "Test 3 failed" END-DISPLAY
-            END-IF
-            IF FUNCTION TEST-FORMATTED-DATETIME
-                    ("YYYYMMDDThhmmss,ss", "16010101T000000.00") <> 16
-                DISPLAY "Test 4 failed" END-DISPLAY
-            END-IF
-
-            STOP RUN
-            .
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-NUMVAL])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           IF FUNCTION TEST-NUMVAL ("+ 1")     NOT = 0
-              DISPLAY "Test 1  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL (" + 1")    NOT = 0
-              DISPLAY "Test 2  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("- 1")     NOT = 0
-              DISPLAY "Test 3  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL (" - 1")    NOT = 0
-              DISPLAY "Test 4  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("+- 1")    NOT = 2
-              DISPLAY "Test 5  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1 +")     NOT = 0
-              DISPLAY "Test 6  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1 -")     NOT = 0
-              DISPLAY "Test 7  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1 +-")    NOT = 4
-              DISPLAY "Test 8  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1 -+")    NOT = 4
-              DISPLAY "Test 9  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("+ 1.1")   NOT = 0
-              DISPLAY "Test 10 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("- 1.1")   NOT = 0
-              DISPLAY "Test 11 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 +")   NOT = 0
-              DISPLAY "Test 12 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 -")   NOT = 0
-              DISPLAY "Test 13 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 CR")  NOT = 0
-              DISPLAY "Test 14 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 DB")  NOT = 0
-              DISPLAY "Test 15 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 -CR") NOT = 6
-              DISPLAY "Test 16 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 +DB") NOT = 6
-              DISPLAY "Test 17 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("1.1 CDB") NOT = 6
-              DISPLAY "Test 18 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("+1.1 CR") NOT = 6
-              DISPLAY "Test 19 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL ("+      ") NOT = 8
-              DISPLAY "Test 20 fail"
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TEST-NUMVAL-C])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           IF FUNCTION TEST-NUMVAL-C ("+ 1")     NOT = 0
-              DISPLAY "Test 1  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C (" + 1")    NOT = 0
-              DISPLAY "Test 2  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("- 1")     NOT = 0
-              DISPLAY "Test 3  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C (" - 1")    NOT = 0
-              DISPLAY "Test 4  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("+- 1")    NOT = 2
-              DISPLAY "Test 5  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1 +")     NOT = 0
-              DISPLAY "Test 6  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1 -")     NOT = 0
-              DISPLAY "Test 7  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1 +-")    NOT = 4
-              DISPLAY "Test 8  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1 -+")    NOT = 4
-              DISPLAY "Test 9  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("+ 1.1")   NOT = 0
-              DISPLAY "Test 10 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("- 1.1")   NOT = 0
-              DISPLAY "Test 11 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1.1 +")   NOT = 0
-              DISPLAY "Test 12 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1.1 -")   NOT = 0
-              DISPLAY "Test 13 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1.1 CR")  NOT = 0
-              DISPLAY "Test 14 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1.1 DB")  NOT = 0
-              DISPLAY "Test 15 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("1.1 -CR") NOT = 6
-              DISPLAY "Test 16 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("+ $1.1 ") NOT = 0
-              DISPLAY "Test 17 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("- $1.1 ") NOT = 0
-              DISPLAY "Test 18 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("+ X1.1 ", "X") NOT = 0
-              DISPLAY "Test 19 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-C ("- X1.1 ", "X") NOT = 0
-              DISPLAY "Test 20 fail"
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-AT_SETUP([FUNCTION TEST-NUMVAL-F])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       PROCEDURE        DIVISION.
-           IF FUNCTION TEST-NUMVAL-F ("+ 1")     NOT = 0
-              DISPLAY "Test 1  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F (" + 1")    NOT = 0
-              DISPLAY "Test 2  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("- 1")     NOT = 0
-              DISPLAY "Test 3  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F (" - 1")    NOT = 0
-              DISPLAY "Test 4  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("+- 1")    NOT = 2
-              DISPLAY "Test 5  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1 +")     NOT = 3
-              DISPLAY "Test 6  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1 -")     NOT = 3
-              DISPLAY "Test 7  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1 +-")    NOT = 3
-              DISPLAY "Test 8  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1 -+")    NOT = 3
-              DISPLAY "Test 9  fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("+ 1.1")   NOT = 0
-              DISPLAY "Test 10 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("- 1.1")   NOT = 0
-              DISPLAY "Test 11 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 +")   NOT = 5
-              DISPLAY "Test 12 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 -")   NOT = 5
-              DISPLAY "Test 13 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1   ")  NOT = 0
-              DISPLAY "Test 14 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1   ")  NOT = 0
-              DISPLAY "Test 15 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 -CR") NOT = 5
-              DISPLAY "Test 16 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 E+1") NOT = 0
-              DISPLAY "Test 17 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 E -1") NOT = 0
-              DISPLAY "Test 18 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("1.1 EE") NOT = 6
-              DISPLAY "Test 19 fail"
-              END-DISPLAY
-           END-IF.
-           IF FUNCTION TEST-NUMVAL-F ("+1.1 E+01") NOT = 0
-              DISPLAY "Test 20 fail"
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TRIM])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(12) VALUE " a#b.c%d+e$ ".
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION TRIM ( X )
-           END-DISPLAY.
-           DISPLAY FUNCTION TRIM ( X TRAILING )
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[a#b.c%d+e$
- a#b.c%d+e$
-])
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TRIM with reference modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(12) VALUE " a#b.c%d+e$ ".
-       PROCEDURE        DIVISION.
-           DISPLAY FUNCTION TRIM ( X ) (2 : 3)
-           END-DISPLAY.
-           DISPLAY FUNCTION TRIM ( X TRAILING ) (2 : 3)
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[#b.
-a#b
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION TRIM zero length])
-AT_KEYWORDS([functions])
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  A2   PIC   X(2) VALUE "  ".
-       01  A3   PIC   X(3) VALUE "   ".
-       01  X   PIC   X(4) VALUE "NOOK".
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION TRIM ( A2 ) TO X.
-           DISPLAY ">" X "<"
-           END-DISPLAY.
-           DISPLAY ">" FUNCTION TRIM ( A3 ) "<"
-           END-DISPLAY.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[>    <
-><
-])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION UPPER-CASE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(10) VALUE "a#b.c%d+e$".
-       01  Z   PIC   X(10).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION UPPER-CASE ( X ) TO Z.
-           IF Z NOT = "A#B.C%D+E$"
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION UPPER-CASE with reference modding])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  X   PIC   X(10) VALUE "a#b.c%d+e$".
-       01  Z   PIC   X(4).
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION UPPER-CASE ( X ) (1 : 3) TO Z.
-           IF Z NOT = "A#B "
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION VARIANCE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            PIC S9(4)V9(4) COMP-5.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION VARIANCE ( 3 -14 0 8 -3 ) TO Z.
-           IF Z NOT = 54.16
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION WHEN-COMPILED])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  compiled-datetime.
-           03  compiled-date.
-               05  millennium PIC X.
-               05  FILLER    PIC X(15).
-           03  timezone  PIC X(5).
-       PROCEDURE        DIVISION.
-           *> Check millennium.
-           MOVE FUNCTION WHEN-COMPILED TO compiled-datetime.
-           IF millennium NOT = "2"
-              DISPLAY "Millennium NOT OK: " millennium
-              END-DISPLAY
-           END-IF.
-
-           *> Check timezone.
-           IF timezone NOT = FUNCTION CURRENT-DATE (17:5)
-              DISPLAY "Timezone NOT OK: " timezone
-              END-DISPLAY
-           END-IF.
-
-           *> Check date format.
-           INSPECT compiled-date CONVERTING "0123456789"
-               TO "9999999999".
-           IF compiled-date NOT = ALL "9"
-               DISPLAY "Date format NOT OK: " compiled-date
-               END-DISPLAY
-           END-IF.
-
-           *> Check timezone format.
-           IF timezone NOT = "00000"
-               INSPECT timezone CONVERTING "0123456789"
-                   TO "9999999999"
-               IF timezone NOT = "+9999" AND "-9999"
-                   DISPLAY "Timezone format NOT OK: " timezone
-                   END-DISPLAY
-               END-IF
-           END-IF.
-           
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-AT_CLEANUP
-
-
-AT_SETUP([FUNCTION YEAR-TO-YYYY])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  Z            USAGE BINARY-LONG.
-       PROCEDURE        DIVISION.
-           MOVE FUNCTION YEAR-TO-YYYY ( 50 ) TO Z.
-           IF Z NOT = 2050
-              DISPLAY Z
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
 AT_CLEANUP
 
 
diff --git a/gcc/cobol/UAT/testsuite.at b/gcc/cobol/UAT/testsuite.at
index bac6ddf18e2e6038859f2f3d4fad215297bc8fcb..2b27be5d29c42408d0af83a569c4651056c1a693 100644
--- a/gcc/cobol/UAT/testsuite.at
+++ b/gcc/cobol/UAT/testsuite.at
@@ -48,9 +48,8 @@ m4_include([run_evaluate.at])
 AT_BANNER([FILE])
 m4_include([run_file.at])
 
-# functions  DEFERRED 
-# AT_BANNER([FUNCTIONS])
-# m4_include([functions.at])
+AT_BANNER([FUNCTIONS])
+m4_include([run_functions.at])
 
 AT_BANNER([FUNDAMENTAL])
 m4_include([run_fundamental.at])
diff --git a/gcc/cobol/UAT/testsuite.src/run_functions.at b/gcc/cobol/UAT/testsuite.src/run_functions.at
new file mode 100644
index 0000000000000000000000000000000000000000..b1b7ce6bae5c344dfb25a360457bada0c78535d2
--- /dev/null
+++ b/gcc/cobol/UAT/testsuite.src/run_functions.at
@@ -0,0 +1,3497 @@
+## Copyright (C) 2003-2012, 2014-2020 Free Software Foundation, Inc.
+## Written by Keisuke Nishida, Roger While, Simon Sobisch, Edward Hart
+##
+## This file is part of GnuCOBOL.
+##
+## The GnuCOBOL compiler is free software: you can redistribute it
+## and/or modify it under the terms of the GNU General Public License
+## as published by the Free Software Foundation, either version 3 of the
+## License, or (at your option) any later version.
+##
+## GnuCOBOL is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with GnuCOBOL.  If not, see <https://www.gnu.org/licenses/>.
+
+### GnuCOBOL Test Suite
+
+### ISO+IEC+1989-2002 15 Intrinsic Functions
+### ISO+IEC+1989-2002 9.4 User-Defined Functions
+
+AT_SETUP([FUNCTION ABS])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   S9(4)V9(4) VALUE -1.2345.
+       PROCEDURE        DIVISION.
+           COMPUTE X = FUNCTION ABS( X )
+           DISPLAY X
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[+0001.2345
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ACOS])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ACOS ( -0.2345 ) TO Z.
+           IF Z NOT = 1.807500521108243435101500438523210
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ANNUITY])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ANNUITY ( 3, 5 ) TO Z.
+           IF Z NOT = 3.002932551319648093841642228739002
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ASIN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ASIN ( -0.2345 ) TO Y.
+           IF Y NOT = -0.236704194313346815870178746883458
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ATAN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ATAN ( 1 ) TO Y.
+           IF Y NOT = 0.785398163397448309615660845819875
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION BYTE-LENGTH])
+AT_KEYWORDS([functions length])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC      X(4).
+       01  TEST-FLD     PIC S9(04)V9(08).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION BYTE-LENGTH ( TEST-FLD )   TO TEST-FLD.
+           DISPLAY "BYTE-LENGTH of PIC S9(04)V9(08) is " TEST-FLD
+           MOVE FUNCTION BYTE-LENGTH ( X )          TO TEST-FLD.
+           DISPLAY "BYTE-LENGTH of PIC X(4) is "       TEST-FLD
+           MOVE FUNCTION BYTE-LENGTH ( '00128' )    TO TEST-FLD
+           DISPLAY "BYTE-LENGTH of PIC '00128' is "    TEST-FLD
+           MOVE FUNCTION BYTE-LENGTH ( x'a0' )      TO TEST-FLD
+           DISPLAY "BYTE-LENGTH of PIC x'a0' is "      TEST-FLD
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [BYTE-LENGTH of PIC S9(04)V9(08) is +0012.00000000
+BYTE-LENGTH of PIC X(4) is +0004.00000000
+BYTE-LENGTH of PIC '00128' is +0005.00000000
+BYTE-LENGTH of PIC x'a0' is +0001.00000000
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION CHAR])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X            PIC   S9(4)V9(4) VALUE 108.
+       01  TEST-FLD.
+           05  TEST-DATA  PIC X(01).
+               88  VALID-DATA   VALUE 'k'.
+           05  TEST-UNSET PIC X VALUE '_'.
+               88  VALID-UNSET  VALUE '_'.
+       PROCEDURE        DIVISION.
+           STRING FUNCTION CHAR ( X )
+                  DELIMITED BY SIZE
+                  INTO TEST-FLD
+           END-STRING.
+           EVALUATE TRUE
+              WHEN NOT VALID-UNSET
+                 DISPLAY "FUNCTION result too long"
+                 END-DISPLAY
+              WHEN VALID-DATA
+                 CONTINUE
+              WHEN OTHER
+                 DISPLAY TEST-DATA
+                 END-DISPLAY
+           END-EVALUATE.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION COMBINED-DATETIME])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(04)V9(08).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION COMBINED-DATETIME ( 987, 345.6 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 987.003456
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION CONCAT / CONCATENATE])
+AT_KEYWORDS([functions])
+
+# note: CONCAT was added in COBOL 202x with GnuCOBOL's CONCATENATE
+#       as blueprint
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y            PIC   X(4).
+       01  TEST-FLD.
+           05  TEST-DATA  PIC X(14).
+               88  VALID-DATA   VALUE 'defxabczz55666'.
+           05  TEST-UNSET PIC X VALUE '_'.
+               88  VALID-UNSET  VALUE '_'.
+       PROCEDURE        DIVISION.
+           MOVE "defx" TO Y.
+           STRING FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
+                  DELIMITED BY SIZE
+                  INTO TEST-FLD
+           END-STRING.
+           EVALUATE TRUE
+              WHEN NOT VALID-UNSET
+                 DISPLAY "FUNCTION result too long"
+                 END-DISPLAY
+              WHEN TEST-DATA
+                <> FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
+                 DISPLAY "CONCAT issue, '" TEST-DATA
+                     "' vs. '"
+                     FUNCTION CONCAT ( Y "abc" "zz" "55" "666" ) "'"
+                 END-DISPLAY
+              WHEN VALID-DATA
+                 CONTINUE
+              WHEN OTHER
+                 DISPLAY TEST-DATA
+                 END-DISPLAY
+           END-EVALUATE.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION CONCAT with reference modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y            PIC X(4).
+       01  TEST-FLD     PIC X(9) VALUE SPACES.
+       PROCEDURE        DIVISION.
+           MOVE 'defx' TO Y.
+           MOVE FUNCTION CONCAT
+                ( Y "abc" "zz" "55" "666" ) (2 : 9)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 'efxabczz5'
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+
+# Invalid test.
+# prog.cob:18: ANY LENGTH valid only for 01 in LIKAGE SECTION of a contained program
+# "subprog", so called, is not contained.
+
+AT_SETUP([FUNCTION as CALL parameter BY CONTENT])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+
+       PROCEDURE DIVISION.
+       PROG-MAIN.
+           CALL "subprog" USING BY CONTENT 
+                                FUNCTION CONCAT("Abc" "D")
+           STOP RUN.
+
+       *> *****************************
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. subprog.
+
+       DATA DIVISION.
+       LINKAGE SECTION.
+       01 TESTING PIC X ANY LENGTH.
+
+       PROCEDURE DIVISION USING TESTING.
+       SUBPROG-MAIN.
+           DISPLAY TESTING
+           GOBACK.
+       END PROGRAM subprog.
+       END PROGRAM prog. *> bzzt
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [AbcD
+], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION COS])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y            PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION COS ( -0.2345 ) TO Y.
+           IF Y NOT = 0.972630641256258184713416962414561
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION CURRENT-DATE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       DATA             DIVISION.
+       WORKING-STORAGE SECTION.
+       01  TEST-FLD.
+           02  WS-YEAR            PIC 9(04).
+               88 VALID-YEAR      VALUE 1980 THRU 9999.
+           02  WS-MONTH           PIC 9(02).
+               88 VALID-MONTH     VALUE 01 THRU 12.
+           02  WS-DAY             PIC 9(02).
+               88 VALID-DAY       VALUE 01 THRU 31.
+           02  WS-HOUR            PIC 9(02).
+               88 VALID-HOUR      VALUE 00 THRU 23.
+           02  WS-MIN             PIC 9(02).
+               88 VALID-MIN       VALUE 00 THRU 59.
+           02  WS-SEVALIDD        PIC 9(02).
+               88 VALID-SEC       VALUE 00 THRU 59.
+           02  WS-HUNDSEC         PIC 9(02).
+               88 VALID-HUNDSEC   VALUE 00 THRU 99.
+           02  WS-GREENW          PIC X.
+               88 VALID-GREENW    VALUE "-", "+", "0".
+               88 ZERO-GREENW     VALUE "0".
+           02  WS-OFFSET          PIC 9(02).
+               88 VALID-OFFSET    VALUE 00 THRU 13.
+               88 ZERO-OFFSET     VALUE 00.
+           02  WS-OFFSET2         PIC 9(02).
+               88 VALID-OFFSET2   VALUE 00 THRU 59.
+               88 ZERO-OFFSET2    VALUE 00.
+           02  WS-UNSET           PIC X VALUE '_'.
+               88 VALID-UNSET     VALUE '_'.
+       PROCEDURE        DIVISION.
+           STRING FUNCTION CURRENT-DATE
+                  DELIMITED BY SIZE
+                  INTO TEST-FLD
+           END-STRING.
+           EVALUATE TRUE
+              WHEN NOT VALID-UNSET
+                 DISPLAY "FUNCTION result too long"
+                 END-DISPLAY
+              WHEN VALID-YEAR     AND
+                 VALID-MONTH    AND
+                 VALID-DAY      AND
+                 VALID-HOUR     AND
+                 VALID-MIN      AND
+                 VALID-SEC      AND
+                 VALID-HUNDSEC  AND
+                 VALID-GREENW   AND
+                 VALID-OFFSET   AND
+                 VALID-OFFSET2  AND
+                 VALID-UNSET    AND
+                 ((NOT ZERO-GREENW) OR (ZERO-OFFSET AND ZERO-OFFSET2))
+                 CONTINUE
+              WHEN OTHER
+                 DISPLAY "CURRENT-DATE with wrong format: "
+                         TEST-FLD (01:21)
+                 END-DISPLAY
+           END-EVALUATE.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION DATE-OF-INTEGER])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION DATE-OF-INTEGER ( 146000 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 20000925
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION DATE-TO-YYYYMMDD])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION DATE-TO-YYYYMMDD ( 981002, -10, 1994 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 018981002
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION DAY-OF-INTEGER])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION DAY-OF-INTEGER ( 146000 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 2000269
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION DAY-TO-YYYYDDD])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION DAY-TO-YYYYDDD ( 95005, -10, 2013 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 001995005
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION E])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE    FUNCTION E TO Y.
+           IF Y NOT = 2.718281828459045235360287471352662
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXCEPTION-FILE])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       INPUT-OUTPUT     SECTION.
+       FILE-CONTROL.
+           SELECT TEST-FILE ASSIGN "NOTEXIST"
+           FILE STATUS IS TEST-STATUS.
+       DATA             DIVISION.
+       FILE             SECTION.
+       FD  TEST-FILE.
+       01  TEST-REC      PIC X(4).
+       WORKING-STORAGE SECTION.
+       01  TEST-STATUS  PIC XX.
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION EXCEPTION-FILE '|'
+                   NO ADVANCING
+           END-DISPLAY.
+           OPEN INPUT TEST-FILE.
+           DISPLAY FUNCTION EXCEPTION-FILE
+                   NO ADVANCING
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[00|35TEST-FILE], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXCEPTION-LOCATION])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       INPUT-OUTPUT     SECTION.
+       FILE-CONTROL.
+           SELECT TEST-FILE ASSIGN "NOTEXIST"
+           FILE STATUS IS TEST-STATUS.
+       DATA             DIVISION.
+       FILE             SECTION.
+       FD  TEST-FILE.
+       01  TEST-REC      PIC X(4).
+       WORKING-STORAGE SECTION.
+       01  TEST-STATUS  PIC XX.
+       PROCEDURE        DIVISION.
+       DECLARATIVES.
+            EC-ALL-SECTION SECTION.
+            USE EC EC-ALL
+                RESUME NEXT STATEMENT.
+            END DECLARATIVES.
+       A00-MAIN SECTION.
+       A00.
+            SET LAST EXCEPTION TO OFF
+            DISPLAY "EXCEPTION-LOCATION before open attempt: "
+                   """" FUNCTION EXCEPTION-LOCATION """".
+       B00-MAIN SECTION.
+       B00.
+            SET LAST EXCEPTION TO OFF
+            OPEN INPUT TEST-FILE.
+            DISPLAY "EXCEPTION-LOCATION after open attempt: "
+                   """" FUNCTION EXCEPTION-LOCATION """".
+       C00-MAIN SECTION.
+       C00.
+            >>TURN EC-ALL CHECKING ON
+            SET LAST EXCEPTION TO OFF
+            OPEN INPUT TEST-FILE.
+            DISPLAY "EXCEPTION-LOCATION after CHECKED open attempt: "
+                   """" FUNCTION EXCEPTION-LOCATION """".
+            STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[EXCEPTION-LOCATION before open attempt: " "
+EXCEPTION-LOCATION after open attempt: "prog; B00 OF B00-MAIN; prog.cob:29 "
+EXCEPTION-LOCATION after CHECKED open attempt: "prog; C00 OF C00-MAIN; prog.cob:36 "
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXCEPTION-STATEMENT])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        INPUT-OUTPUT     SECTION.
+        FILE-CONTROL.
+        SELECT TEST-FILE ASSIGN "NOTEXIST"
+        FILE STATUS IS TEST-STATUS.
+        DATA             DIVISION.
+        FILE             SECTION.
+            FD  TEST-FILE.
+            01  TEST-REC      PIC X(4).
+        WORKING-STORAGE SECTION.
+            01  TEST-STATUS  PIC XX.
+        PROCEDURE        DIVISION.
+        DISPLAY "EXCEPTION-STATEMENT before bad OPEN: " 
+                """" FUNCTION EXCEPTION-STATEMENT """"
+        OPEN INPUT TEST-FILE.
+        DISPLAY "EXCEPTION-STATEMENT  after bad OPEN: " 
+                """" FUNCTION EXCEPTION-STATEMENT """"
+        STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[EXCEPTION-STATEMENT before bad OPEN: " "
+EXCEPTION-STATEMENT  after bad OPEN: "OPEN"
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXCEPTION-STATUS])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       INPUT-OUTPUT     SECTION.
+       FILE-CONTROL.
+           SELECT TEST-FILE ASSIGN "NOTEXIST"
+           FILE STATUS IS TEST-STATUS.
+       DATA             DIVISION.
+       FILE             SECTION.
+       FD  TEST-FILE.
+       01  TEST-REC      PIC X(4).
+       WORKING-STORAGE SECTION.
+       01  TEST-STATUS  PIC XX.
+       PROCEDURE        DIVISION.
+           DISPLAY "EXCEPTION STATUS before bad open: " 
+                    """" FUNCTION EXCEPTION-STATUS """"
+           OPEN INPUT TEST-FILE.
+           DISPLAY "EXCEPTION STATUS  after bad open: " 
+                    """" FUNCTION EXCEPTION-STATUS """"
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[EXCEPTION STATUS before bad open: " "
+EXCEPTION STATUS  after bad open: "EC-I-O-PERMANENT-ERROR"
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXP])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S99V9(31).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION EXP ( 3 ) TO Y.
+           IF Y NOT = 20.0855369231876677409285296545817
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION EXP10])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION EXP10 ( 4 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 000010000
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FACTORIAL])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FACTORIAL ( 6 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 000000720
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-CURRENT-DATE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Datetime-Format CONSTANT "YYYYMMDDThhmmss.ss+hhmm".
+       01  str             PIC X(25).
+       PROCEDURE        DIVISION.
+      *>   Test normal inputs.
+           MOVE FUNCTION FORMATTED-CURRENT-DATE ( Datetime-Format )
+             TO str
+           IF FUNCTION TEST-FORMATTED-DATETIME ( Datetime-Format, str)
+                   <> 0
+              DISPLAY "Test 1 failed: " str END-DISPLAY
+           END-IF.
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-DATE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(10).
+       PROCEDURE        DIVISION.
+      *>   Test normal inputs.
+           MOVE FUNCTION FORMATTED-DATE ( "YYYYMMDD", 1 ) TO str
+           IF str <> "16010101"
+              DISPLAY "Test 1 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATE ( "YYYY-MM-DD", 1 ) TO str
+           IF str <> "1601-01-01"
+              DISPLAY "Test 2 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATE ( "YYYYDDD", 1 ) TO str
+           IF str <> "1601001"
+              DISPLAY "Test 3 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATE ( "YYYY-DDD", 1 ) TO str
+           IF str <> "1601-001"
+              DISPLAY "Test 4 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 1 ) TO str
+           IF str <> "1601W011"
+              DISPLAY "Test 5 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATE ( "YYYY-Www-D", 1 ) TO str
+           IF str <> "1601-W01-1"
+              DISPLAY "Test 6 failed: " str END-DISPLAY
+           END-IF
+
+      *>   Test week number edge cases.
+      *>   For 2012-01-01.
+           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150115 ) TO str
+           IF str <> "2011W527"
+              DISPLAY "Test 7 failed: " str END-DISPLAY
+           END-IF
+
+      *>   and for 2013-12-30.
+           MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150844 ) TO str
+           IF str <> "2014W011"
+              DISPLAY "Test 8 failed: " str END-DISPLAY
+           END-IF
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-DATE with ref modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(04).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FORMATTED-DATE ("YYYYMMDD", 1) (3:4)
+             TO STR
+           IF STR NOT = '0101'
+              DISPLAY STR
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-DATETIME])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(40).
+       PROCEDURE        DIVISION.
+      *>   Test normal inputs.
+           MOVE FUNCTION FORMATTED-DATETIME
+                   ("YYYYMMDDThhmmss", 1, 45296)
+               TO str
+           IF str <> "16010101T123456"
+               DISPLAY "Test 1 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATETIME
+                   ("YYYY-MM-DDThh:mm:ss", 1, 45296)
+               TO str
+           IF str <> "1601-01-01T12:34:56"
+               DISPLAY "Test 2 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATETIME
+                    ("YYYYDDDThhmmss+hhmm", 1, 45296, -754)
+               TO str
+           IF str <> "1601001T123456-1234"
+               DISPLAY "Test 3 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-DATETIME
+                    ("YYYYDDDThhmmss+hhmm", 1, 45296)
+               TO str
+           IF str <> "1601001T123456+0000"
+               DISPLAY "Test 4 failed: " str END-DISPLAY
+           END-IF
+
+           *> Test underflow to next day due to offset
+           MOVE FUNCTION FORMATTED-DATETIME
+                    ("YYYYDDDThhmmss.sssssssssZ", 150846, 0,
+                     1)
+               TO str
+           IF str <> "2013365T235900.000000000Z"
+               DISPLAY "Test 5 failed: " str END-DISPLAY
+           END-IF
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-DATETIME with ref modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(04).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FORMATTED-DATETIME
+               ("YYYYMMDDThhmmss", 1, 1) (3:4)
+             TO STR
+           IF STR NOT = '0101'
+              DISPLAY STR
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-TIME])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(20).
+       PROCEDURE        DIVISION.
+      *>   Test normal inputs.
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss", 45296 ) TO str
+           IF str <> "123456"
+               DISPLAY "Test 1 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss", 45296 ) TO str
+           IF str <> "12:34:56"
+               DISPLAY "Test 2 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmssZ", 86399, -1 ) TO str
+           IF str <> "000059Z"
+               DISPLAY "Test 3 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ssZ", 45296)
+               TO str
+           IF str <> "12:34:56Z"
+               DISPLAY "Test 4 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss.ss", 45296.78 ) TO str
+           IF str <> "123456.78"
+               DISPLAY "Test 5 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss.ssZ", 0, 120)
+               TO str
+           IF str <> "22:00:00.00Z"
+               DISPLAY "Test 6 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 45296)
+               TO str
+           IF str <> "123456+0000"
+               DISPLAY "Test 7 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hh:mm:ss+hh:mm", 45296, 0 )
+               TO str
+           IF str <> "12:34:56+00:00"
+               DISPLAY "Test 8 failed: " str END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 45296, -754)
+               TO str
+           IF str <> "123456-1234"
+               DISPLAY "Test 9 failed: " str END-DISPLAY
+           END-IF
+
+      *>   Test with invalid/missing offset times.
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 1, 3000 )
+               TO str
+           DISPLAY "Test 10 " """" str """"
+           DISPLAY "Test 10 " """" FUNCTION EXCEPTION-STATUS """"
+           DISPLAY "Test 10 " """" FUNCTION EXCEPTION-LOCATION """"
+
+           MOVE FUNCTION FORMATTED-TIME ( "hhmmss+hhmm", 1, -3000 )
+               TO str
+           DISPLAY "Test 11 " """" str """"
+           DISPLAY "Test 11 " """" FUNCTION EXCEPTION-STATUS """"
+           DISPLAY "Test 11 " """" FUNCTION EXCEPTION-LOCATION """"
+
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [Test 10 "                    "
+Test 10 "EC-ARGUMENT-FUNCTION"
+Test 10 "prog; ; prog.cob:60 "
+Test 11 "                    "
+Test 11 "EC-ARGUMENT-FUNCTION"
+Test 11 "prog; ; prog.cob:66 "
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-TIME DP.COMMA])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+
+       ENVIRONMENT      DIVISION.
+       CONFIGURATION    SECTION.
+       SPECIAL-NAMES.
+           DECIMAL-POINT IS COMMA.
+
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(11).
+
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FORMATTED-TIME ("hh:mm:ss,ss", 45296) TO str
+           IF str <> "12:34:56,00"
+               DISPLAY "Test 1 failed: " str END-DISPLAY
+           END-IF
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FORMATTED-TIME with ref modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  str          PIC X(04).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FORMATTED-TIME ("hhmmss", 45296) (3:4)
+             TO STR
+           IF STR NOT = '3456'
+              DISPLAY STR
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION FRACTION-PART])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(04)V9(04).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION FRACTION-PART ( 3.12345 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = +0000.1234
+              DISPLAY 'FRACTION-PART ( +3.12345 ) wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION FRACTION-PART ( -3.12345 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = -0000.1234
+              DISPLAY 'FRACTION-PART ( -3.12345 ) wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+AT_SETUP([FUNCTION HEX-OF])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 PAC PIC 9(5) COMP-3 VALUE 12345.
+        PROCEDURE        DIVISION.
+            DISPLAY FUNCTION HEX-OF('Hello, world!')
+            DISPLAY FUNCTION HEX-OF(PAC)
+            END PROGRAM prog.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [48656C6C6F2C20776F726C6421
+12345F
+], [])
+AT_CLEANUP
+
+AT_SETUP([FUNCTION HIGHEST-ALGEBRAIC])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  F1           PIC S999.
+       01  F2           PIC S9(4) BINARY.
+       01  F3           PIC 99V9(3).
+       01  F4           PIC $**,**9.99BCR.
+       01  F5           PIC $**,**9.99.
+       01  F6           USAGE BINARY-CHAR SIGNED.
+       01  F7           USAGE BINARY-CHAR UNSIGNED.
+       01  F8           PIC 999PPP.
+       01  F9           PIC P99.
+       01  TEST-FLD     PIC S9(08)V9(04).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F1)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 999
+              DISPLAY "Test 1 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F2)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 9999
+              DISPLAY "Test 2 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F3)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 99.999
+              DISPLAY "Test 3 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F4)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 99999.99
+              DISPLAY "Test 4 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F5)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 99999.99
+              DISPLAY "Test 5 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F6)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 127
+              DISPLAY "Test 6 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F7)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 255
+              DISPLAY "Test 7 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F8)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 999000
+              DISPLAY "Test 7 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION HIGHEST-ALGEBRAIC (F9)
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 0.099
+              DISPLAY "Test 7 fail: " TEST-FLD
+              END-DISPLAY
+           END-IF.
+
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+AT_SETUP([FUNCTION INTEGER])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X            PIC   S9(4)V9(4) VALUE -1.5.
+       01  Y            PIC   9(12)      VALUE 600851475143.
+       01  TEST-FLD     PIC S9(14)V9(08).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION INTEGER ( X )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = -2
+              DISPLAY 'INTEGER ( X ) wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION INTEGER ( Y / 71 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 8462696833
+              DISPLAY 'INTEGER ( Y / 71 ) wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION INTEGER-OF-DATE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION INTEGER-OF-DATE ( 20000925 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 000146000
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION INTEGER-OF-DAY])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  TEST-FLD     PIC S9(09)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION INTEGER-OF-DAY ( 2000269 )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = 000146000
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION INTEGER-OF-FORMATTED-DATE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  day-int      PIC 9(9).
+
+       PROCEDURE        DIVISION.
+           *> The date 2013-12-30 is used as it can also be used to
+           *> check the conversion of dates in week form.
+           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+                   ("YYYY-MM-DD", "2013-12-30")
+               TO day-int
+           IF day-int <> 150844
+               DISPLAY "Test 1 failed: " day-int END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+                   ("YYYY-DDD", "2013-364")
+               TO day-int
+           IF day-int <> 150844
+               DISPLAY "Test 2 failed: " day-int END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+                   ("YYYY-Www-D", "2014-W01-1")
+               TO day-int
+           IF day-int <> 150844
+               DISPLAY "Test 3 failed: " day-int END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+                   ("YYYY-MM-DDThh:mm:ss", "2013-12-30T12:34:56")
+               TO day-int
+           IF day-int <> 150844
+               DISPLAY "Test 4 failed: " day-int END-DISPLAY
+           END-IF
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION INTEGER-PART])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   S9(4)V9(4) VALUE -1.5.
+       01  TEST-FLD     PIC S9(04)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION INTEGER-PART ( X )
+             TO TEST-FLD.
+           IF TEST-FLD NOT = -1
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LENGTH])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC      S9(4)V9(4) VALUE -1.5.
+       01  TEST-FLD     PIC S9(04)V9(02).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LENGTH ( X )  TO TEST-FLD
+           IF TEST-FLD NOT = 8
+              DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION LENGTH ( '00128' )
+             TO TEST-FLD
+           IF TEST-FLD NOT = 5
+              DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION LENGTH ( x'a0' )
+             TO TEST-FLD
+           IF TEST-FLD NOT = 1
+              DISPLAY 'LENGTH x"a0" wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF
+
+           MOVE FUNCTION LENGTH ( z'a0' )
+             TO TEST-FLD
+           IF TEST-FLD NOT = 3
+              DISPLAY 'LENGTH z"a0" wrong: ' TEST-FLD
+              END-DISPLAY
+           END-IF
+
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOCALE-COMPARE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           IF FUNCTION LOCALE-COMPARE ("A", "B") NOT = "<"
+              DISPLAY "Test 1 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOCALE-COMPARE ("B", "A") NOT = ">"
+              DISPLAY "Test 2 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOCALE-COMPARE ("A", "A") NOT = "="
+              DISPLAY "Test 3 fail"
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOCALE-DATE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(32)   VALUE SPACES.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOCALE-DATE ( "19630302" ) TO X.
+           IF X NOT = SPACES
+                DISPLAY "OK"
+                END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[OK
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOCALE-TIME])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(32)   VALUE SPACES.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOCALE-TIME ( "233012" ) TO X.
+           IF X NOT = SPACES
+                DISPLAY "OK"
+                END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[OK
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOCALE-TIME-FROM-SECONDS])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(32)   VALUE SPACES.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOCALE-TIME-FROM-SECONDS ( 33012 ) TO X.
+           IF X NOT = SPACES
+              DISPLAY "OK"
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[OK
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOG])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOG ( 1.5 ) TO Y.
+           IF Y NOT = 0.405465108108164381978013115464349
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOG10])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOG10 ( 1.5 ) TO Y.
+           IF Y NOT = 0.176091259055681242081289008530622
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOWER-CASE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X            PIC X(10) VALUE "A#B.C%D+E$".
+       01  TEST-FLD     PIC X(12) VALUE ALL '_'.
+       PROCEDURE        DIVISION.
+           STRING FUNCTION LOWER-CASE ( X )
+                  DELIMITED BY SIZE
+                  INTO TEST-FLD
+           END-STRING
+           IF TEST-FLD NOT = 'a#b.c%d+e$__'
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOWER-CASE with reference modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X            PIC X(10) VALUE "A#B.C%D+E$".
+       01  TEST-FLD     PIC X(03).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION LOWER-CASE ( X ) (1 : 3)
+             TO TEST-FLD
+           IF TEST-FLD NOT = 'a#b'
+              DISPLAY TEST-FLD
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION LOWEST-ALGEBRAIC])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  F1           PIC S999.
+       01  F2           PIC S9(4) BINARY.
+       01  F3           PIC 99V9(3).
+       01  F4           PIC $**,**9.99BCR.
+       01  F5           PIC $**,**9.99.
+       01  F6           USAGE BINARY-CHAR SIGNED.
+       01  F7           USAGE BINARY-CHAR UNSIGNED.
+       01  F8           PIC S999PPP.
+       01  F9           PIC SP99.
+       PROCEDURE        DIVISION.
+           IF FUNCTION LOWEST-ALGEBRAIC (F1) NOT = -999
+              DISPLAY "Test 1 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F2) NOT = -9999
+              DISPLAY "Test 2 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F3) NOT = 0
+              DISPLAY "Test 3 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F4) NOT = -99999.99
+              DISPLAY "Test 4 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F5) NOT = 0
+              DISPLAY "Test 5 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F6) NOT = -128
+              DISPLAY "Test 6 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F7) NOT = 0
+              DISPLAY "Test 7 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F8) NOT = -999000
+              DISPLAY "Test 8 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION LOWEST-ALGEBRAIC (F9) NOT = -0.099
+              DISPLAY "Test 9 fail"
+              END-DISPLAY
+           END-IF.
+
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MAX])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION MAX ( 3 -14 0 8 -3 )
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[8
+], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MEAN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 result        PIC S999V999.
+       PROCEDURE        DIVISION.
+           COMPUTE result = FUNCTION MEAN ( 3 -14 0 8 -3 )
+           DISPLAY result
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[-001.200
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MEDIAN])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION MEDIAN ( 3 -14 0 8 -3 )
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[0
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MIDRANGE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC S999V999.
+       PROCEDURE        DIVISION.
+           COMPUTE RESULT = FUNCTION MIDRANGE ( 3 -14 0 8 -3 )
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[-003.000
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MIN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION MIN ( 3 -14 0 8 -3 )
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[-14
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MOD (valid)])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y            PIC 9(12)      VALUE 600851475143.
+       01  R            PIC S9(4)V9(4) VALUE 0.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION MOD ( -11 5 ) TO R
+           IF R NOT = 4
+              DISPLAY 'first one wrong: ' R
+              END-DISPLAY
+           END-IF
+           MOVE FUNCTION MOD ( Y, 71 ) TO R
+           IF R NOT = 0
+              DISPLAY 'second one wrong: ' R
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION MOD (invalid)])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            PIC 9          VALUE 0.
+       01  R            PIC S9(4)V9(4) VALUE 1.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION MOD ( -11 Z ) TO R
+           IF FUNCTION EXCEPTION-STATUS
+           NOT = 'EC-ARGUMENT-FUNCTION'
+              DISPLAY 'Wrong/missing exception: '
+                      FUNCTION EXCEPTION-STATUS
+              END-DISPLAY
+           END-IF
+           IF R NOT = 0
+              DISPLAY 'result is not zero: ' R
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+
+
+AT_SETUP([FUNCTION NUMVAL])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X1  PIC   X(12) VALUE " -9876.1234 ".
+       01  X2  PIC   X(18) VALUE " 19876.1234 CR".
+       01  N   PIC   s9(5)v9(5).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION NUMVAL ( X1 ) TO N
+           IF N NOT = -9876.1234
+              DISPLAY N
+              END-DISPLAY
+           END-IF
+           MOVE FUNCTION NUMVAL ( X2 ) TO N
+           IF N NOT = -19876.1234
+              DISPLAY N
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION NUMVAL-C])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X1  PIC   X(14) VALUE " -% 9876.1234 ".
+       01  X2  PIC   X(20) VALUE " % 19,876.1234 DB".
+       01  N   PIC   s9(5)v9(5).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
+           IF N NOT = -9876.1234
+              DISPLAY N
+              END-DISPLAY
+           END-IF
+           MOVE FUNCTION NUMVAL-C ( X2 , "%" ) TO N
+           IF N NOT = -19876.1234
+              DISPLAY N
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION NUMVAL-C DP.COMMA])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       CONFIGURATION    SECTION.
+       SPECIAL-NAMES.
+           DECIMAL-POINT IS COMMA
+           .
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X1  PIC   X(20) VALUE " % 19.876,1234 DB".
+       01  N   PIC   s9(5)v9(5).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
+           IF N NOT = -19876,1234
+              DISPLAY N
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION NUMVAL-F])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01   result      PIC S9(8)V9(9) COMP-5.
+       01   vector.     
+        05  vd.
+          10  FILLER   PIC  X(32)  VALUE   " - 123.456 E + 2 ".
+          10  FILLER   PIC  X(32)  VALUE   "123".
+          10  FILLER   PIC  X(32)  VALUE   ".456".
+          10  FILLER   PIC  X(32)  VALUE   "123.456".
+          10  FILLER   PIC  X(32)  VALUE   "-123.456".
+          10  FILLER   PIC  X(32)  VALUE   "123.456E2".
+          10  FILLER   PIC  X(32)  VALUE   "-123.456E-2".
+          10  FILLER   PIC  X(32)  VALUE   "DONE".
+          10  FILLER   PIC  X(32)  OCCURS 100 TIMES.
+        05  datat REDEFINES vd PIC X(32) OCCURS 100 TIMES INDEXED BY I.
+       PROCEDURE        DIVISION.
+            SET I TO 1
+            PERFORM UNTIL datat(I) EQUALS "DONE"
+                DISPLAY """"datat(I)"""" SPACE WITH NO ADVANCING
+                MOVE FUNCTION NUMVAL-F(datat(I)) TO result
+                DISPLAY result
+                ADD 1 TO I
+                END-PERFORM.
+            STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[" - 123.456 E + 2                " -00012345.600000000
+"123                             " +00000123.000000000
+".456                            " +00000000.456000000
+"123.456                         " +00000123.456000000
+"-123.456                        " -00000123.456000000
+"123.456E2                       " +00012345.600000000
+"-123.456E-2                     " -00000001.234560000
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ORD])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 999.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ORD ( "k" ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[108
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ORD-MAX])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 999.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ORD-MAX ( 3 -14 0 8 -3 ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[004
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION ORD-MIN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 999.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION ORD-MIN ( 3 -14 0 8 -3 ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[002
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION PI])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   9V9(32).
+       PROCEDURE        DIVISION.
+           MOVE    FUNCTION PI TO Y.
+           IF Y NOT = 3.14159265358979323846264338327950
+              DISPLAY Y
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION PRESENT-VALUE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 9(5)V9(4).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION PRESENT-VALUE ( 3 2 1 ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[00000.5625
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION RANDOM])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S99V99   COMP VALUE -1.0.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION RANDOM ( ) TO Y.
+           IF Y < 0
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION RANGE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            PIC S9(4)V9(4) COMP-5.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION RANGE ( 3 -14 0 8 -3 ) TO Z.
+           IF Z NOT = 22
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION REM (valid)])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  R            PIC S9(4)V9(4) COMP-5 VALUE 0.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION REM ( -11 5 ) TO R
+           IF R NOT = -1
+              DISPLAY R END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION REM (invalid)])
+AT_KEYWORDS([functions exceptions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  R            PIC S9(4)V9(4) COMP-5 VALUE 4.1.
+       01  Z            PIC 9 COMP-5 VALUE 0.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION REM ( -11 Z ) TO R
+           IF FUNCTION EXCEPTION-STATUS
+           NOT = 'EC-ARGUMENT-FUNCTION'
+              DISPLAY 'Wrong/missing exception: '
+                      FUNCTION EXCEPTION-STATUS
+              END-DISPLAY
+           END-IF
+           IF R NOT = 0
+              DISPLAY 'result is not zero: ' R
+              END-DISPLAY
+           END-IF
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION REVERSE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(10) VALUE "A#B.C%D+E$".
+       01  Z   PIC   X(10).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION REVERSE ( X ) TO Z.
+           IF Z NOT = "$E+D%C.B#A"
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION REVERSE with reference modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(10) VALUE "A#B.C%D+E$".
+       01  Z   PIC   X(10).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION REVERSE ( X ) (1 : 4) TO Z.
+           IF Z NOT = "$E+D      "
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SECONDS-FROM-FORMATTED-TIME])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  result       PIC 9(8)V9(9) COMP-5.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("hhmmss", "010203")
+               TO result.
+           IF result NOT = 3723
+                   DISPLAY "Test 1 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("hh:mm:ss", "01:02:03")
+               TO result.
+           IF result NOT = 3723
+                   DISPLAY "Test 2 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("hhmmss.ssssssss", "010203.04050607")
+               TO result.
+           IF result NOT = 3723.04050607
+                   DISPLAY "Test 3 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("hhmmssZ", "010203Z")
+               TO result.
+           IF result NOT = 3723
+                   DISPLAY "Test 4 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("hhmmss+hhmm", "010203+0405")
+               TO result.
+           IF result NOT = 3723
+                   DISPLAY "Test 5 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+                    ("YYYYMMDDThhmmss", "16010101T010203")
+               TO result.
+           IF result NOT = 3723
+                   DISPLAY "Test 6 failed: " result
+                   END-DISPLAY
+           END-IF.
+
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SECONDS-PAST-MIDNIGHT])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC      9(8)   COMP-5.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SECONDS-PAST-MIDNIGHT TO Y.
+           IF Y NOT < 86402
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SIGN])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            USAGE BINARY-LONG SIGNED.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SIGN ( 3.12345 ) TO Z.
+           IF Z NOT = 1
+              DISPLAY "Sign 1 " Z
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION SIGN ( -0.0 ) TO Z.
+           IF Z NOT = 0
+              DISPLAY "Sign 2 " Z
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION SIGN ( 0.0 ) TO Z.
+           IF Z NOT = 0
+              DISPLAY "Sign 3 " Z
+              END-DISPLAY
+           END-IF.
+           MOVE FUNCTION SIGN ( -3.12345 ) TO Z.
+           IF Z NOT = -1
+              DISPLAY "Sign 4 " Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SIN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SIN ( 1.5 ) TO Y.
+           IF Y NOT = 0.997494986604054430941723371141487
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SQRT])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(33).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SQRT ( 1.5 ) TO Y.
+           IF Y NOT = 1.224744871391589049098642037352945
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION STANDARD-DEVIATION])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S9V9(32).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION STANDARD-DEVIATION ( 3 -14 0 8 -3 ) TO Y.
+           IF Y NOT = 7.35934779718963954877237043574538
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SUBSTITUTE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   X(24).
+       PROCEDURE        DIVISION.
+           MOVE "abc111444555defxxabc" TO Y
+           DISPLAY FUNCTION TRIM (FUNCTION SUBSTITUTE ( Y "abc" "zz" "55" "666" ))
+           
+           MOVE "bobBobjimJimbobBobjimJim" TO Y
+           DISPLAY FUNCTION SUBSTITUTE ( Y "bob" "FILLER" "jim" "Z")
+      
+           MOVE "bobBobjimJimbobBobjimJim" TO Y
+           DISPLAY FUNCTION SUBSTITUTE ( Y FIRST "bob" "FILLER" "jim" "Z")
+      
+           MOVE "bobBobjimJimbobBobjimJim" TO Y
+           DISPLAY FUNCTION SUBSTITUTE ( Y LAST "bob" "FILLER" "jim" "Z")
+
+           MOVE "bobBobjimJimbobBobjimJim" TO Y
+           DISPLAY FUNCTION SUBSTITUTE ( Y ANYCASE "bob" "FILLER" ANYCASE "jim" "Z")
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], 
+[zz1114446665defxxzz
+FILLERBobZJimFILLERBobZJim
+FILLERBobZJimbobBobZJim
+bobBobZJimFILLERBobZJim
+FILLERFILLERZZFILLERFILLERZZ
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SUBSTITUTE with reference modding])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   X(20).
+       01  Z   PIC   X(20).
+       PROCEDURE        DIVISION.
+           MOVE "abc111444555defxxabc" TO Y.
+           MOVE FUNCTION SUBSTITUTE
+                   ( Y "abc" "zz" "55" "666" ) (2 : 9)
+                TO Z.
+           IF Z NOT = "z11144466"
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SUBSTITUTE-CASE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   X(20).
+       01  Z   PIC   X(20).
+       PROCEDURE        DIVISION.
+           MOVE "ABC111444555defxxabc" TO Y.
+           MOVE FUNCTION SUBSTITUTE (Y anycase "abc" "zz" 
+                                       anycase "55" "666")
+                TO Z.
+           IF Z NOT = "zz1114446665defxxzz"
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SUBSTITUTE-CASE with reference mod])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   X(20).
+       01  Z   PIC   X(20).
+       PROCEDURE        DIVISION.
+           MOVE "abc111444555defxxabc" TO Y.
+           MOVE FUNCTION SUBSTITUTE
+                   ( Y anycase "ABC" "zz" 
+                       anycase "55" "666" ) (2 : 9)
+                TO Z.
+           IF Z NOT = "z11144466"
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION SUM])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            USAGE BINARY-LONG.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION SUM ( 3 -14 0 8 -3 ) TO Z.
+           IF Z NOT = -6
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TAN])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Y   PIC   S99V9(31).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION TAN ( 1.5 ) TO Y.
+           IF Y NOT = 14.1014199471717193876460836519877
+                   DISPLAY Y
+                   END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-DATE-YYYYMMDD])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 999.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION TEST-DATE-YYYYMMDD ( 20020231 ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[003
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-DAY-YYYYDDD])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 RESULT PIC 999.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION TEST-DAY-YYYYDDD ( 2002400 ) TO RESULT
+           DISPLAY RESULT
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[002
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with dates])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        PROCEDURE        DIVISION.
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "16010101") <> 0
+                DISPLAY "Test 1 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYY-MM-DD", "1601-01-01") <> 0
+                DISPLAY "Test 2 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYDDD", "1601001") <> 0
+                DISPLAY "Test 3 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYY-DDD", "1601-001") <> 0
+                DISPLAY "Test 4 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "1601W011") <> 0
+                DISPLAY "Test 5 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYY-Www-D", "1601-W01-1") <> 0
+                DISPLAY "Test 6 failed" END-DISPLAY
+            END-IF
+
+
+            *> How will this work with zero-length items?
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "1") <> 2
+                DISPLAY "Test 7 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "160A0101") <> 4
+                DISPLAY "Test 8 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "00000101") <> 1
+                DISPLAY "Test 9 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "16000101") <> 4
+                DISPLAY "Test 10 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "16010001") <> 6
+                DISPLAY "Test 11 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "16011301") <> 6
+                DISPLAY "Test 12 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "16010190") <> 7
+                DISPLAY "Test 13 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "18000229") <> 8
+                DISPLAY "Test 14 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYY-MM-DD", "1601 01 01") <> 5
+                DISPLAY "Test 15 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "160101010") <> 9
+                DISPLAY "Test 16 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "1601A011") <> 5
+                DISPLAY "Test 17 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "1601W531") <> 7
+                DISPLAY "Test 18 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "1601W601") <> 6
+                DISPLAY "Test 19 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "2009W531") <> 0
+                DISPLAY "Test 20 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYWwwD", "1601W018") <> 8
+                DISPLAY "Test 21 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYDDD", "1601366") <> 7
+                DISPLAY "Test 22 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYDDD", "1601370") <> 6
+                DISPLAY "Test 23 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYDDD", "1601400") <> 5
+                DISPLAY "Test 24 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "01") <> 1
+                DISPLAY "Test 25 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                   ("YYYYMMDD", "1601010") <> 8
+                DISPLAY "Test 26 failed" END-DISPLAY
+            END-IF
+
+            STOP RUN
+            .
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with times])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        PROCEDURE        DIVISION.
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss.sssssssssZ", "000000.000000000Z") <> 0
+                DISPLAY "Test 1 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hh:mm:ss.sssssssssZ", "00:00:00.000000000Z") <> 0
+                DISPLAY "Test 2 failed" END-DISPLAY
+            END-IF
+            *> 0 instead of +/- valid in sending fields with offset of zero.
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss.sssssssss+hhmm", "000000.00000000000000")
+                    <> 0
+                DISPLAY "Test 3 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hh:mm:ss.sssssssss+hh:mm",
+                    "00:00:00.000000000+00:00")
+                    <> 0
+                DISPLAY "Test 4 failed" END-DISPLAY
+            END-IF
+
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss", "300000") <> 1
+                DISPLAY "Test 5 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss", "250000") <> 2
+                DISPLAY "Test 6 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss", "006000") <> 3
+                DISPLAY "Test 7 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss", "000060") <> 5
+                DISPLAY "Test 8 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hh:mm:ss", "00-00-00") <> 3
+                DISPLAY "Test 9 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss.ss", "000000,00") <> 7
+                DISPLAY "Test 10 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss+hhmm", "000000 0000") <> 7
+                DISPLAY "Test 11 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss+hhmm", "00000000001") <> 11
+                DISPLAY "Test 12 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmssZ", "000000A") <> 7
+                DISPLAY "Test 13 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss", SPACE) <> 1
+                DISPLAY "Test 14 failed" END-DISPLAY
+            END-IF
+
+            STOP RUN
+            .
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME with datetimes])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        77 RESULT        PIC 9(02).
+        PROCEDURE        DIVISION.
+            MOVE FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss", "16010101T000000")
+              TO RESULT
+            IF RESULT <> 0
+               DISPLAY "Test 1 failed: " RESULT END-DISPLAY
+            END-IF
+            MOVE FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYY-MM-DDThh:mm:ss.sssssssss+hh:mm",
+                    "1601-01-01T00:00:00.000000000+00:00")
+              TO RESULT
+            IF RESULT <> 0
+               DISPLAY "Test 2 failed: " RESULT END-DISPLAY
+            END-IF
+
+            MOVE FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss", "16010101 000000")
+              TO RESULT
+            IF RESULT <> 9
+               DISPLAY "Test 3 failed: " RESULT END-DISPLAY
+            END-IF
+            MOVE FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss", SPACE)
+              TO RESULT
+            IF RESULT <> 1
+               DISPLAY "Test 4 failed: " RESULT END-DISPLAY
+            END-IF
+            MOVE FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss", "16010101T      ")
+              TO RESULT
+            IF RESULT <> 10
+               DISPLAY "Test 5 failed: " RESULT END-DISPLAY
+            END-IF
+
+            STOP RUN
+            .
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-FORMATTED-DATETIME DP.COMMA])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        PROCEDURE        DIVISION.
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss,ss", "000000,00") <> 0
+                DISPLAY "Test 1 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss,ss", "16010101T000000,00") <> 0
+                DISPLAY "Test 2 failed" END-DISPLAY
+            END-IF
+
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("hhmmss,ss", "000000.00") <> 7
+                DISPLAY "Test 3 failed" END-DISPLAY
+            END-IF
+            IF FUNCTION TEST-FORMATTED-DATETIME
+                    ("YYYYMMDDThhmmss,ss", "16010101T000000.00") <> 16
+                DISPLAY "Test 4 failed" END-DISPLAY
+            END-IF
+
+            STOP RUN
+            .
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-NUMVAL])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           IF FUNCTION TEST-NUMVAL ("+ 1")     NOT = 0
+              DISPLAY "Test 1  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL (" + 1")    NOT = 0
+              DISPLAY "Test 2  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("- 1")     NOT = 0
+              DISPLAY "Test 3  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL (" - 1")    NOT = 0
+              DISPLAY "Test 4  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("+- 1")    NOT = 2
+              DISPLAY "Test 5  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1 +")     NOT = 0
+              DISPLAY "Test 6  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1 -")     NOT = 0
+              DISPLAY "Test 7  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1 +-")    NOT = 4
+              DISPLAY "Test 8  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1 -+")    NOT = 4
+              DISPLAY "Test 9  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("+ 1.1")   NOT = 0
+              DISPLAY "Test 10 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("- 1.1")   NOT = 0
+              DISPLAY "Test 11 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 +")   NOT = 0
+              DISPLAY "Test 12 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 -")   NOT = 0
+              DISPLAY "Test 13 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 CR")  NOT = 0
+              DISPLAY "Test 14 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 DB")  NOT = 0
+              DISPLAY "Test 15 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 -CR") NOT = 6
+              DISPLAY "Test 16 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 +DB") NOT = 6
+              DISPLAY "Test 17 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("1.1 CDB") NOT = 6
+              DISPLAY "Test 18 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("+1.1 CR") NOT = 6
+              DISPLAY "Test 19 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL ("+      ") NOT = 8
+              DISPLAY "Test 20 fail"
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TEST-NUMVAL-C])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           IF FUNCTION TEST-NUMVAL-C ("+ 1")     NOT = 0
+              DISPLAY "Test 1  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C (" + 1")    NOT = 0
+              DISPLAY "Test 2  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("- 1")     NOT = 0
+              DISPLAY "Test 3  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C (" - 1")    NOT = 0
+              DISPLAY "Test 4  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("+- 1")    NOT = 2
+              DISPLAY "Test 5  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1 +")     NOT = 0
+              DISPLAY "Test 6  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1 -")     NOT = 0
+              DISPLAY "Test 7  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1 +-")    NOT = 4
+              DISPLAY "Test 8  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1 -+")    NOT = 4
+              DISPLAY "Test 9  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("+ 1.1")   NOT = 0
+              DISPLAY "Test 10 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("- 1.1")   NOT = 0
+              DISPLAY "Test 11 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1.1 +")   NOT = 0
+              DISPLAY "Test 12 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1.1 -")   NOT = 0
+              DISPLAY "Test 13 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1.1 CR")  NOT = 0
+              DISPLAY "Test 14 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1.1 DB")  NOT = 0
+              DISPLAY "Test 15 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("1.1 -CR") NOT = 6
+              DISPLAY "Test 16 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("+ $1.1 ") NOT = 0
+              DISPLAY "Test 17 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("- $1.1 ") NOT = 0
+              DISPLAY "Test 18 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("+ X1.1 ", "X") NOT = 0
+              DISPLAY "Test 19 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-C ("- X1.1 ", "X") NOT = 0
+              DISPLAY "Test 20 fail"
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+AT_SETUP([FUNCTION TEST-NUMVAL-F])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       PROCEDURE        DIVISION.
+           IF FUNCTION TEST-NUMVAL-F ("+ 1")     NOT = 0
+              DISPLAY "Test 1  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F (" + 1")    NOT = 0
+              DISPLAY "Test 2  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("- 1")     NOT = 0
+              DISPLAY "Test 3  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F (" - 1")    NOT = 0
+              DISPLAY "Test 4  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("+- 1")    NOT = 2
+              DISPLAY "Test 5  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1 +")     NOT = 3
+              DISPLAY "Test 6  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1 -")     NOT = 3
+              DISPLAY "Test 7  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1 +-")    NOT = 3
+              DISPLAY "Test 8  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1 -+")    NOT = 3
+              DISPLAY "Test 9  fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("+ 1.1")   NOT = 0
+              DISPLAY "Test 10 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("- 1.1")   NOT = 0
+              DISPLAY "Test 11 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 +")   NOT = 5
+              DISPLAY "Test 12 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 -")   NOT = 5
+              DISPLAY "Test 13 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1   ")  NOT = 0
+              DISPLAY "Test 14 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1   ")  NOT = 0
+              DISPLAY "Test 15 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 -CR") NOT = 5
+              DISPLAY "Test 16 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 E+1") NOT = 0
+              DISPLAY "Test 17 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 E -1") NOT = 0
+              DISPLAY "Test 18 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("1.1 EE") NOT = 6
+              DISPLAY "Test 19 fail"
+              END-DISPLAY
+           END-IF.
+           IF FUNCTION TEST-NUMVAL-F ("+1.1 E+01") NOT = 0
+              DISPLAY "Test 20 fail"
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TRIM])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(12) VALUE " a#b.c%d+e$ ".
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION TRIM ( X )
+           END-DISPLAY.
+           DISPLAY FUNCTION TRIM ( X TRAILING )
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[a#b.c%d+e$
+ a#b.c%d+e$
+])
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TRIM with reference modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(12) VALUE " a#b.c%d+e$ ".
+       PROCEDURE        DIVISION.
+           DISPLAY FUNCTION TRIM ( X ) (2 : 3)
+           END-DISPLAY.
+           DISPLAY FUNCTION TRIM ( X TRAILING ) (2 : 3)
+           END-DISPLAY.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[#b.
+a#b
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION TRIM zero length])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  A2   PIC   X(2) VALUE "  ".
+       01  A3   PIC   X(3) VALUE "   ".
+       01  X   PIC   X(4) VALUE "NOOK".
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION TRIM ( A2 ) TO X.
+           DISPLAY ">" X "<"
+           END-DISPLAY.
+           DISPLAY ">" FUNCTION TRIM ( A3 ) "<"
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[>    <
+><
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION UPPER-CASE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(10) VALUE "a#b.c%d+e$".
+       01  Z   PIC   X(10).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION UPPER-CASE ( X ) TO Z.
+           IF Z NOT = "A#B.C%D+E$"
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION UPPER-CASE with reference modding])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  X   PIC   X(10) VALUE "a#b.c%d+e$".
+       01  Z   PIC   X(4).
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION UPPER-CASE ( X ) (1 : 3) TO Z.
+           IF Z NOT = "A#B "
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION VARIANCE])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            PIC S9(4)V9(4) COMP-5.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION VARIANCE ( 3 -14 0 8 -3 ) TO Z.
+           IF Z NOT = 54.16
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+
+AT_CLEANUP
+
+
+AT_SETUP([FUNCTION WHEN-COMPILED])
+AT_KEYWORDS([functions])
+
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  compiled-datetime.
+           03  compiled-date.
+               05  millennium PIC X.
+               05  FILLER    PIC X(15).
+           03  timezone  PIC X(5).
+       PROCEDURE        DIVISION.
+           *> Check millennium.
+           MOVE FUNCTION WHEN-COMPILED TO compiled-datetime.
+           IF millennium NOT = "2"
+              DISPLAY "Millennium NOT OK: " millennium
+              END-DISPLAY
+           END-IF.
+
+           *> Check timezone.
+           IF timezone NOT = FUNCTION CURRENT-DATE (17:5)
+              DISPLAY "Timezone NOT OK: " timezone
+              END-DISPLAY
+           END-IF.
+
+           *> Check date format.
+           INSPECT compiled-date CONVERTING "0123456789"
+               TO "9999999999".
+           IF compiled-date NOT = ALL "9"
+               DISPLAY "Date format NOT OK: " compiled-date
+               END-DISPLAY
+           END-IF.
+
+           *> Check timezone format.
+           IF timezone NOT = "00000"
+               INSPECT timezone CONVERTING "0123456789"
+                   TO "9999999999"
+               IF timezone NOT = "+9999" AND "-9999"
+                   DISPLAY "Timezone format NOT OK: " timezone
+                   END-DISPLAY
+               END-IF
+           END-IF.
+           
+           STOP RUN.
+])
+
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+AT_SETUP([FUNCTION YEAR-TO-YYYY])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  Z            USAGE BINARY-LONG.
+       PROCEDURE        DIVISION.
+           MOVE FUNCTION YEAR-TO-YYYY ( 50 ) TO Z.
+           IF Z NOT = 2050
+              DISPLAY Z
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+AT_SETUP([UDF RETURNING group and PIC 9(5)])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       FUNCTION-ID.     COPYPAR.
+       DATA             DIVISION.
+       LINKAGE          SECTION.
+       01   PARSA.
+         02 PAR1 PICTURE X(32).
+         02 PAR2 PICTURE X(32).
+       01   PARSB.
+         02 PAR1 PICTURE X(32).
+         02 PAR2 PICTURE X(32).
+       PROCEDURE DIVISION USING PARSA RETURNING PARSB.
+           MOVE PARSA TO PARSB
+           DISPLAY """" PARSB """"
+           GOBACK.
+       END FUNCTION COPYPAR.
+       IDENTIFICATION   DIVISION.
+       FUNCTION-ID.     COPYPAR2.
+       DATA             DIVISION.
+       LINKAGE          SECTION.
+       01   PARSB PIC 99999.
+       01   PAR5 PIC 99999.
+       PROCEDURE DIVISION USING PAR5 RETURNING PARSB.
+           MOVE PAR5 TO PARSB
+           DISPLAY PARSB
+           GOBACK.
+       END FUNCTION COPYPAR2.
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       CONFIGURATION    SECTION.
+       REPOSITORY.
+           FUNCTION     COPYPAR.
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       01   PARS1.
+         02 PAR1 PICTURE X(32) VALUE "Santa".
+         02 PAR2 PICTURE X(32) VALUE "Claus".
+       01   PARS2.
+         02 PAR1 PICTURE X(32).
+         02 PAR2 PICTURE X(32).
+       01   PAR5 PICTURE 99999 VALUE 54321.
+       PROCEDURE DIVISION.
+           MOVE COPYPAR(PARS1) TO PARS2
+           DISPLAY """" PARS2 """".
+           DISPLAY COPYPAR2(PAR5)
+           STOP RUN.
+       END PROGRAM prog.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], ["Santa                           Claus                           "
+"Santa                           Claus                           "
+54321
+54321
+], [])
+AT_CLEANUP
+
diff --git a/gcc/cobol/failures/copypar/Makefile b/gcc/cobol/failures/copypar/Makefile
deleted file mode 100644
index f77e46b3451abf45cb70ed9dc161be56b3b063c7..0000000000000000000000000000000000000000
--- a/gcc/cobol/failures/copypar/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../Makefile.inc
diff --git a/gcc/cobol/failures/copypar/input.txt b/gcc/cobol/failures/copypar/input.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/gcc/cobol/failures/copypar/playpen.cbl b/gcc/cobol/failures/copypar/playpen.cbl
deleted file mode 100644
index 0740403183dbf47344a48c46aee4d16cbfd5b57b..0000000000000000000000000000000000000000
--- a/gcc/cobol/failures/copypar/playpen.cbl
+++ /dev/null
@@ -1,36 +0,0 @@
-       IDENTIFICATION   DIVISION.
-       FUNCTION-ID.     COPYPAR.
-       DATA             DIVISION.
-       LINKAGE          SECTION.
-       01   PARSA.
-         02 PAR1 PICTURE X(32).
-         02 PAR2 PICTURE X(32).
-       01   PARSB.
-         02 PAR1 PICTURE X(32).
-         02 PAR2 PICTURE X(32).
-       PROCEDURE DIVISION USING PARSA RETURNING PARSB.
-           MOVE PARSA TO PARSB
-           DISPLAY PARSB
-           GOBACK.
-       END FUNCTION COPYPAR.
-
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       CONFIGURATION    SECTION.
-       REPOSITORY.
-           FUNCTION     COPYPAR.
-       DATA DIVISION.
-       WORKING-STORAGE SECTION.
-       01   PARS1.
-         02 PAR1 PICTURE X(32) VALUE "Santa".
-         02 PAR2 PICTURE X(32) VALUE "Claus".
-       01   PARS2.
-         02 PAR1 PICTURE X(32).
-         02 PAR2 PICTURE X(32).
-       PROCEDURE DIVISION.
-           MOVE COPYPAR(PARS1) TO PARS2
-           DISPLAY PARS2.
-       
-           STOP RUN.
-       END PROGRAM prog.
diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h
index c798c928b308a6b21281561421c9506d4b1e5080..a1e8e9effe467b82734e26b55546e46ac4a0184e 100644
--- a/gcc/cobol/parse_ante.h
+++ b/gcc/cobol/parse_ante.h
@@ -1842,10 +1842,12 @@ static inline cbl_field_t *
 new_temporary_clone( const cbl_field_t *orig) {
   cbl_field_type_t type = is_literal(orig)? FldAlphanumeric : orig->type;
   auto f = new_temporary_imply(type);
-  f->data = orig->data;
   
-  if( orig->type == FldGroup ) {
-    namcpy(f->name, orig->name);
+//  f->data = orig->data;
+//  if( orig->type == FldGroup) 
+  {
+    memcpy(f, orig, sizeof(cbl_field_t));
+//    namcpy(f->name, orig->name);
     f->attr = temporary_e;
     f->var_decl_node = NULL;
     f->data_decl_node = NULL;