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 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