test_senc3d_zero_distance.c (31542B)
1 /* Copyright (C) 2018-2020, 2023, 2024 |Méso|Star> (contact@meso-star.com) 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16 /* This test has been created using the sg3_geometry_dump_as_C_code feature 17 * of star-geometry. It uses output from test_sg3_cube_on_cube. */ 18 19 #define _POSIX_C_SOURCE 200112L /* snprintf */ 20 21 #include "senc3d.h" 22 #include "test_senc3d_utils.h" 23 24 #include <rsys/double3.h> 25 26 #include <stdio.h> 27 28 /* Tests created using -c option of stardis */ 29 30 /* zero_1 geometry is made of a big distorded cube, that as a single highest 31 * vertex V, and two internal shapes (highly distorded cubes) that joint at the 32 * same V vertex. Distance between the 6 components (inside and outside of each 33 * shape) is zero. */ 34 #define zero_1_UNSPECIFIED_PROPERTY 4294967295 35 36 static const unsigned 37 zero_1_vertices_count = 22; 38 39 static const unsigned 40 zero_1_triangles_count = 36; 41 42 static const double 43 zero_1_vertices[22][3] = { 44 { 10, 10, 0 }, 45 { 10, 0, 0 }, 46 { 0, 10, 0 }, 47 { 0, 0, 0 }, 48 { 0, 10, 10 }, 49 { 0, 0, 10 }, 50 { 10, 0, 10 }, 51 { 9, 9, 11 }, 52 { 8, 9, 1 }, 53 { 4, 7, 1 }, 54 { 1, 9, 1 }, 55 { 1, 2, 1 }, 56 { 1, 9, 9 }, 57 { 1, 2, 9 }, 58 { 4, 7, 9 }, 59 { 7, 5, 1 }, 60 { 9, 8, 1 }, 61 { 9, 1, 1 }, 62 { 2, 1, 1 }, 63 { 2, 1, 9 }, 64 { 9, 1, 9 }, 65 { 7, 4, 9 } 66 }; 67 68 static const unsigned 69 zero_1_triangles[36][3] = { 70 { 0, 1, 2 }, 71 { 1, 3, 2 }, 72 { 4, 5, 6 }, 73 { 7, 4, 6 }, 74 { 2, 3, 4 }, 75 { 3, 5, 4 }, 76 { 6, 1, 7 }, 77 { 1, 0, 7 }, 78 { 0, 2, 4 }, 79 { 7, 0, 4 }, 80 { 5, 3, 1 }, 81 { 6, 5, 1 }, 82 { 8, 9, 10 }, 83 { 9, 11, 10 }, 84 { 12, 13, 14 }, 85 { 7, 12, 14 }, 86 { 10, 11, 12 }, 87 { 11, 13, 12 }, 88 { 14, 9, 7 }, 89 { 9, 8, 7 }, 90 { 8, 10, 12 }, 91 { 7, 8, 12 }, 92 { 13, 11, 9 }, 93 { 14, 13, 9 }, 94 { 15, 16, 17 }, 95 { 18, 15, 17 }, 96 { 19, 20, 21 }, 97 { 20, 7, 21 }, 98 { 18, 17, 20 }, 99 { 19, 18, 20 }, 100 { 15, 21, 7 }, 101 { 16, 15, 7 }, 102 { 17, 16, 20 }, 103 { 16, 7, 20 }, 104 { 18, 19, 15 }, 105 { 19, 21, 15 } 106 }; 107 108 static const unsigned 109 zero_1_properties[36][3] = { 110 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 111 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 112 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 113 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 114 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 115 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 116 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 117 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 118 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 119 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 120 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 121 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 122 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 123 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 124 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 125 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 126 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 127 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 128 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 129 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 130 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 131 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 132 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 133 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 134 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 135 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 136 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 137 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 138 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 139 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 140 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 141 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 142 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 143 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 144 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 145 { 1, 0, zero_1_UNSPECIFIED_PROPERTY } 146 }; 147 148 /* zero_1d is similar as zero_1, with geometry duplicated in mirror along Z axis */ 149 static const unsigned 150 zero_1d_vertices_count = 44; 151 152 static const unsigned 153 zero_1d_triangles_count = 72; 154 155 static const double 156 zero_1d_vertices[44][3] = { 157 { 10, 10, -11 }, 158 { 10, 0, -11 }, 159 { 0, 10, -11 }, 160 { 0, 0, -11 }, 161 { 0, 10, -1 }, 162 { 0, 0, -1 }, 163 { 10, 0, -1 }, 164 { 9, 9, 0 }, 165 { 8, 9, -10 }, 166 { 4, 7, -10 }, 167 { 1, 9, -10 }, 168 { 1, 2, -10 }, 169 { 1, 9, -2 }, 170 { 1, 2, -2 }, 171 { 4, 7, -2 }, 172 { 7, 5, -10 }, 173 { 9, 8, -10 }, 174 { 9, 1, -10 }, 175 { 2, 1, -10 }, 176 { 2, 1, -2 }, 177 { 9, 1, -2 }, 178 { 7, 4, -2 }, 179 { 10, 10, 11 }, 180 { 10, 0, 11 }, 181 { 0, 10, 11 }, 182 { 0, 0, 11 }, 183 { 0, 10, 1 }, 184 { 0, 0, 1 }, 185 { 10, 0, 1 }, 186 { 9, 9, 0.1 }, /* Vertex #29 == vertex #7 => keep a dummy placeholder here and use #7 instead in triangles */ 187 { 8, 9, 10 }, 188 { 4, 7, 10 }, 189 { 1, 9, 10 }, 190 { 1, 2, 10 }, 191 { 1, 9, 2 }, 192 { 1, 2, 2 }, 193 { 4, 7, 2 }, 194 { 7, 5, 10 }, 195 { 9, 8, 10 }, 196 { 9, 1, 10 }, 197 { 2, 1, 10 }, 198 { 2, 1, 2 }, 199 { 9, 1, 2 }, 200 { 7, 4, 2 } 201 }; 202 203 static const unsigned 204 zero_1d_triangles[72][3] = { 205 { 0, 1, 2 }, 206 { 1, 3, 2 }, 207 { 4, 5, 6 }, 208 { 7, 4, 6 }, 209 { 2, 3, 4 }, 210 { 3, 5, 4 }, 211 { 6, 1, 7 }, 212 { 1, 0, 7 }, 213 { 0, 2, 4 }, 214 { 7, 0, 4 }, 215 { 5, 3, 1 }, 216 { 6, 5, 1 }, 217 { 8, 9, 10 }, 218 { 9, 11, 10 }, 219 { 12, 13, 14 }, 220 { 7, 12, 14 }, 221 { 10, 11, 12 }, 222 { 11, 13, 12 }, 223 { 14, 9, 7 }, 224 { 9, 8, 7 }, 225 { 8, 10, 12 }, 226 { 7, 8, 12 }, 227 { 13, 11, 9 }, 228 { 14, 13, 9 }, 229 { 15, 16, 17 }, 230 { 18, 15, 17 }, 231 { 19, 20, 21 }, 232 { 20, 7, 21 }, 233 { 18, 17, 20 }, 234 { 19, 18, 20 }, 235 { 15, 21, 7 }, 236 { 16, 15, 7 }, 237 { 17, 16, 20 }, 238 { 16, 7, 20 }, 239 { 18, 19, 15 }, 240 { 19, 21, 15 }, 241 { 22, 23, 24 }, 242 { 23, 25, 24 }, 243 { 26, 27, 28 }, 244 { 7, 26, 28 }, 245 { 24, 25, 26 }, 246 { 25, 27, 26 }, 247 { 28, 23, 7 }, 248 { 23, 22, 7 }, 249 { 22, 24, 26 }, 250 { 7, 22, 26 }, 251 { 27, 25, 23 }, 252 { 28, 27, 23 }, 253 { 30, 31, 32 }, 254 { 31, 33, 32 }, 255 { 34, 35, 36 }, 256 { 7, 34, 36 }, 257 { 32, 33, 34 }, 258 { 33, 35, 34 }, 259 { 36, 31, 7 }, 260 { 31, 30, 7 }, 261 { 30, 32, 34 }, 262 { 7, 30, 34 }, 263 { 35, 33, 31 }, 264 { 36, 35, 31 }, 265 { 37, 38, 39 }, 266 { 40, 37, 39 }, 267 { 41, 42, 43 }, 268 { 42, 7, 43 }, 269 { 40, 39, 42 }, 270 { 41, 40, 42 }, 271 { 37, 43, 7 }, 272 { 38, 37, 7 }, 273 { 39, 38, 42 }, 274 { 38, 7, 42 }, 275 { 40, 41, 37 }, 276 { 41, 43, 37 } 277 }; 278 279 static const unsigned 280 zero_1d_properties[72][3] = { 281 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 282 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 283 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 284 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 285 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 286 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 287 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 288 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 289 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 290 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 291 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 292 { 0, zero_1_UNSPECIFIED_PROPERTY, 2 }, 293 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 294 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 295 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 296 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 297 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 298 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 299 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 300 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 301 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 302 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 303 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 304 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 305 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 306 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 307 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 308 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 309 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 310 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 311 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 312 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 313 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 314 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 315 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 316 { 1, 0, zero_1_UNSPECIFIED_PROPERTY }, 317 318 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 319 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 320 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 321 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 322 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 323 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 324 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 325 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 326 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 327 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 328 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 329 { zero_1_UNSPECIFIED_PROPERTY, 0, 2 }, 330 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 331 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 332 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 333 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 334 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 335 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 336 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 337 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 338 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 339 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 340 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 341 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 342 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 343 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 344 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 345 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 346 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 347 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 348 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 349 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 350 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 351 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 352 { 0, 1, zero_1_UNSPECIFIED_PROPERTY }, 353 { 0, 1, zero_1_UNSPECIFIED_PROPERTY } 354 }; 355 356 /* zero_1D is similar as zero_1d, with a tiny distance between mirrored 357 * geometries */ 358 static const double 359 zero_1D_vertices[44][3] = { 360 { 10, 10, -11 }, 361 { 10, 0, -11 }, 362 { 0, 10, -11 }, 363 { 0, 0, -11 }, 364 { 0, 10, -1 }, 365 { 0, 0, -1 }, 366 { 10, 0, -1 }, 367 { 9, 9, 0 }, 368 { 8, 9, -10 }, 369 { 4, 7, -10 }, 370 { 1, 9, -10 }, 371 { 1, 2, -10 }, 372 { 1, 9, -2 }, 373 { 1, 2, -2 }, 374 { 4, 7, -2 }, 375 { 7, 5, -10 }, 376 { 9, 8, -10 }, 377 { 9, 1, -10 }, 378 { 2, 1, -10 }, 379 { 2, 1, -2 }, 380 { 9, 1, -2 }, 381 { 7, 4, -2 }, 382 { 10, 10, 11 }, 383 { 10, 0, 11 }, 384 { 0, 10, 11 }, 385 { 0, 0, 11 }, 386 { 0, 10, 1 }, 387 { 0, 0, 1 }, 388 { 10, 0, 1 }, 389 { 9, 9, 1e-30 }, 390 { 8, 9, 10 }, 391 { 4, 7, 10 }, 392 { 1, 9, 10 }, 393 { 1, 2, 10 }, 394 { 1, 9, 2 }, 395 { 1, 2, 2 }, 396 { 4, 7, 2 }, 397 { 7, 5, 10 }, 398 { 9, 8, 10 }, 399 { 9, 1, 10 }, 400 { 2, 1, 10 }, 401 { 2, 1, 2 }, 402 { 9, 1, 2 }, 403 { 7, 4, 2 } 404 }; 405 406 #define zero_1D_triangles zero_1d_triangles 407 408 #define zero_1D_properties zero_1d_properties 409 static unsigned zero_1D_triangles_count = zero_1d_triangles_count; 410 static unsigned zero_1D_vertices_count = zero_1d_vertices_count; 411 412 /* zero_2 geometry is made of 5 nested distorded cubes of decreasing sizes, that 413 * all join at a single vertex V (the highest vertex in the model). Distance between 414 * the 10 components (inside and outside of each shape) is zero. */ 415 #define zero_2_UNSPECIFIED_PROPERTY 4294967295 416 417 static const unsigned 418 zero_2_vertices_count = 36; 419 420 static const unsigned 421 zero_2_triangles_count = 60; 422 423 static const double 424 zero_2_vertices[36][3] = { 425 { 0, 10, 0 }, 426 { 0, 0, 0 }, 427 { 0, 10, 10 }, 428 { 0, 0, 10 }, 429 { 10, 0, 10 }, 430 { 10, 0, 0 }, 431 { 9, 9, 11 }, 432 { 10, 10, 0 }, 433 { 1, 9, 1 }, 434 { 1, 1, 1 }, 435 { 1, 9, 9 }, 436 { 1, 1, 9 }, 437 { 9, 1, 9 }, 438 { 9, 1, 1 }, 439 { 9, 9, 1 }, 440 { 2, 8, 2 }, 441 { 2, 2, 2 }, 442 { 2, 8, 8 }, 443 { 2, 2, 8 }, 444 { 8, 2, 8 }, 445 { 8, 2, 2 }, 446 { 8, 8, 2 }, 447 { 3, 7, 3 }, 448 { 3, 3, 3 }, 449 { 3, 7, 7 }, 450 { 3, 3, 7 }, 451 { 7, 3, 7 }, 452 { 7, 3, 3 }, 453 { 7, 7, 3 }, 454 { 4, 6, 4 }, 455 { 4, 4, 4 }, 456 { 4, 6, 6 }, 457 { 4, 4, 6 }, 458 { 6, 4, 6 }, 459 { 6, 4, 4 }, 460 { 6, 6, 4 } 461 }; 462 463 static const unsigned 464 zero_2_triangles[60][3] = { 465 { 0, 1, 2 }, 466 { 1, 3, 2 }, 467 { 4, 5, 6 }, 468 { 5, 7, 6 }, 469 { 2, 3, 4 }, 470 { 6, 2, 4 }, 471 { 5, 1, 0 }, 472 { 7, 5, 0 }, 473 { 3, 1, 5 }, 474 { 4, 3, 5 }, 475 { 7, 0, 2 }, 476 { 6, 7, 2 }, 477 { 8, 9, 10 }, 478 { 9, 11, 10 }, 479 { 12, 13, 6 }, 480 { 13, 14, 6 }, 481 { 10, 11, 12 }, 482 { 6, 10, 12 }, 483 { 13, 9, 8 }, 484 { 14, 13, 8 }, 485 { 11, 9, 13 }, 486 { 12, 11, 13 }, 487 { 14, 8, 10 }, 488 { 6, 14, 10 }, 489 { 15, 16, 17 }, 490 { 16, 18, 17 }, 491 { 19, 20, 6 }, 492 { 20, 21, 6 }, 493 { 17, 18, 19 }, 494 { 6, 17, 19 }, 495 { 20, 16, 15 }, 496 { 21, 20, 15 }, 497 { 18, 16, 20 }, 498 { 19, 18, 20 }, 499 { 21, 15, 17 }, 500 { 6, 21, 17 }, 501 { 22, 23, 24 }, 502 { 23, 25, 24 }, 503 { 26, 27, 6 }, 504 { 27, 28, 6 }, 505 { 24, 25, 26 }, 506 { 6, 24, 26 }, 507 { 27, 23, 22 }, 508 { 28, 27, 22 }, 509 { 25, 23, 27 }, 510 { 26, 25, 27 }, 511 { 28, 22, 24 }, 512 { 6, 28, 24 }, 513 { 29, 30, 31 }, 514 { 30, 32, 31 }, 515 { 33, 34, 6 }, 516 { 34, 35, 6 }, 517 { 31, 32, 33 }, 518 { 6, 31, 33 }, 519 { 34, 30, 29 }, 520 { 35, 34, 29 }, 521 { 32, 30, 34 }, 522 { 33, 32, 34 }, 523 { 35, 29, 31 }, 524 { 6, 35, 31 } 525 }; 526 527 static const unsigned 528 zero_2_properties[60][3] = { 529 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 530 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 531 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 532 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 533 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 534 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 535 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 536 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 537 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 538 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 539 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 540 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 541 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 542 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 543 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 544 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 545 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 546 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 547 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 548 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 549 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 550 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 551 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 552 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 553 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 554 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 555 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 556 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 557 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 558 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 559 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 560 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 561 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 562 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 563 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 564 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 565 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 566 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 567 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 568 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 569 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 570 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 571 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 572 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 573 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 574 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 575 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 576 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 577 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 578 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 579 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 580 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 581 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 582 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 583 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 584 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 585 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 586 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 587 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 588 { 4, 3, zero_2_UNSPECIFIED_PROPERTY } 589 }; 590 591 /* zero_2d is similar as zero_2, with geometry duplicated in mirror along Z axis */ 592 static const unsigned 593 zero_2d_vertices_count = 72; 594 595 static const unsigned 596 zero_2d_triangles_count = 120; 597 598 static const double 599 zero_2d_vertices[72][3] = { 600 { 0, 10, -11 }, 601 { 0, 0, -11 }, 602 { 0, 10, -1 }, 603 { 0, 0, -1 }, 604 { 10, 0, -1 }, 605 { 10, 0, -11 }, 606 { 9, 9, 0 }, 607 { 10, 10, -11 }, 608 { 1, 9, -10 }, 609 { 1, 1, -10 }, 610 { 1, 9, -2 }, 611 { 1, 1, -2 }, 612 { 9, 1, -2 }, 613 { 9, 1, -10 }, 614 { 9, 9, -10 }, 615 { 2, 8, -9 }, 616 { 2, 2, -9 }, 617 { 2, 8, -3 }, 618 { 2, 2, -3 }, 619 { 8, 2, -3 }, 620 { 8, 2, -9 }, 621 { 8, 8, -9 }, 622 { 3, 7, -8 }, 623 { 3, 3, -8 }, 624 { 3, 7, -4 }, 625 { 3, 3, -4 }, 626 { 7, 3, -4 }, 627 { 7, 3, -8 }, 628 { 7, 7, -8 }, 629 { 4, 6, -7 }, 630 { 4, 4, -7 }, 631 { 4, 6, -5 }, 632 { 4, 4, -5 }, 633 { 6, 4, -5 }, 634 { 6, 4, -7 }, 635 { 6, 6, -7 }, 636 { 0, 10, 11 }, 637 { 0, 0, 11 }, 638 { 0, 10, 1 }, 639 { 0, 0, 1 }, 640 { 10, 0, 1 }, 641 { 10, 0, 11 }, 642 { 9, 9, 0.1 }, /* Vertex #42 == vertex #6 => keep a dummy placeholder here and use #6 instead in triangles */ 643 { 10, 10, 11 }, 644 { 1, 9, 10 }, 645 { 1, 1, 10 }, 646 { 1, 9, 2 }, 647 { 1, 1, 2 }, 648 { 9, 1, 2 }, 649 { 9, 1, 10 }, 650 { 9, 9, 10 }, 651 { 2, 8, 9 }, 652 { 2, 2, 9 }, 653 { 2, 8, 3 }, 654 { 2, 2, 3 }, 655 { 8, 2, 3 }, 656 { 8, 2, 9 }, 657 { 8, 8, 9 }, 658 { 3, 7, 8 }, 659 { 3, 3, 8 }, 660 { 3, 7, 4 }, 661 { 3, 3, 4 }, 662 { 7, 3, 4 }, 663 { 7, 3, 8 }, 664 { 7, 7, 8 }, 665 { 4, 6, 7 }, 666 { 4, 4, 7 }, 667 { 4, 6, 5 }, 668 { 4, 4, 5 }, 669 { 6, 4, 5 }, 670 { 6, 4, 7 }, 671 { 6, 6, 7 } 672 }; 673 674 static const unsigned 675 zero_2d_triangles[120][3] = { 676 { 0, 1, 2 }, 677 { 1, 3, 2 }, 678 { 4, 5, 6 }, 679 { 5, 7, 6 }, 680 { 2, 3, 4 }, 681 { 6, 2, 4 }, 682 { 5, 1, 0 }, 683 { 7, 5, 0 }, 684 { 3, 1, 5 }, 685 { 4, 3, 5 }, 686 { 7, 0, 2 }, 687 { 6, 7, 2 }, 688 { 8, 9, 10 }, 689 { 9, 11, 10 }, 690 { 12, 13, 6 }, 691 { 13, 14, 6 }, 692 { 10, 11, 12 }, 693 { 6, 10, 12 }, 694 { 13, 9, 8 }, 695 { 14, 13, 8 }, 696 { 11, 9, 13 }, 697 { 12, 11, 13 }, 698 { 14, 8, 10 }, 699 { 6, 14, 10 }, 700 { 15, 16, 17 }, 701 { 16, 18, 17 }, 702 { 19, 20, 6 }, 703 { 20, 21, 6 }, 704 { 17, 18, 19 }, 705 { 6, 17, 19 }, 706 { 20, 16, 15 }, 707 { 21, 20, 15 }, 708 { 18, 16, 20 }, 709 { 19, 18, 20 }, 710 { 21, 15, 17 }, 711 { 6, 21, 17 }, 712 { 22, 23, 24 }, 713 { 23, 25, 24 }, 714 { 26, 27, 6 }, 715 { 27, 28, 6 }, 716 { 24, 25, 26 }, 717 { 6, 24, 26 }, 718 { 27, 23, 22 }, 719 { 28, 27, 22 }, 720 { 25, 23, 27 }, 721 { 26, 25, 27 }, 722 { 28, 22, 24 }, 723 { 6, 28, 24 }, 724 { 29, 30, 31 }, 725 { 30, 32, 31 }, 726 { 33, 34, 6 }, 727 { 34, 35, 6 }, 728 { 31, 32, 33 }, 729 { 6, 31, 33 }, 730 { 34, 30, 29 }, 731 { 35, 34, 29 }, 732 { 32, 30, 34 }, 733 { 33, 32, 34 }, 734 { 35, 29, 31 }, 735 { 6, 35, 31 }, 736 { 36, 37, 38 }, 737 { 37, 39, 38 }, 738 { 40, 41, 6 }, 739 { 41, 43, 6 }, 740 { 38, 39, 40 }, 741 { 6, 38, 40 }, 742 { 41, 37, 36 }, 743 { 43, 41, 36 }, 744 { 39, 37, 41 }, 745 { 40, 39, 41 }, 746 { 43, 36, 38 }, 747 { 6, 43, 38 }, 748 { 44, 45, 46 }, 749 { 45, 47, 46 }, 750 { 48, 49, 6 }, 751 { 49, 50, 6 }, 752 { 46, 47, 48 }, 753 { 6, 46, 48 }, 754 { 49, 45, 44 }, 755 { 50, 49, 44 }, 756 { 47, 45, 49 }, 757 { 48, 47, 49 }, 758 { 50, 44, 46 }, 759 { 6, 50, 46 }, 760 { 51, 52, 53 }, 761 { 52, 54, 53 }, 762 { 55, 56, 6 }, 763 { 56, 57, 6 }, 764 { 53, 54, 55 }, 765 { 6, 53, 55 }, 766 { 56, 52, 51 }, 767 { 57, 56, 51 }, 768 { 54, 52, 56 }, 769 { 55, 54, 56 }, 770 { 57, 51, 53 }, 771 { 6, 57, 53 }, 772 { 58, 59, 60 }, 773 { 59, 61, 60 }, 774 { 62, 63, 6 }, 775 { 63, 64, 6 }, 776 { 60, 61, 62 }, 777 { 6, 60, 62 }, 778 { 63, 59, 58 }, 779 { 64, 63, 58 }, 780 { 61, 59, 63 }, 781 { 62, 61, 63 }, 782 { 64, 58, 60 }, 783 { 6, 64, 60 }, 784 { 65, 66, 67 }, 785 { 66, 68, 67 }, 786 { 69, 70, 6 }, 787 { 70, 71, 6 }, 788 { 67, 68, 69 }, 789 { 6, 67, 69 }, 790 { 70, 66, 65 }, 791 { 71, 70, 65 }, 792 { 68, 66, 70 }, 793 { 69, 68, 70 }, 794 { 71, 65, 67 }, 795 { 6, 71, 67 } 796 }; 797 798 static const unsigned 799 zero_2d_properties[120][3] = { 800 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 801 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 802 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 803 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 804 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 805 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 806 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 807 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 808 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 809 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 810 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 811 { 0, zero_2_UNSPECIFIED_PROPERTY, 5 }, 812 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 813 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 814 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 815 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 816 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 817 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 818 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 819 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 820 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 821 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 822 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 823 { 1, 0, zero_2_UNSPECIFIED_PROPERTY }, 824 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 825 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 826 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 827 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 828 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 829 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 830 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 831 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 832 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 833 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 834 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 835 { 2, 1, zero_2_UNSPECIFIED_PROPERTY }, 836 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 837 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 838 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 839 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 840 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 841 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 842 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 843 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 844 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 845 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 846 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 847 { 3, 2, zero_2_UNSPECIFIED_PROPERTY }, 848 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 849 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 850 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 851 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 852 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 853 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 854 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 855 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 856 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 857 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 858 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 859 { 4, 3, zero_2_UNSPECIFIED_PROPERTY }, 860 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 861 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 862 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 863 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 864 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 865 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 866 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 867 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 868 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 869 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 870 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 871 { zero_2_UNSPECIFIED_PROPERTY, 0, 5 }, 872 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 873 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 874 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 875 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 876 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 877 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 878 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 879 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 880 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 881 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 882 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 883 { 0, 1, zero_2_UNSPECIFIED_PROPERTY }, 884 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 885 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 886 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 887 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 888 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 889 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 890 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 891 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 892 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 893 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 894 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 895 { 1, 2, zero_2_UNSPECIFIED_PROPERTY }, 896 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 897 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 898 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 899 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 900 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 901 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 902 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 903 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 904 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 905 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 906 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 907 { 2, 3, zero_2_UNSPECIFIED_PROPERTY }, 908 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 909 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 910 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 911 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 912 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 913 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 914 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 915 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 916 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 917 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 918 { 3, 4, zero_2_UNSPECIFIED_PROPERTY }, 919 { 3, 4, zero_2_UNSPECIFIED_PROPERTY } 920 }; 921 922 /* zero_2D is similar as zero_2d, with a tiny distance between mirrored 923 * geometries */ 924 static const double 925 zero_2D_vertices[72][3] = { 926 { 0, 10, -11 }, 927 { 0, 0, -11 }, 928 { 0, 10, -1 }, 929 { 0, 0, -1 }, 930 { 10, 0, -1 }, 931 { 10, 0, -11 }, 932 { 9, 9, 0 }, 933 { 10, 10, -11 }, 934 { 1, 9, -10 }, 935 { 1, 1, -10 }, 936 { 1, 9, -2 }, 937 { 1, 1, -2 }, 938 { 9, 1, -2 }, 939 { 9, 1, -10 }, 940 { 9, 9, -10 }, 941 { 2, 8, -9 }, 942 { 2, 2, -9 }, 943 { 2, 8, -3 }, 944 { 2, 2, -3 }, 945 { 8, 2, -3 }, 946 { 8, 2, -9 }, 947 { 8, 8, -9 }, 948 { 3, 7, -8 }, 949 { 3, 3, -8 }, 950 { 3, 7, -4 }, 951 { 3, 3, -4 }, 952 { 7, 3, -4 }, 953 { 7, 3, -8 }, 954 { 7, 7, -8 }, 955 { 4, 6, -7 }, 956 { 4, 4, -7 }, 957 { 4, 6, -5 }, 958 { 4, 4, -5 }, 959 { 6, 4, -5 }, 960 { 6, 4, -7 }, 961 { 6, 6, -7 }, 962 { 0, 10, 11 }, 963 { 0, 0, 11 }, 964 { 0, 10, 1 }, 965 { 0, 0, 1 }, 966 { 10, 0, 1 }, 967 { 10, 0, 11 }, 968 { 9, 9, 1e-30 }, 969 { 10, 10, 11 }, 970 { 1, 9, 10 }, 971 { 1, 1, 10 }, 972 { 1, 9, 2 }, 973 { 1, 1, 2 }, 974 { 9, 1, 2 }, 975 { 9, 1, 10 }, 976 { 9, 9, 10 }, 977 { 2, 8, 9 }, 978 { 2, 2, 9 }, 979 { 2, 8, 3 }, 980 { 2, 2, 3 }, 981 { 8, 2, 3 }, 982 { 8, 2, 9 }, 983 { 8, 8, 9 }, 984 { 3, 7, 8 }, 985 { 3, 3, 8 }, 986 { 3, 7, 4 }, 987 { 3, 3, 4 }, 988 { 7, 3, 4 }, 989 { 7, 3, 8 }, 990 { 7, 7, 8 }, 991 { 4, 6, 7 }, 992 { 4, 4, 7 }, 993 { 4, 6, 5 }, 994 { 4, 4, 5 }, 995 { 6, 4, 5 }, 996 { 6, 4, 7 }, 997 { 6, 6, 7 } 998 }; 999 1000 #define zero_2D_triangles zero_2d_triangles 1001 1002 #define zero_2D_properties zero_2d_properties 1003 static unsigned zero_2D_triangles_count = zero_2d_triangles_count; 1004 static unsigned zero_2D_vertices_count = zero_2d_vertices_count; 1005 1006 1007 /* Enclosures' order is consistent accross runs as they are sorted by triangle 1008 * sides, thus allowing to expect a given order */ 1009 struct expected { 1010 unsigned enclosure_count; /* max 16 */ 1011 double volume[16]; /* the volume of the expected enclosures */ 1012 unsigned medium[16]; /* the single medium of the expected enclosures */ 1013 }; 1014 1015 static int 1016 test 1017 (const double* positions, 1018 const unsigned* indices, 1019 const unsigned* properties, 1020 const unsigned triangles_count, 1021 const unsigned vertices_count, 1022 const struct expected* expected) 1023 { 1024 struct mem_allocator allocator; 1025 struct senc3d_device* dev = NULL; 1026 struct senc3d_scene* scn = NULL; 1027 struct context ctx = CONTEXT_NULL__; 1028 unsigned count, e, n; 1029 1030 OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator)); 1031 OK(senc3d_device_create(NULL, &allocator, SENC3D_NTHREADS_DEFAULT, 1, &dev)); 1032 1033 FOR_EACH(n, 0, 2) { 1034 /* Create a scene with 4 enclosures joining at a single vertex. */ 1035 ctx.positions = positions; 1036 ctx.indices = indices; 1037 ctx.properties = properties; 1038 1039 /* If n==1, same model with symmetry / origin 1040 * (need to reverse vertices' order to keep same inside/outside) */ 1041 ctx.scale = (n == 1) ? -1 : +1; 1042 ctx.reverse_vrtx = (n == 1) ? 1 : 0; 1043 1044 OK(senc3d_scene_create(dev, 1045 SENC3D_CONVENTION_NORMAL_BACK | SENC3D_CONVENTION_NORMAL_OUTSIDE, 1046 triangles_count, get_indices, get_media_from_properties, 1047 vertices_count, get_position, &ctx, &scn)); 1048 1049 OK(senc3d_scene_get_vertices_count(scn, &count)); 1050 CHK(count == vertices_count); 1051 1052 OK(senc3d_scene_get_triangles_count(scn, &count)); 1053 CHK(count == triangles_count); 1054 1055 OK(senc3d_scene_get_enclosure_count(scn, &count)); 1056 CHK(count == expected->enclosure_count); 1057 1058 FOR_EACH(e, 0, count) { 1059 struct senc3d_enclosure* enclosure; 1060 struct senc3d_enclosure_header header; 1061 unsigned m; 1062 char name[128]; (void)name; 1063 OK(senc3d_scene_get_enclosure(scn, e, &enclosure)); 1064 OK(senc3d_enclosure_get_header(enclosure, &header)); 1065 CHK(header.enclosed_media_count == 1); 1066 OK(senc3d_enclosure_get_medium(enclosure, 0, &m)); 1067 CHK(m == expected->medium[e]); 1068 CHK(eq_eps(header.volume, expected->volume[e], 0.01)); 1069 OK(senc3d_enclosure_ref_put(enclosure)); 1070 #ifdef DUMP_ENCLOSURES 1071 snprintf(name, sizeof(name), "test_zero_distance_%u.obj", e); 1072 dump_enclosure(scn, e, name); 1073 #endif 1074 } 1075 1076 OK(senc3d_scene_ref_put(scn)); 1077 } 1078 1079 OK(senc3d_device_ref_put(dev)); 1080 1081 check_memory_allocator(&allocator); 1082 mem_shutdown_proxy_allocator(&allocator); 1083 CHK(mem_allocated_size() == 0); 1084 return 0; 1085 } 1086 1087 int 1088 main(int argc, char** argv) 1089 { 1090 struct expected expected; 1091 (void)argc, (void)argv; 1092 1093 expected.enclosure_count = 4; 1094 expected.medium[0] = SENC3D_UNSPECIFIED_MEDIUM; 1095 expected.volume[0] = -966.67; 1096 expected.medium[1] = 0; 1097 expected.volume[1] = 647.33; 1098 expected.medium[2] = 1; 1099 expected.volume[2] = 150; 1100 expected.medium[3] = 1; 1101 expected.volume[3] = 169.33; 1102 test((double *)zero_1_vertices, (unsigned*)zero_1_triangles, 1103 (unsigned *)zero_1_properties, zero_1_triangles_count, 1104 zero_1_vertices_count, &expected); 1105 1106 expected.enclosure_count = 7; 1107 expected.medium[0] = SENC3D_UNSPECIFIED_MEDIUM; 1108 expected.volume[0] = -1933.33; 1109 expected.medium[1] = 0; 1110 expected.volume[1] = 647.33; 1111 expected.medium[2] = 1; 1112 expected.volume[2] = 150; 1113 expected.medium[3] = 1; 1114 expected.volume[3] = 169.33; 1115 expected.medium[4] = 0; 1116 expected.volume[4] = 647.33; 1117 expected.medium[5] = 1; 1118 expected.volume[5] = 150; 1119 expected.medium[6] = 1; 1120 expected.volume[6] = 169.33; 1121 test((double *)zero_1d_vertices, (unsigned*)zero_1d_triangles, 1122 (unsigned *)zero_1d_properties, zero_1d_triangles_count, 1123 zero_1d_vertices_count, &expected); 1124 1125 test((double *)zero_1D_vertices, (unsigned*)zero_1D_triangles, 1126 (unsigned *)zero_1D_properties, zero_1D_triangles_count, 1127 zero_1D_vertices_count, &expected); 1128 1129 expected.enclosure_count = 6; 1130 expected.medium[0] = SENC3D_UNSPECIFIED_MEDIUM; 1131 expected.volume[0] = -966.67; 1132 expected.medium[1] = 0; 1133 expected.volume[1] = 433.33; 1134 expected.medium[2] = 1; 1135 expected.volume[2] = 281.33; 1136 expected.medium[3] = 2; 1137 expected.volume[3] = 161.33; 1138 expected.medium[4] = 3; 1139 expected.volume[4] = 73.33; 1140 expected.medium[5] = 4; 1141 expected.volume[5] = 17.33; 1142 test((double*)zero_2_vertices, (unsigned*)zero_2_triangles, 1143 (unsigned*)zero_2_properties, zero_2_triangles_count, 1144 zero_2_vertices_count, &expected); 1145 1146 expected.enclosure_count = 11; 1147 expected.medium[0] = SENC3D_UNSPECIFIED_MEDIUM; 1148 expected.volume[0] = -1933.33; 1149 expected.medium[1] = 0; 1150 expected.volume[1] = 433.33; 1151 expected.medium[2] = 1; 1152 expected.volume[2] = 281.33; 1153 expected.medium[3] = 2; 1154 expected.volume[3] = 161.33; 1155 expected.medium[4] = 3; 1156 expected.volume[4] = 73.33; 1157 expected.medium[5] = 4; 1158 expected.volume[5] = 17.33; 1159 expected.medium[6] = 0; 1160 expected.volume[6] = 433.33; 1161 expected.medium[7] = 1; 1162 expected.volume[7] = 281.33; 1163 expected.medium[8] = 2; 1164 expected.volume[8] = 161.33; 1165 expected.medium[9] = 3; 1166 expected.volume[9] = 73.33; 1167 expected.medium[10] = 4; 1168 expected.volume[10] = 17.33; 1169 test((double*)zero_2d_vertices, (unsigned*)zero_2d_triangles, 1170 (unsigned*)zero_2d_properties, zero_2d_triangles_count, 1171 zero_2d_vertices_count, &expected); 1172 1173 test((double*)zero_2D_vertices, (unsigned*)zero_2D_triangles, 1174 (unsigned*)zero_2D_properties, zero_2D_triangles_count, 1175 zero_2D_vertices_count, &expected); 1176 1177 return 0; 1178 }