1 /*	$NetBSD: print_test.c,v 1.1.1.4 2015/07/08 15:38:05 christos Exp $	*/
2 
3 /*
4  * Copyright (C) 2014, 2015  Internet Systems Consortium, Inc. ("ISC")
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #include <config.h>
20 
21 #include <atf-c.h>
22 
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <unistd.h>
27 
28 /*
29  * Workout if we need to force the inclusion of print.c so we can test
30  * it on all platforms even if we don't include it in libisc.
31  */
32 #include <isc/platform.h>
33 #if !defined(ISC_PLATFORM_NEEDVSNPRINTF) && !defined(ISC_PLATFORM_NEEDSPRINTF)
34 #define ISC__PRINT_SOURCE
35 #include "../print.c"
36 #else
37 #if !defined(ISC_PLATFORM_NEEDVSNPRINTF) || !defined(ISC_PLATFORM_NEEDSPRINTF)
38 #define ISC__PRINT_SOURCE
39 #endif
40 #include <isc/print.h>
41 #include <isc/types.h>
42 #include <isc/util.h>
43 #endif
44 
45 ATF_TC(snprintf);
46 ATF_TC_HEAD(snprintf, tc) {
47 	atf_tc_set_md_var(tc, "descr", "snprintf implementation");
48 }
49 ATF_TC_BODY(snprintf, tc) {
50 	char buf[10000];
51 	isc_uint64_t ll = 8589934592ULL;
52 	int n;
53 
54 	UNUSED(tc);
55 
56 	/*
57 	 * 4294967296 <= 8589934592 < 1000000000^2 to verify fix for
58 	 * RT#36505.
59 	 */
60 
61 	memset(buf, 0xff, sizeof(buf));
62 	n = isc_print_snprintf(buf, sizeof(buf), "%qu", ll);
63 	ATF_CHECK_EQ(n, 10);
64 	ATF_CHECK_STREQ(buf, "8589934592");
65 
66 	memset(buf, 0xff, sizeof(buf));
67 	n = isc_print_snprintf(buf, sizeof(buf), "%llu", ll);
68 	ATF_CHECK_EQ(n, 10);
69 	ATF_CHECK_STREQ(buf, "8589934592");
70 }
71 
72 /*
73  * Main
74  */
75 ATF_TP_ADD_TCS(tp) {
76 	ATF_TP_ADD_TC(tp, snprintf);
77 	return (atf_no_error());
78 }
79