commit 717cd9b9694c011af6263be68f950f309b853803
parent 9774260ae8e1784fb1da25f6ad3b98ed19bab19f
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 25 Jan 2017 17:51:12 +0100
Add several solstice_args tests
Diffstat:
2 files changed, 200 insertions(+), 5 deletions(-)
diff --git a/src/solstice_args.c b/src/solstice_args.c
@@ -48,7 +48,7 @@ print_help(const char* program)
printf(
" -h display this help and exit.\n");
printf(
-" -n REALISATIONS number of realisation. Default is %lu.\n",
+" -n REALISATIONS number of realisations. Default is %lu.\n",
SOLSTICE_ARGS_DEFAULT.nrealisations);
printf(
" -o write results to OUTPUT. If not define, write results to\n");
@@ -324,7 +324,7 @@ solstice_args_init(struct solstice_args* args, const int argc, char** argv)
*args = SOLSTICE_ARGS_DEFAULT;
- optind = 1;
+ optind = 0;
while((opt = getopt(argc, argv, "D:Hhn:o:qR:r:t:")) != -1) {
switch(opt) {
case 'D':
@@ -338,7 +338,7 @@ solstice_args_init(struct solstice_args* args, const int argc, char** argv)
goto exit;
case 'n':
res = cstr_to_ulong(optarg, &args->nrealisations);
- if(res != RES_OK && !args->nrealisations) res = RES_BAD_ARG;
+ if(res == RES_OK && !args->nrealisations) res = RES_BAD_ARG;
break;
case 'o': args->output_filename = optarg; break;
case 'q': args->quiet = 1; break;
@@ -346,8 +346,11 @@ solstice_args_init(struct solstice_args* args, const int argc, char** argv)
case 'r': res = parse_rendering_options(optarg, args); break;
case 't':
res = cstr_to_ulong(optarg, &ul);
- if(res != RES_OK && !ul) res = RES_BAD_ARG;
- args->nthreads = (unsigned)MMIN(ul, UINT_MAX);
+ if(res == RES_OK && !ul) {
+ res = RES_BAD_ARG;
+ } else {
+ args->nthreads = (unsigned)MMIN(ul, UINT_MAX);
+ }
break;
default: res = RES_BAD_ARG; break;
}
diff --git a/src/test_solstice_args.c b/src/test_solstice_args.c
@@ -21,6 +21,7 @@
#include <stdarg.h>
#include <string.h>
+#include <limits.h>
static char**
cmd_create(int dummy, ...)
@@ -222,8 +223,193 @@ test_sun_dirs(void)
CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
cmd_delete(cmd);
+ cmd = cmd_create(0, "test", "-D", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+}
+
+static void
+test_realisations_count(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-n", "1", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nrealisations, 1);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nrealisations, SOLSTICE_ARGS_DEFAULT.nrealisations);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-n", "123", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nrealisations, 123);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-n", "0", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-n", "3.14", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-n", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+}
+
+static void
+test_threads_count(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", "1", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nthreads, 1);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", "123", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nthreads, 123);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", "-1", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nthreads, UINT_MAX);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.nthreads, SOLSTICE_ARGS_DEFAULT.nthreads);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", "0", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", "3.14", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-t", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+}
+
+static void
+test_output_hits(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.output_hits, SOLSTICE_ARGS_DEFAULT.output_hits);
+ CHECK(args.output_hits, 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-H", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.output_hits, 1);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+}
+
+static void
+test_output(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.output_filename, NULL);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-o", "my_output", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(strcmp(args.output_filename, "my_output"), 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-o", "hello_world", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(strcmp(args.output_filename, "hello_world"), 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-o", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+}
+
+static void
+test_quiet(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.quiet, SOLSTICE_ARGS_DEFAULT.quiet);
+ CHECK(args.quiet, 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-q", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.quiet, 1);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+}
+
+static void
+test_receivers(void)
+{
+ struct solstice_args args = SOLSTICE_ARGS_NULL;
+ char** cmd = NULL;
+
cmd = cmd_create(0, "test", "-D", "0,90", NULL);
CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(args.receivers_filename, SOLSTICE_ARGS_DEFAULT.receivers_filename);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-R", "my_receivers", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(strcmp(args.receivers_filename, "my_receivers"), 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-R", "foo bar", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ CHECK(strcmp(args.receivers_filename, "foo bar"), 0);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", "-R", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
solstice_args_release(&args);
cmd_delete(cmd);
}
@@ -234,6 +420,12 @@ main(int argc, char** argv)
(void)argc, (void)argv;
test_rendering();
test_sun_dirs();
+ test_realisations_count();
+ test_threads_count();
+ test_output_hits();
+ test_output();
+ test_quiet();
+ test_receivers();
CHECK(mem_allocated_size(), 0);
return 0;
}