Commit fa4d4fc7 authored by Sergei Golubchik's avatar Sergei Golubchik

unit tests for my_getopt

parent 584c07bd
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
MY_ADD_TESTS(bitmap base64 my_vsnprintf my_atomic my_rdtsc lf my_malloc MY_ADD_TESTS(bitmap base64 my_vsnprintf my_atomic my_rdtsc lf my_malloc
my_getopt
LINK_LIBRARIES mysys) LINK_LIBRARIES mysys)
IF(WIN32) IF(WIN32)
......
/* Copyright (C) 2015 MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include <tap.h>
#include <my_getopt.h>
#include <stdarg.h>
ulonglong opt_ull;
ulong opt_ul;
int argc, res;
char **argv, *args[100];
struct my_option my_long_options[]=
{
{"ull", 0, "ull", &opt_ull, &opt_ull,
0, GET_ULL, REQUIRED_ARG, 1, 0, ~0ULL, 0, 0, 0},
{"ul", 0, "ul", &opt_ul, &opt_ul,
0, GET_ULONG, REQUIRED_ARG, 1, 0, 0xFFFFFFFF, 0, 0, 0},
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
void run(const char *arg, ...)
{
va_list ap;
va_start(ap, arg);
argv= args;
*argv++= (char*)"<skipped>";
while (arg)
{
*argv++= (char*)arg;
arg= va_arg(ap, char*);
}
va_end(ap);
argc= argv - args;
argv= args;
res= handle_options(&argc, &argv, my_long_options, 0);
}
int main() {
plan(3);
run("--ull=100", NULL);
ok(res==0 && argc==0 && opt_ull==100,
"res:%d, argc:%d, opt_ull:%llu", res, argc, opt_ull);
/*
negative numbers are wrapped. this is kinda questionable,
we might want to fix it eventually. but it'd be a change in behavior,
users might've got used to "-1" meaning "max possible value"
*/
run("--ull=-100", NULL);
ok(res==0 && argc==0 && opt_ull==18446744073709551516ULL,
"res:%d, argc:%d, opt_ull:%llu", res, argc, opt_ull);
run("--ul=-100", NULL);
ok(res==0 && argc==0 && opt_ul==4294967295UL,
"res:%d, argc:%d, opt_ul:%lu", res, argc, opt_ul);
return exit_status();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment