void test_CheckHashingLabel(void) { unsigned int Id; Id = HashVertex(V); TEST_ASSERT_EQUAL(625126715, Id); }
/* * @brief Snaps the vertex to integer coordinates if it is already very close, * then hashes it and searches for an existing vertex to reuse. */ static int32_t FindVertex(const vec3_t in) { int32_t i, vnum; vec3_t vert; c_totalverts++; for (i = 0; i < 3; i++) { const vec_t v = floor(in[i] + 0.5); if (fabs(in[i] - v) < INTEGRAL_EPSILON) vert[i] = v; else vert[i] = in[i]; } const int32_t h = HashVertex(vert); for (vnum = hash_verts[h]; vnum; vnum = vertex_chain[vnum]) { vec3_t delta; // compare the points; we go out of our way to avoid using VectorLength VectorSubtract(d_bsp.vertexes[vnum].point, vert, delta); if (delta[0] < POINT_EPSILON && delta[0] > -POINT_EPSILON) { if (delta[1] < POINT_EPSILON && delta[1] > -POINT_EPSILON) { if (delta[2] < POINT_EPSILON && delta[2] > -POINT_EPSILON) { return vnum; } } } } // emit a vertex if (d_bsp.num_vertexes == MAX_BSP_VERTS) Com_Error(ERR_FATAL, "MAX_BSP_VERTS\n"); VectorCopy(vert, d_bsp.vertexes[d_bsp.num_vertexes].point); vertex_chain[d_bsp.num_vertexes] = hash_verts[h]; hash_verts[h] = d_bsp.num_vertexes; c_uniqueverts++; d_bsp.num_vertexes++; return d_bsp.num_vertexes - 1; }