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 208abec3476f66e8abd67137432912a28d98a588
parent a0438cd5dc989cccbecf4844c298bb17d1dac577
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 13 Jan 2017 14:58:52 +0100

Push further the solreceivers tests

Diffstat:
Mcmake/receivers/CMakeLists.txt | 6++++++
Msrc/receivers/solreceivers.c | 20++++++++++++++++++++
Msrc/receivers/solreceivers.h | 15+++++++++++++++
Msrc/receivers/test_solreceivers.c | 18++++++++++++++++++
Asrc/receivers/test_solreceivers2.c | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/receivers/yaml/test_ko.yaml | 20++++++++++++++++++++
Asrc/receivers/yaml/test_ok.yaml | 16++++++++++++++++
7 files changed, 189 insertions(+), 0 deletions(-)

diff --git a/cmake/receivers/CMakeLists.txt b/cmake/receivers/CMakeLists.txt @@ -59,6 +59,12 @@ if(NOT NO_TEST) endfunction() build_test(test_solreceivers) + add_test(test_solreceivers_ok test_solreceivers + ${SOLRECEIVERS_SOURCE_DIR}/yaml/test_ok.yaml) + add_test(test_solreceivers_ok test_solreceivers -e + ${SOLRECEIVERS_SOURCE_DIR}/yaml/test_ko.yaml) + + new_test(test_solreceivers2) endif() diff --git a/src/receivers/solreceivers.c b/src/receivers/solreceivers.c @@ -409,3 +409,23 @@ error: goto exit; } +size_t +solreceivers_count(const struct solreceivers* receivers) +{ + ASSERT(receivers); + return darray_receiver_size_get(&receivers->receivers); +} + +void +solreceivers_get + (const struct solreceivers* receivers, + const size_t i, + struct solreceiver* receiver) +{ + const struct receiver* r; + ASSERT(receivers && receiver && i < solreceivers_count(receivers)); + r = darray_receiver_cdata_get(&receivers->receivers) + i; + receiver->name = str_cget(&r->name); + receiver->side = r->side; +} + diff --git a/src/receivers/solreceivers.h b/src/receivers/solreceivers.h @@ -24,6 +24,11 @@ enum solreceiver_side { SOLRECEIVER_FRONT_AND_BACK }; +struct solreceiver { + const char* name; + enum solreceiver_side side; +}; + struct mem_allocator; struct solreceivers; @@ -54,5 +59,15 @@ extern LOCAL_SYM res_T solreceivers_load (struct solreceivers* receivers); +extern LOCAL_SYM size_t +solreceivers_count + (const struct solreceivers* receivers); + +extern LOCAL_SYM void +solreceivers_get + (const struct solreceivers* receivers, + const size_t i, + struct solreceiver* receiver); + #endif /* SOLRECEIVERS_H */ diff --git a/src/receivers/test_solreceivers.c b/src/receivers/test_solreceivers.c @@ -16,6 +16,8 @@ #include "solreceivers.h" #include "test_solstice_utils.h" +#include <string.h> + int main(int argc, char** argv) { @@ -26,6 +28,22 @@ main(int argc, char** argv) res_T load_res = RES_OK; (void)argc, (void)argv; + if(argc > 1) { + if(!strcmp(argv[1], "-e")) { + load_res = RES_BAD_ARG; + ifile = 2; + } else if(!strcmp(argv[1], "-h")) { + printf("Usage: %s [OPTIONS] [FILE ... ]\n", argv[0]); + printf( +"Check the receiver API and that the submitted FILEs are valid. Use the `-e'\n" +"option to check that the FILEs are invalid.\n\n"); + printf("OPTIONS:\n"); + printf(" -h print this help and exit.\n"); + printf(" -e check that the submitted FILEs have errors.\n"); + return 0; + } + } + CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); solreceivers_create(&allocator, &receivers); diff --git a/src/receivers/test_solreceivers2.c b/src/receivers/test_solreceivers2.c @@ -0,0 +1,94 @@ +/* Copyright (C) CNRS 2016-2017 + * + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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, see <http://www.gnu.org/licenses/>. */ + +#include "solreceivers.h" +#include "test_solstice_utils.h" + +#include <string.h> + +int +main(int argc, char** argv) +{ + struct mem_allocator allocator; + struct solreceivers* receivers; + struct solreceiver receiver; + FILE* stream; + int seek; + (void)argc, (void)argv; + + CHECK(mem_init_proxy_allocator(&allocator, &mem_default_allocator), RES_OK); + solreceivers_create(&allocator, &receivers); + + stream = tmpfile(); + NCHECK(stream, NULL); + fprintf(stream, "- { name: entity0 }\n"); + fprintf(stream, "- { name: \"entity1\" }\n"); + fprintf(stream, "- { name: entity2, side: FRONT }\n"); + fprintf(stream, "- { name: entity3, side: BACK }\n"); + fprintf(stream, "- name: entity4\n"); + fprintf(stream, " side: FRONT_AND_BACK\n"); + rewind(stream); + + CHECK(solreceivers_setup_stream(receivers, NULL, stream), RES_OK); + CHECK(solreceivers_load(receivers), RES_OK); + CHECK(solreceivers_count(receivers), 5); + + solreceivers_get(receivers, 0, &receiver); + CHECK(strcmp(receiver.name, "entity0"), 0); + CHECK(receiver.side, SOLRECEIVER_FRONT_AND_BACK); + + solreceivers_get(receivers, 1, &receiver); + CHECK(strcmp(receiver.name, "entity1"), 0); + CHECK(receiver.side, SOLRECEIVER_FRONT_AND_BACK); + + solreceivers_get(receivers, 2, &receiver); + CHECK(strcmp(receiver.name, "entity2"), 0); + CHECK(receiver.side, SOLRECEIVER_FRONT); + + solreceivers_get(receivers, 3, &receiver); + CHECK(strcmp(receiver.name, "entity3"), 0); + CHECK(receiver.side, SOLRECEIVER_BACK); + + solreceivers_get(receivers, 4, &receiver); + CHECK(strcmp(receiver.name, "entity4"), 0); + CHECK(receiver.side, SOLRECEIVER_FRONT_AND_BACK); + + CHECK(solreceivers_load(receivers), RES_BAD_OP); + + seek = (int)ftell(stream); + fprintf(stream, "---\n"); + fprintf(stream, "[{name: test 0, side: FRONT}, {name: test 1, side: BACK}]\n"); + fseek(stream, seek, SEEK_SET); + + CHECK(solreceivers_setup_stream(receivers, NULL, stream), RES_OK); + CHECK(solreceivers_load(receivers), RES_OK); + CHECK(solreceivers_count(receivers), 2); + + solreceivers_get(receivers, 0, &receiver); + CHECK(strcmp(receiver.name, "test 0"), 0); + CHECK(receiver.side, SOLRECEIVER_FRONT); + + solreceivers_get(receivers, 1, &receiver); + CHECK(strcmp(receiver.name, "test 1"), 0); + CHECK(receiver.side, SOLRECEIVER_BACK); + + fclose(stream); + solreceivers_ref_put(receivers); + + check_memory_allocator(&allocator); + mem_shutdown_proxy_allocator(&allocator); + CHECK(mem_allocated_size(), 0); + return 0; +} diff --git a/src/receivers/yaml/test_ko.yaml b/src/receivers/yaml/test_ko.yaml @@ -0,0 +1,20 @@ +- side: FRONT_AND_BACK +--- +- name: test + side: front +--- +- name: test + side: back +--- +- name: test + side: front_and_back +--- +- name: test + name: hello +--- +- name: test + side: FRONT + side: BACK +--- +- name: test +- diff --git a/src/receivers/yaml/test_ok.yaml b/src/receivers/yaml/test_ok.yaml @@ -0,0 +1,16 @@ +- name: "entity0" + side: FRONT_AND_BACK +- name: entity 0 bis + side: BACK +- { name: name, side: FRONT } +- name: ok +- {name: ok} +- side: FRONT + name: hello +- {side: BACK, name: "world" } +--- +[ + {name: test}, + {side: FRONT_AND_BACK, name: "Hello world"}, + {name: Hello world, side: BACK} +]