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