xref: /unit/src/test/nxt_strverscmp_test.c (revision 384:8f86d3ff3e29)
1*384Szelenkov@nginx.com 
2*384Szelenkov@nginx.com /*
3*384Szelenkov@nginx.com  * Copyright (C) NGINX, Inc.
4*384Szelenkov@nginx.com  * Copyright (C) Valentin V. Bartenev
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  *v1;
13*384Szelenkov@nginx.com     const char  res;
14*384Szelenkov@nginx.com     const char  *v2;
15*384Szelenkov@nginx.com } nxt_strverscmp_test_t;
16*384Szelenkov@nginx.com 
17*384Szelenkov@nginx.com 
18*384Szelenkov@nginx.com nxt_int_t
nxt_strverscmp_test(nxt_thread_t * thr)19*384Szelenkov@nginx.com nxt_strverscmp_test(nxt_thread_t *thr)
20*384Szelenkov@nginx.com {
21*384Szelenkov@nginx.com     nxt_int_t   ret;
22*384Szelenkov@nginx.com     nxt_uint_t  i;
23*384Szelenkov@nginx.com 
24*384Szelenkov@nginx.com     static const nxt_strverscmp_test_t  tests[] = {
25*384Szelenkov@nginx.com         { "word",   '=', "word" },
26*384Szelenkov@nginx.com         { "42",     '=', "42" },
27*384Szelenkov@nginx.com         { "000",    '=', "000" },
28*384Szelenkov@nginx.com         { "2",      '>', "1" },
29*384Szelenkov@nginx.com         { "2",      '<', "10" },
30*384Szelenkov@nginx.com         { "rc2",    '>', "rc" },
31*384Szelenkov@nginx.com         { "rc2",    '<', "rc3" },
32*384Szelenkov@nginx.com         { "1.13.8", '>', "1.1.9" },
33*384Szelenkov@nginx.com         { "1.9",    '<', "1.13.8" },
34*384Szelenkov@nginx.com         { "9.9",    '<', "10.0" },
35*384Szelenkov@nginx.com         { "1",      '>', "007" },
36*384Szelenkov@nginx.com         { "2b01",   '<', "2b013" },
37*384Szelenkov@nginx.com         { "011",    '>', "01" },
38*384Szelenkov@nginx.com         { "011",    '>', "01.1" },
39*384Szelenkov@nginx.com         { "011",    '>', "01+1" },
40*384Szelenkov@nginx.com         { "011",    '<', "01:1" },
41*384Szelenkov@nginx.com         { "011",    '<', "01b" },
42*384Szelenkov@nginx.com         { "020",    '>', "01b" },
43*384Szelenkov@nginx.com         { "a0",     '>', "a01" },
44*384Szelenkov@nginx.com         { "b00",    '<', "b01" },
45*384Szelenkov@nginx.com         { "c000",   '<', "c01" },
46*384Szelenkov@nginx.com         { "000",    '<', "00" },
47*384Szelenkov@nginx.com         { "000",    '<', "00a" },
48*384Szelenkov@nginx.com         { "00.",    '>', "000" },
49*384Szelenkov@nginx.com         { "a.0",    '<', "a0" },
50*384Szelenkov@nginx.com         { "b11",    '>', "b0" },
51*384Szelenkov@nginx.com     };
52*384Szelenkov@nginx.com 
53*384Szelenkov@nginx.com     nxt_thread_time_update(thr);
54*384Szelenkov@nginx.com 
55*384Szelenkov@nginx.com     for (i = 0; i < nxt_nitems(tests); i++) {
56*384Szelenkov@nginx.com 
57*384Szelenkov@nginx.com         ret = nxt_strverscmp((u_char *) tests[i].v1, (u_char *) tests[i].v2);
58*384Szelenkov@nginx.com 
59*384Szelenkov@nginx.com         switch (tests[i].res) {
60*384Szelenkov@nginx.com 
61*384Szelenkov@nginx.com         case '<':
62*384Szelenkov@nginx.com             if (ret < 0) {
63*384Szelenkov@nginx.com                 continue;
64*384Szelenkov@nginx.com             }
65*384Szelenkov@nginx.com 
66*384Szelenkov@nginx.com             break;
67*384Szelenkov@nginx.com 
68*384Szelenkov@nginx.com         case '=':
69*384Szelenkov@nginx.com             if (ret == 0) {
70*384Szelenkov@nginx.com                 continue;
71*384Szelenkov@nginx.com             }
72*384Szelenkov@nginx.com 
73*384Szelenkov@nginx.com             break;
74*384Szelenkov@nginx.com 
75*384Szelenkov@nginx.com         case '>':
76*384Szelenkov@nginx.com             if (ret > 0) {
77*384Szelenkov@nginx.com                 continue;
78*384Szelenkov@nginx.com             }
79*384Szelenkov@nginx.com 
80*384Szelenkov@nginx.com             break;
81*384Szelenkov@nginx.com         }
82*384Szelenkov@nginx.com 
83*384Szelenkov@nginx.com         nxt_log_alert(thr->log,
84*384Szelenkov@nginx.com                       "nxt_strverscmp() test \"%s\" %c \"%s\" failed: %i",
85*384Szelenkov@nginx.com                       tests[i].v1, tests[i].res, tests[i].v2, ret);
86*384Szelenkov@nginx.com 
87*384Szelenkov@nginx.com         return NXT_ERROR;
88*384Szelenkov@nginx.com     }
89*384Szelenkov@nginx.com 
90*384Szelenkov@nginx.com     nxt_log_error(NXT_LOG_NOTICE, thr->log,
91*384Szelenkov@nginx.com                   "nxt_strverscmp() test passed");
92*384Szelenkov@nginx.com 
93*384Szelenkov@nginx.com     return NXT_OK;
94*384Szelenkov@nginx.com }
95