star-mesh

Define and load a binary data format for meshes
git clone git://git.meso-star.fr/star-mesh.git
Log | Files | Refs | README | LICENSE

commit 7a0bdc13aee4fb8291e1e3169662f79ecf5659e2
parent 82fb7a980b0a90b7ee3b9a106324f4336910e16d
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 15 Mar 2022 10:29:34 +0100

Update the loading test

Diffstat:
Msrc/test_smsh_load.c | 56++++++++++++++++++++++++++------------------------------
1 file changed, 26 insertions(+), 30 deletions(-)

diff --git a/src/test_smsh_load.c b/src/test_smsh_load.c @@ -65,7 +65,7 @@ check_smsh_desc } static void -test_load_tetrahedra(struct smsh* smsh) +test_load_mesh(struct smsh* smsh, const uint32_t dnode, const uint32_t dcell) { struct smsh_desc desc = SMSH_DESC_NULL; FILE* fp = NULL; @@ -73,9 +73,7 @@ test_load_tetrahedra(struct smsh* smsh) const uint64_t pagesize = 16384; const uint64_t nnodes = 287; const uint64_t ncells = 192; - const unsigned dnode = 3; - const unsigned dcell = 3; - size_t i; + size_t i, j; char byte = 0; ASSERT(smsh); @@ -94,11 +92,10 @@ test_load_tetrahedra(struct smsh* smsh) /* Write vertex nodes */ FOR_EACH(i, 0, nnodes) { - double pos[3]; - pos[0] = (double)i + 0.0; - pos[1] = (double)i + 0.1; - pos[2] = (double)i + 0.2; - CHK(fwrite(pos, sizeof(*pos), 3, fp) == 3); + FOR_EACH(j, 0, dnode) { + const double dbl = (double)i + (double)j * 0.1; + CHK(fwrite(&dbl, sizeof(dbl), 1, fp) == 1); + } } /* Padding */ @@ -106,12 +103,10 @@ test_load_tetrahedra(struct smsh* smsh) /* Write tetrahedra */ FOR_EACH(i, 0, ncells) { - uint64_t ids[4]; - ids[0] = (i*4 + 0) % nnodes; - ids[1] = (i*4 + 1) % nnodes; - ids[2] = (i*4 + 2) % nnodes; - ids[3] = (i*4 + 3) % nnodes; - CHK(fwrite(ids, sizeof(*ids), 4, fp) == 4); + FOR_EACH(j, 0, dcell) { + const uint64_t ui64 = (i*dcell + j) % nnodes; + CHK(fwrite(&ui64, sizeof(ui64), 1, fp) == 1); + } } /* Padding. Write one char to position the EOF indicator */ @@ -205,6 +200,7 @@ test_load_files(struct smsh* smsh, int argc, char** argv) CHK(smsh); FOR_EACH(i, 1, argc) { struct smsh_desc desc = SMSH_DESC_NULL; + size_t j; size_t inode; size_t icell; @@ -213,23 +209,21 @@ test_load_files(struct smsh* smsh, int argc, char** argv) CHK(smsh_get_desc(smsh, &desc) == RES_OK); FOR_EACH(inode, 0, desc.nnodes) { - const double* pos = smsh_desc_get_node(&desc, inode); - CHK(pos[0] == pos[0]); /* !NaN */ - CHK(pos[1] == pos[1]); /* !NaN */ - CHK(pos[2] == pos[2]); /* !NaN */ - CHK(!IS_INF(pos[0])); - CHK(!IS_INF(pos[1])); - CHK(!IS_INF(pos[2])); + const double* node = smsh_desc_get_node(&desc, inode); + FOR_EACH(j, 0, desc.dnode) { + CHK(node[j] == node[j]); /* !NaN */ + CHK(!IS_INF(node[j])); + } } FOR_EACH(icell, 0, desc.ncells) { const uint64_t* ids = smsh_desc_get_cell(&desc, icell); - /* Check non degenerated tetrahedron */ - CHK(ids[0] != ids[1]); - CHK(ids[0] != ids[2]); - CHK(ids[0] != ids[3]); - CHK(ids[1] != ids[2]); - CHK(ids[1] != ids[3]); - CHK(ids[2] != ids[3]); + FOR_EACH(j, 0, desc.dcell) { + size_t k; + FOR_EACH(k, 0, desc.dcell) { + if(k == j) continue; + CHK(ids[j] != ids[k]); /* Check non degenerated cell */ + } + } } } } @@ -246,7 +240,9 @@ main(int argc, char** argv) CHK(smsh_create(&args, &smsh) == RES_OK); - test_load_tetrahedra(smsh); + test_load_mesh(smsh, 3, 4); /* Tetrahedra */ + test_load_mesh(smsh, 3, 3); /* Triangles 3D */ + test_load_mesh(smsh, 2, 3); /* Triangles 2D */ test_load_fail(smsh); test_load_files(smsh, argc, argv);