commit c19eb02ef78e13b4b5290a2ce4dd48c50fb318d0
parent 5e32fe8a48d0f6722e1984b051ba172872a2f650
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Fri, 15 Dec 2017 15:47:55 +0100
Test the medium API
Diffstat:
4 files changed, 135 insertions(+), 2 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -101,6 +101,7 @@ if(NOT NO_TEST)
new_test(test_sdis_data)
new_test(test_sdis_device)
+ new_test(test_sdis_medium)
endif()
################################################################################
diff --git a/src/sdis_medium.c b/src/sdis_medium.c
@@ -115,7 +115,7 @@ sdis_fluid_create
struct sdis_medium* medium = NULL;
res_T res = RES_OK;
- if(!shader || !out_medium) {
+ if(!dev || !shader || !out_medium) {
res = RES_BAD_ARG;
goto error;
}
@@ -160,7 +160,7 @@ sdis_solid_create
struct sdis_medium* medium = NULL;
res_T res = RES_OK;
- if(!shader || !out_medium) {
+ if(!dev || !shader || !out_medium) {
res = RES_BAD_ARG;
goto error;
}
diff --git a/src/test_sdis_medium.c b/src/test_sdis_medium.c
@@ -0,0 +1,105 @@
+/* Copyright (C) |Meso|Star> 2016-2017 (contact@meso-star.com)
+ *
+ * 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 "sdis.h"
+#include "test_sdis_utils.h"
+
+int
+main(int argc, char** argv)
+{
+ struct mem_allocator allocator;
+ struct sdis_device* dev = NULL;
+ struct sdis_medium* fluid = NULL;
+ struct sdis_medium* solid = NULL;
+ struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER;
+ struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER;
+ (void)argc, (void)argv;
+
+ CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
+ CHK(sdis_device_create
+ (NULL, &allocator, SDIS_NTHREADS_DEFAULT, 0, &dev) == RES_OK);
+
+ CHK(sdis_fluid_create(NULL, NULL, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(dev, NULL, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(NULL, &fluid_shader, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(dev, &fluid_shader, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(NULL, NULL, NULL, &fluid) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(dev, NULL, NULL, &fluid) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(NULL, &fluid_shader, NULL, &fluid) == RES_BAD_ARG);
+ CHK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid) == RES_OK);
+
+ CHK(sdis_medium_ref_get(NULL) == RES_BAD_ARG);
+ CHK(sdis_medium_ref_get(fluid) == RES_OK);
+ CHK(sdis_medium_ref_put(NULL) == RES_BAD_ARG);
+ CHK(sdis_medium_ref_put(fluid) == RES_OK);
+ CHK(sdis_medium_ref_put(fluid) == RES_OK);
+
+ fluid_shader.calorific_capacity = NULL;
+ CHK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid) == RES_BAD_ARG);
+ fluid_shader.calorific_capacity = DUMMY_FLUID_SHADER.calorific_capacity;
+
+ fluid_shader.volumic_mass = NULL;
+ CHK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid) == RES_BAD_ARG);
+ fluid_shader.volumic_mass = DUMMY_FLUID_SHADER.volumic_mass;
+
+ fluid_shader.initial_temperature = NULL;
+ CHK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid) == RES_BAD_ARG);
+ fluid_shader.initial_temperature = DUMMY_FLUID_SHADER.initial_temperature;
+
+ CHK(sdis_fluid_create
+ (dev, &SDIS_FLUID_SHADER_NULL, NULL, &fluid) == RES_BAD_ARG);
+
+ CHK(sdis_solid_create(NULL, NULL, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_solid_create(dev, NULL, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_solid_create(NULL, &solid_shader, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, NULL) == RES_BAD_ARG);
+ CHK(sdis_solid_create(NULL, NULL, NULL, &solid) == RES_BAD_ARG);
+ CHK(sdis_solid_create(dev, NULL, NULL, &solid) == RES_BAD_ARG);
+ CHK(sdis_solid_create(NULL, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_OK);
+ CHK(sdis_medium_ref_put(solid) == RES_OK);
+
+ solid_shader.calorific_capacity = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.calorific_capacity = DUMMY_SOLID_SHADER.calorific_capacity;
+
+ solid_shader.thermal_conductivity = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.thermal_conductivity = DUMMY_SOLID_SHADER.thermal_conductivity;
+
+ solid_shader.volumic_mass = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.volumic_mass = DUMMY_SOLID_SHADER.volumic_mass;
+
+ solid_shader.delta_solid = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.delta_solid = DUMMY_SOLID_SHADER.delta_solid;
+
+ solid_shader.delta_boundary = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.delta_boundary = DUMMY_SOLID_SHADER.delta_boundary;
+
+ solid_shader.initial_temperature = NULL;
+ CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_BAD_ARG);
+ solid_shader.initial_temperature = DUMMY_SOLID_SHADER.initial_temperature;
+
+ CHK(sdis_device_ref_put(dev) == RES_OK);
+
+ check_memory_allocator(&allocator);
+ mem_shutdown_proxy_allocator(&allocator);
+ CHK(mem_allocated_size() == 0);
+
+ return 0;
+}
diff --git a/src/test_sdis_utils.h b/src/test_sdis_utils.h
@@ -20,6 +20,33 @@
#include <stdio.h>
static INLINE void
+dummy_getter
+ (struct sdis_device* dev,
+ struct sdis_data* data,
+ const struct sdis_rwalk_vertex* vert,
+ double* val)
+{
+ (void)dev, (void)data;
+ CHK(val != NULL && vert != NULL);
+ *val = 1;
+}
+
+static const struct sdis_solid_shader DUMMY_SOLID_SHADER = {
+ dummy_getter,
+ dummy_getter,
+ dummy_getter,
+ dummy_getter,
+ dummy_getter,
+ dummy_getter
+};
+
+static const struct sdis_fluid_shader DUMMY_FLUID_SHADER = {
+ dummy_getter,
+ dummy_getter,
+ dummy_getter
+};
+
+static INLINE void
check_memory_allocator(struct mem_allocator* allocator)
{
if(MEM_ALLOCATED_SIZE(allocator)) {