xref: /unit/src/test/nxt_sprintf_test.c (revision 384:8f86d3ff3e29)
1*384Szelenkov@nginx.com 
2*384Szelenkov@nginx.com /*
3*384Szelenkov@nginx.com  * Copyright (C) Igor Sysoev
4*384Szelenkov@nginx.com  * Copyright (C) NGINX, Inc.
5*384Szelenkov@nginx.com  */
6*384Szelenkov@nginx.com 
7*384Szelenkov@nginx.com #include <nxt_main.h>
8*384Szelenkov@nginx.com #include "nxt_tests.h"
9*384Szelenkov@nginx.com 
10*384Szelenkov@nginx.com 
11*384Szelenkov@nginx.com typedef struct {
12*384Szelenkov@nginx.com     const char  *format;
13*384Szelenkov@nginx.com     const char  *test;
14*384Szelenkov@nginx.com     double       number;
15*384Szelenkov@nginx.com } nxt_sprintf_double_test_t;
16*384Szelenkov@nginx.com 
17*384Szelenkov@nginx.com 
18*384Szelenkov@nginx.com static const nxt_sprintf_double_test_t  double_test[] =
19*384Szelenkov@nginx.com {
20*384Szelenkov@nginx.com     { "%3.5f", "1234.56700", 1234.567 },
21*384Szelenkov@nginx.com     { "%3.0f", "1234", 1234.567 },
22*384Szelenkov@nginx.com     { "%f", "1234.567", 1234.567 },
23*384Szelenkov@nginx.com     { "%f", "0.1", 0.1 },
24*384Szelenkov@nginx.com     { "%f", "0.000001", 0.000001 },
25*384Szelenkov@nginx.com     { "%f", "4503599627370495", 4503599627370495.0 },
26*384Szelenkov@nginx.com };
27*384Szelenkov@nginx.com 
28*384Szelenkov@nginx.com 
29*384Szelenkov@nginx.com static nxt_int_t
nxt_sprintf_test_double(u_char * buf,u_char * end,const char * fmt,const char * test,double n)30*384Szelenkov@nginx.com nxt_sprintf_test_double(u_char *buf, u_char *end, const char *fmt,
31*384Szelenkov@nginx.com     const char *test, double n)
32*384Szelenkov@nginx.com {
33*384Szelenkov@nginx.com     u_char  *p;
34*384Szelenkov@nginx.com 
35*384Szelenkov@nginx.com     p = nxt_sprintf(buf, end, fmt, n);
36*384Szelenkov@nginx.com     *p = '\0';
37*384Szelenkov@nginx.com 
38*384Szelenkov@nginx.com     return nxt_strcmp(buf, test);
39*384Szelenkov@nginx.com }
40*384Szelenkov@nginx.com 
41*384Szelenkov@nginx.com 
42*384Szelenkov@nginx.com nxt_int_t
nxt_sprintf_test(nxt_thread_t * thr)43*384Szelenkov@nginx.com nxt_sprintf_test(nxt_thread_t *thr)
44*384Szelenkov@nginx.com {
45*384Szelenkov@nginx.com     nxt_int_t   ret;
46*384Szelenkov@nginx.com     nxt_uint_t  i;
47*384Szelenkov@nginx.com     u_char      *end, buf[64];
48*384Szelenkov@nginx.com 
49*384Szelenkov@nginx.com     nxt_thread_time_update(thr);
50*384Szelenkov@nginx.com 
51*384Szelenkov@nginx.com     end = buf + 64;
52*384Szelenkov@nginx.com 
53*384Szelenkov@nginx.com     for (i = 0; i < nxt_nitems(double_test); i++) {
54*384Szelenkov@nginx.com 
55*384Szelenkov@nginx.com         ret = nxt_sprintf_test_double(buf, end, double_test[i].format,
56*384Szelenkov@nginx.com                                       double_test[i].test,
57*384Szelenkov@nginx.com                                       double_test[i].number);
58*384Szelenkov@nginx.com 
59*384Szelenkov@nginx.com         if (ret == NXT_OK) {
60*384Szelenkov@nginx.com             continue;
61*384Szelenkov@nginx.com         }
62*384Szelenkov@nginx.com 
63*384Szelenkov@nginx.com         nxt_log_alert(thr->log, "nxt_sprintf(\"%s\") failed: \"%s\" vs \"%s\"",
64*384Szelenkov@nginx.com                       double_test[i].format, double_test[i].test, buf);
65*384Szelenkov@nginx.com 
66*384Szelenkov@nginx.com         return NXT_ERROR;
67*384Szelenkov@nginx.com     }
68*384Szelenkov@nginx.com 
69*384Szelenkov@nginx.com     nxt_log_error(NXT_LOG_NOTICE, thr->log, "nxt_sprintf() test passed");
70*384Szelenkov@nginx.com     return NXT_OK;
71*384Szelenkov@nginx.com }
72