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:
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}
+]