Annotation of researchv10no/cmd/lcc/ph/d412.c, revision 1.1

1.1     ! root        1: /* The Plum Hall Validation Suite for C
        !             2:  * Unpublished copyright (c) 1986-1991, Chiron Systems Inc and Plum Hall Inc.
        !             3:  * VERSION: 4
        !             4:  * DATE: 1993-01-01
        !             5:  * The "ANSI" mode of this suite corresponds to official ANSI C, X3.159-1989.
        !             6:  * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site
        !             7:  * without specific permission from Plum Hall Inc.
        !             8:  */
        !             9: 
        !            10: #define LIB_TEST 1
        !            11: #include "defs.h"
        !            12: #if !ANSI
        !            13: #define SKIP412 1 /* This file is almost irrelevant for non-ANSI */
        !            14: #endif
        !            15: 
        !            16: #include "flags.h"
        !            17: #ifndef SKIP412
        !            18: /*
        !            19:  * 4.12 - Date and time
        !            20:  */
        !            21: #include <time.h>
        !            22: #include <limits.h>
        !            23: #include <string.h>
        !            24: struct tm tm1, tm2, *ptm;
        !            25: static time_t time_t1, time_t2, time_t3;
        !            26: static void d4_12_1();
        !            27: static void d4_12_2();
        !            28: static void d4_12_3();
        !            29: void d4_12()
        !            30:        {
        !            31:        Filename = "d412.c";
        !            32:        d4_12_1();
        !            33:        d4_12_2();
        !            34:        d4_12_3();
        !            35:        }
        !            36: 
        !            37: /*
        !            38:  * 4.12.1 Components of time
        !            39:  */
        !            40: static void d4_12_1()
        !            41:        {
        !            42:        /* d4_12_1 is required by both d4_12_2 and d4_12_3 */
        !            43:        /* make sure that all of the required fields are there */
        !            44:        tm1.tm_sec = 0;
        !            45:        tm1.tm_min = 49;
        !            46:        tm1.tm_hour = 20;
        !            47:        tm1.tm_mday = 12;
        !            48:        tm1.tm_mon = 8;
        !            49:        tm1.tm_year = 76;
        !            50:        tm1.tm_wday = -99;
        !            51:        tm1.tm_yday = -99;
        !            52:        tm1.tm_isdst = 1;
        !            53:        }
        !            54: 
        !            55: /*
        !            56:  * 4.12.2 Time manipulation functions.
        !            57:  */
        !            58: static void d4_12_2()
        !            59:        {
        !            60: #ifndef SKIP4_122
        !            61:        int sec;
        !            62:        clock_t c;
        !            63: 
        !            64:        /* 4.12.2.1 clock
        !            65:         * system time. Also check existence of CLOCKS_PER_SEC macro
        !            66:         */
        !            67:        sec = (c = clock()) / CLOCKS_PER_SEC;
        !            68: 
        !            69:        /* is the processor time available via "clock" ? */
        !            70:        if (c == (clock_t)-1)
        !            71:                complain(- __LINE__);
        !            72: 
        !            73:        /* 4.12.2.2 difftime
        !            74:         * compute the difference between two times
        !            75:         */
        !            76:        time_t1 = mktime(&tm1);
        !            77:        tm1.tm_sec = 5;
        !            78:        time_t2 = mktime(&tm1);
        !            79:        dequals(__LINE__, difftime(time_t1, time_t2), -5.0);
        !            80: 
        !            81:        /* 4.12.2.3 mktime
        !            82:         * convert a "struct tm" to a "time_t". Return
        !            83:         * (time_t)-1 if it is unrepresentable
        !            84:         */
        !            85:        tm2.tm_sec = tm2.tm_min = tm2.tm_hour = tm2.tm_mday =
        !            86:                        tm2.tm_mon = tm2.tm_year = INT_MIN;
        !            87:        checkthat( - __LINE__, mktime(&tm2) == (time_t)-1);
        !            88: 
        !            89:        /* now check that the day of the week for tm1 is Sunday. */
        !            90:        iequals(__LINE__, tm1.tm_wday, 0);
        !            91: 
        !            92:        /* 4.12.2.4 time
        !            93:         * present time of day
        !            94:         */
        !            95:        time_t1 = time_t2;
        !            96:        time_t3 = time(&time_t1);
        !            97: 
        !            98:        /* check whether the time is available */
        !            99:        if (time_t3 == (time_t)-1)
        !           100:                complain(- __LINE__);
        !           101:        dequals(__LINE__, difftime(time_t3, time_t1), 0.0);
        !           102:        checkthat(__LINE__, difftime(time_t1, time_t2) > 0.0);
        !           103: #endif /* SKIP4_122 */
        !           104:        }
        !           105: 
        !           106: /*
        !           107:  * 4.12.3 Time conversion functions
        !           108:  */
        !           109: static void d4_12_3()
        !           110:        {
        !           111: #ifndef SKIP4_123
        !           112:        char s[64];
        !           113:        char *p;
        !           114: 
        !           115:        /* 4.12.3.1 asctime
        !           116:         * convert a "struct tm" to a string
        !           117:         */
        !           118:        p = asctime(&tm1);
        !           119: 
        !           120:        /* 4.12.3.2 ctime
        !           121:         * convert a "time_t" to a string
        !           122:         */
        !           123:        time_t1 = mktime(&tm1);
        !           124:        stequals(__LINE__, p, ctime(&time_t1));
        !           125:        iequals(__LINE__, tm1.tm_wday, 0);      /* Sunday */
        !           126:        iequals(__LINE__, tm1.tm_yday, 255);
        !           127: 
        !           128:        /* 4.12.3.3 gmtime
        !           129:         * convert a "time_t" to a Greenwich Mean Time string
        !           130:         */
        !           131:        ptm = gmtime(&time_t1);
        !           132: 
        !           133:        /* 4.12.3.4 localtime
        !           134:         * convert a "time_t" to a "struct tm"
        !           135:         */
        !           136:        ptm = localtime(&time_t1);
        !           137:        time_t2 = mktime(ptm);
        !           138:        /* this should be an isomorphic change */
        !           139:        dequals(__LINE__, difftime(time_t1, time_t2), 0.0);
        !           140: 
        !           141:        /* 4.12.3.5 strftime
        !           142:         * encode time information in a locale dependant way.
        !           143:         * This test will make sure that the "C" locale works right.
        !           144:         */
        !           145:         iequals(__LINE__, strftime(s, 64, "XXX", &tm1), 3);
        !           146:         iequals(__LINE__, strftime(s,  2, "XXX", &tm1), 0);
        !           147: 
        !           148:         #define ST(in, out) strftime(s, 64, in, &tm1); stequals(__LINE__, s, out);
        !           149:         #define ST2(in, out) strftime(s, 64, in, &tm1); stequals( - __LINE__, s, out);
        !           150: 
        !           151:        /* check each of the formatting directives */
        !           152:        ST("%a", "Sun");
        !           153:        ST("%A", "Sunday");
        !           154:        ST("%b", "Sep");
        !           155:        ST("%B", "September");
        !           156:        {
        !           157:                static char a[31] = {0};
        !           158: 
        !           159:                strftime(a, 30, "%c", &tm1);
        !           160:                if (strchr(a, '\n') == 0)
        !           161:                        *strchr(a, '\0') = '\n';
        !           162:                stequals(- __LINE__, a, asctime(&tm1));
        !           163:        }
        !           164:        ST("%d", "12");
        !           165:        ST("%H", "20");
        !           166:        ST("%I", "08");
        !           167:        ST("%j", "256");
        !           168:        ST("%m", "09");
        !           169:        ST("%M", "49");
        !           170:        ST("%p", "PM");
        !           171:        ST("%S", "05");
        !           172:        ST("%U", "37");
        !           173:        ST("%w", "0");
        !           174:        ST("%W", "36");
        !           175:        ST2("%x", "Sun Sep 12, 1976");
        !           176:        ST2("%X", "20:49:05");
        !           177:        ST("%y", "76");
        !           178:        ST("%Y", "1976");
        !           179:        ST("%%", "%");
        !           180: #endif /* SKIP4_123 */
        !           181:        }
        !           182: 
        !           183: #else /* if SKIP412 */
        !           184: void d4_12() { pr_skip("d4_12: SKIPPED ENTIRELY\n"); }
        !           185: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.