Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_printf.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2013 Martin Willi
                      3:  * Copyright (C) 2013 revosec AG
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: #include "test_suite.h"
                     17: 
                     18: #include <errno.h>
                     19: #include <math.h>
                     20: #include <inttypes.h>
                     21: 
                     22: static void verify(char *expected, char *format, ...)
                     23: {
                     24:        char buf[128];
                     25:        va_list args;
                     26: 
                     27:        va_start(args, format);
                     28:        vsnprintf(buf, sizeof(buf), format, args);
                     29:        ck_assert_str_eq(expected, buf);
                     30:        va_end(args);
                     31: 
                     32: #ifdef HAVE_FMEMOPEN
                     33:        {
                     34:                FILE *mem;
                     35: 
                     36:                mem = fmemopen(buf, sizeof(buf), "w");
                     37:                va_start(args, format);
                     38:                vfprintf(mem, format, args);
                     39:                va_end(args);
                     40:                fclose(mem);
                     41:                ck_assert_str_eq(expected, buf);
                     42:        }
                     43: #endif /* HAVE_FMEMOPEN */
                     44: }
                     45: 
                     46: START_TEST(test_printf_null)
                     47: {
                     48:        char buf[16];
                     49: 
                     50:        /* on FreeBSD "(null)" gets printed even when a precision of 0 is used.
                     51:         * because printing of "(null)" for NULL is not standardized we don't verify
                     52:         * the output and just make sure there is no crash */
                     53:        snprintf(buf, sizeof(buf), "%s", NULL);
                     54: }
                     55: END_TEST
                     56: 
                     57: START_TEST(test_printf_strings)
                     58: {
                     59:        verify("a bc def", "%s %s %s", "a", "bc", "def");
                     60:        verify("", "%.0s", "asdfg");
                     61:        verify("asd", "%.3s", "asdfg");
                     62:        verify("asdf", "%.*s", (int)4, "asdfg");
                     63:        verify("  asdf", "%6s", "asdf");
                     64:        verify("  asdf", "%+6s", "asdf");
                     65:        verify("asdf  ", "%-6s", "asdf");
                     66: }
                     67: END_TEST
                     68: 
                     69: START_TEST(test_printf_err)
                     70: {
                     71:        errno = EINVAL;
                     72:        verify((char*)strerror(errno), "%m");
                     73: }
                     74: END_TEST
                     75: 
                     76: START_TEST(test_printf_unsigned)
                     77: {
                     78:        verify("1 23 456", "%u %lu %llu", 1, (u_long)23, (uint64_t)456);
                     79:        verify("65535 255", "%hu %hhu", 0x1ffff, 0x1ff);
                     80:        verify("123456789", "%zu", (size_t)123456789);
                     81:        verify("   12", "%5u", 12);
                     82:        verify("12   ", "%-5u", 12);
                     83:        verify("0012", "%04u", 12);
                     84:        verify("0012", "%.4u", 12);
                     85: }
                     86: END_TEST
                     87: 
                     88: START_TEST(test_printf_signed)
                     89: {
                     90:        verify("-1 -23 -456", "%d %ld %lld", -1, (long)-23, (int64_t)-456);
                     91:        verify("-1 -1", "%hd %hhd", 0x1ffff, 0x1ff);
                     92:        verify("123456789", "%zd", (ssize_t)123456789);
                     93:        verify("  -12", "%5d", -12);
                     94:        verify("-12  ", "%-5d", -12);
                     95:        verify("-012", "%04d", -12);
                     96:        verify("-0012", "%.4d", -12);
                     97: }
                     98: END_TEST
                     99: 
                    100: START_TEST(test_printf_hex)
                    101: {
                    102:        verify("1 23 456", "%x %lx %llx", 1, (u_long)0x23, (uint64_t)0x456);
                    103:        verify("12abcdef 12ABCDEF", "%x %X", 0x12ABCDEF, 0x12ABCDEF);
                    104:        verify("ffff ff", "%hx %hhx", 0x1ffff, 0x1ff);
                    105:        verify("23456789", "%zx", (size_t)0x23456789);
                    106:        verify("   ab", "%5x", 0xab);
                    107:        verify("ab   ", "%-5x", 0xab);
                    108:        verify("00ab", "%04x", 0xab);
                    109:        verify("00ab", "%.4x", 0xab);
                    110: }
                    111: END_TEST
                    112: 
                    113: START_TEST(test_printf_float)
                    114: {
                    115:        verify("0.000000", "%f", 0.0);
                    116:        verify("1.000000", "%f", 1.0);
                    117:        verify("12345.1", "%.1f", 12345.123);
                    118:        verify("1", "%.0f", 1.0);
                    119:        verify("1.3", "%.1f", 1.346789);
                    120:        verify("1.23", "%.2f", 1.23456789);
                    121:        verify("1.123", "%.3f", 1.123456789);
                    122:        verify("1.0123", "%.4f", 1.0123456789);
                    123: 
                    124:        verify("-1.000000", "%f", -1.0);
                    125:        verify("-12345.1", "%.1f", -12345.123);
                    126:        verify("-1", "%.0f", -1.0);
                    127:        verify("-1.3", "%.1f", -1.3456789);
                    128:        verify("-1.23", "%.2f", -1.23456789);
                    129:        verify("-1.123", "%.3f", -1.123456789);
                    130:        verify("-1.0123", "%.4f", -1.0123456789);
                    131: 
                    132:        verify("  1.2", "%5.1f", 1.234);
                    133:        verify("001.2", "%05.1f", 1.234);
                    134:        verify("1.2  ", "%-5.1f", 1.234);
                    135: 
                    136:        verify("12346", "%.0f", 12345.6789);
                    137:        verify("2", "%.0f", 1.5);
                    138:        verify("1", "%.0f", 1.49);
                    139:        verify("1.2", "%.1f", 1.151);
                    140:        verify("1.1", "%.1f", 1.149);
                    141:        verify("1.13", "%.2f", 1.1251);
                    142:        verify("1.12", "%.2f", 1.1249);
                    143:        verify("1.124", "%.3f", 1.12351);
                    144:        verify("1.123", "%.3f", 1.12349);
                    145: 
                    146:        verify("-12346", "%.0f", -12345.6789);
                    147:        verify("-2", "%.0f", -1.51);
                    148:        verify("-1", "%.0f", -1.49);
                    149:        verify("-1.2", "%.1f", -1.151);
                    150:        verify("-1.1", "%.1f", -1.149);
                    151:        verify("-1.13", "%.2f", -1.1251);
                    152:        verify("-1.12", "%.2f", -1.1249);
                    153:        verify("-1.124", "%.3f", -1.12351);
                    154:        verify("-1.123", "%.3f", -1.12349);
                    155: 
                    156: #ifdef NAN
                    157:        verify("nan", "%.3f", NAN);
                    158:        verify("  nan", "%5.3f", NAN);
                    159:        verify("NAN", "%.3F", NAN);
                    160:        verify("NAN  ", "%-5.3F", NAN);
                    161: #endif
                    162: #ifdef INFINITY
                    163:        verify("inf", "%.3f", INFINITY);
                    164:        verify("-inf", "%.4f", -INFINITY);
                    165:        verify("INF", "%.3F", INFINITY);
                    166:        verify("-INF", "%.4F", -INFINITY);
                    167: #endif
                    168: }
                    169: END_TEST
                    170: 
                    171: START_TEST(test_printf_pri)
                    172: {
                    173:        verify("255", "%" PRIu8, (uint8_t)0xFF);
                    174:        verify("65535", "%" PRIu16, (uint16_t)0xFFFF);
                    175:        verify("4294967295", "%" PRIu32, (uint32_t)0x1FFFFFFFFll);
                    176:        verify("18446744073709551615", "%" PRIu64, (uint64_t)0xFFFFFFFFFFFFFFFFll);
                    177: 
                    178:        verify("-1", "%" PRId8, (int8_t)-1);
                    179:        verify("-1", "%" PRId16, (int16_t)-1);
                    180:        verify("-1", "%" PRId32, (int32_t)-1);
                    181:        verify("-1", "%" PRId64, (int64_t)-1);
                    182: 
                    183:        verify("1", "%" PRIuMAX, (uintmax_t)1);
                    184:        verify("1", "%" PRIuPTR, (uintptr_t)1);
                    185: 
                    186:        verify("-1", "%" PRIdMAX, (intmax_t)-1);
                    187:        verify("-1", "%" PRIdPTR, (intptr_t)-1);
                    188: }
                    189: END_TEST
                    190: 
                    191: Suite *printf_suite_create()
                    192: {
                    193:        Suite *s;
                    194:        TCase *tc;
                    195: 
                    196:        s = suite_create("printf");
                    197: 
                    198:        tc = tcase_create("strings");
                    199:        tcase_add_test(tc, test_printf_null);
                    200:        tcase_add_test(tc, test_printf_strings);
                    201:        suite_add_tcase(s, tc);
                    202: 
                    203:        tc = tcase_create("err");
                    204:        tcase_add_test(tc, test_printf_err);
                    205:        suite_add_tcase(s, tc);
                    206: 
                    207:        tc = tcase_create("unsigned");
                    208:        tcase_add_test(tc, test_printf_unsigned);
                    209:        suite_add_tcase(s, tc);
                    210: 
                    211:        tc = tcase_create("siged");
                    212:        tcase_add_test(tc, test_printf_signed);
                    213:        suite_add_tcase(s, tc);
                    214: 
                    215:        tc = tcase_create("hex");
                    216:        tcase_add_test(tc, test_printf_hex);
                    217:        suite_add_tcase(s, tc);
                    218: 
                    219:        tc = tcase_create("float");
                    220:        tcase_add_test(tc, test_printf_float);
                    221:        suite_add_tcase(s, tc);
                    222: 
                    223:        tc = tcase_create("PRI*");
                    224:        tcase_add_test(tc, test_printf_pri);
                    225:        suite_add_tcase(s, tc);
                    226: 
                    227:        return s;
                    228: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>