From 10bf55f18f9ec5b04ae13f7466a54340d4d9c70d Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Mon, 14 Sep 2015 11:10:19 +0200 Subject: [PATCH] tests: add test_stl_internal.c --- tests/CMakeLists.txt | 1 + tests/main_test_stl.c | 4 ++ tests/test_stl_internal.c | 104 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 tests/test_stl_internal.c diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a67d43a..1bb02c0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -52,6 +52,7 @@ add_executable( EXCLUDE_FROM_ALL main_test_stl.c test_stl_io.c + test_stl_internal.c stl_utils.c utils.c ../src/gmio_stl/internal/stl_rw_common.c) diff --git a/tests/main_test_stl.c b/tests/main_test_stl.c index 5caa726..cc83006 100644 --- a/tests/main_test_stl.c +++ b/tests/main_test_stl.c @@ -15,6 +15,8 @@ #include "utest_lib.h" +const char* test_stl_internal__rw_common(); + const char* test_stl_read(); const char* test_stlb_write_header(); const char* test_stlb_write(); @@ -24,6 +26,8 @@ const char* all_tests() { UTEST_SUITE_START(); + UTEST_RUN(test_stl_internal__rw_common); + UTEST_RUN(test_stl_read); UTEST_RUN(test_stlb_write_header); UTEST_RUN(test_stlb_write); diff --git a/tests/test_stl_internal.c b/tests/test_stl_internal.c new file mode 100644 index 0000000..84e7116 --- /dev/null +++ b/tests/test_stl_internal.c @@ -0,0 +1,104 @@ +/**************************************************************************** +** gmio +** Copyright Fougue (2 Mar. 2015) +** contact@fougue.pro +** +** This software is a reusable library whose purpose is to provide complete +** I/O support for various CAD file formats (eg. STL) +** +** This software is governed by the CeCILL-B license under French law and +** abiding by the rules of distribution of free software. You can use, +** modify and/ or redistribute the software under the terms of the CeCILL-B +** license as circulated by CEA, CNRS and INRIA at the following URL +** "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html". +****************************************************************************/ + +#include "utest_assert.h" + +#include "stl_utils.h" + +#include "../src/gmio_core/error.h" +#include "../src/gmio_stl/internal/stl_rw_common.h" +#include "../src/gmio_stl/stl_error.h" +#include "../src/gmio_stl/stl_io.h" + +#include + +const char* test_stl_internal__rw_common() +{ + /* gmio_check_transfer() */ + { + int error = GMIO_ERROR_OK; + uint8_t buff[128] = {0}; + gmio_transfer_t trsf = {0}; + + UTEST_ASSERT(!gmio_check_transfer(&error, NULL)); + UTEST_ASSERT(error == GMIO_ERROR_NULL_TRANSFER); + + UTEST_ASSERT(!gmio_check_transfer(&error, &trsf)); + UTEST_ASSERT(error == GMIO_ERROR_NULL_BUFFER); + + trsf.buffer = gmio_buffer(&buff[0], 0, NULL); + UTEST_ASSERT(!gmio_check_transfer(&error, &trsf)); + UTEST_ASSERT(error == GMIO_ERROR_INVALID_BUFFER_SIZE); + + /* Verify that gmio_check_transfer() doesn't touch error when in case of + * success */ + trsf.buffer = gmio_buffer(&buff[0], sizeof(buff), NULL); + UTEST_ASSERT(!gmio_check_transfer(&error, &trsf)); + UTEST_ASSERT(error == GMIO_ERROR_INVALID_BUFFER_SIZE); + + error = GMIO_ERROR_OK; + UTEST_ASSERT(gmio_check_transfer(&error, &trsf)); + UTEST_ASSERT(error == GMIO_ERROR_OK); + } + + /* gmio_stl_check_mesh() */ + { + int error = GMIO_ERROR_OK; + gmio_stl_mesh_t mesh = {0}; + + UTEST_ASSERT(!gmio_stl_check_mesh(&error, NULL)); + UTEST_ASSERT(error == GMIO_STL_ERROR_NULL_GET_TRIANGLE_FUNC); + + mesh.triangle_count = 100; + UTEST_ASSERT(!gmio_stl_check_mesh(&error, &mesh)); + UTEST_ASSERT(error == GMIO_STL_ERROR_NULL_GET_TRIANGLE_FUNC); + + /* Verify that gmio_stl_check_mesh() doesn't touch error when in case of + * success */ + mesh.triangle_count = 0; + mesh.func_get_triangle = &gmio_stl_nop_get_triangle; + UTEST_ASSERT(!gmio_stl_check_mesh(&error, &mesh)); + UTEST_ASSERT(error == GMIO_STL_ERROR_NULL_GET_TRIANGLE_FUNC); + + error = GMIO_ERROR_OK; + UTEST_ASSERT(gmio_stl_check_mesh(&error, &mesh)); + UTEST_ASSERT(error == GMIO_ERROR_OK); + } + + /* gmio_stlb_check_params() */ + { + int error = GMIO_ERROR_OK; + gmio_transfer_t trsf = {0}; + uint8_t buff[1024] = {0}; + + UTEST_ASSERT(!gmio_stlb_check_params(&error, NULL, GMIO_ENDIANNESS_HOST)); + UTEST_ASSERT(error == GMIO_ERROR_NULL_TRANSFER); + + error = GMIO_ERROR_OK; + trsf.buffer = gmio_buffer(&buff[0], GMIO_STLB_MIN_CONTENTS_SIZE / 2, NULL); + UTEST_ASSERT(!gmio_stlb_check_params(&error, &trsf, GMIO_ENDIANNESS_HOST)); + UTEST_ASSERT(error == GMIO_ERROR_INVALID_BUFFER_SIZE); + + error = GMIO_ERROR_OK; + trsf.buffer = gmio_buffer(&buff[0], sizeof(buff), NULL); + UTEST_ASSERT(gmio_stlb_check_params(&error, &trsf, GMIO_ENDIANNESS_HOST)); + UTEST_ASSERT(error == GMIO_ERROR_OK); + + UTEST_ASSERT(!gmio_stlb_check_params(&error, &trsf, GMIO_ENDIANNESS_UNKNOWN)); + UTEST_ASSERT(error == GMIO_STL_ERROR_UNSUPPORTED_BYTE_ORDER); + } + + return NULL; +}