solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

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:
Msrc/solstice_args.c | 13++++++++-----
Msrc/test_solstice_args.c | 192+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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; }