29
#include "eina_suite.h"
31
EFL_START_TEST(eina_test_vector2_operations)
41
const double arr[] = {5, 5};
44
eina_vector2_set(&v1, x, y);
45
fail_if(!EINA_DBL_EQ(v1.x, 1) || !EINA_DBL_EQ(v1.y, 2));
47
eina_vector2_array_set(&v2, arr);
48
fail_if(!EINA_DBL_EQ(v2.x, 5) || !EINA_DBL_EQ(v2.y, 5));
50
eina_vector2_copy(&v1, &v2);
51
fail_if(!EINA_DBL_EQ(v1.x, 5) || !EINA_DBL_EQ(v1.y, 5));
53
eina_vector2_negate(&v1, &v2);
54
fail_if(!EINA_DBL_EQ(v1.x, -5) || !EINA_DBL_EQ(v1.y, -5));
56
eina_vector2_set(&v1, x, y);
57
eina_vector2_add(&v3, &v1, &v2);
58
fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 7));
60
eina_vector2_subtract(&v3, &v2, &v1);
61
fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 3));
63
eina_vector2_scale(&v3, &v1, y);
64
fail_if(!EINA_DBL_EQ(v3.x, 2) || !EINA_DBL_EQ(v3.y, 4));
66
res = eina_vector2_dot_product(&v1, &v2);
67
fail_if(!EINA_DBL_EQ(res, 15));
69
res = eina_vector2_length_get(&v2);
70
fail_if((res - sqrt(50)) > DBL_EPSILON);
72
res = eina_vector2_length_square_get(&v2);
73
fail_if(!EINA_DBL_EQ(res, 50));
75
res = eina_vector2_distance_get(&v2, &v1);
76
fail_if((res - sqrt(25)) > DBL_EPSILON);
78
res = eina_vector2_distance_square_get(&v2, &v1);
79
fail_if(!EINA_DBL_EQ(res, 25));
81
eina_vector2_normalize(&v3, &v2);
82
fail_if((v3.x - v2.x / sqrt(50)) > DBL_EPSILON ||
83
(v3.y - v2.y / sqrt(50)) > DBL_EPSILON);
85
eina_matrix2_values_set(&m2,
88
eina_vector2_transform(&v3, &m2, &v1);
89
fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 6));
91
eina_vector2_transform(&v3, &m2, &v3);
92
fail_if(!EINA_DBL_EQ(v3.x, 24) || !EINA_DBL_EQ(v3.y, 24));
94
eina_matrix3_values_set(&m3,
99
eina_vector2_homogeneous_position_transform(&v3, &m3, &v1);
100
fail_if(!EINA_DBL_EQ(v3.x, 1) || !EINA_DBL_EQ(v3.y, 1));
103
eina_vector2_homogeneous_direction_transform(&v3, &m3, &v1);
104
fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 6));
106
eina_vector2_homogeneous_direction_transform(&v3, &m3, &v3);
107
fail_if(!EINA_DBL_EQ(v3.x, 24) || !EINA_DBL_EQ(v3.y, 24));
112
EFL_START_TEST(eina_test_vector3_operations)
124
Eina_Bool res2 = EINA_FALSE;
125
const double arr[] = {5, 5, 5};
128
eina_vector3_set(&v1, x, y, z);
129
fail_if(!EINA_DBL_EQ(v1.x, 1) || !EINA_DBL_EQ(v1.y, 2) || !EINA_DBL_EQ(v1.z, 3));
131
eina_vector3_array_set(&v2, arr);
132
fail_if(!EINA_DBL_EQ(v2.x, 5) || !EINA_DBL_EQ(v2.y, 5) || !EINA_DBL_EQ(v2.z, 5));
134
eina_vector3_copy(&v1, &v2);
135
fail_if(!EINA_DBL_EQ(v1.x, 5) || !EINA_DBL_EQ(v1.y, 5) || !EINA_DBL_EQ(v1.z, 5));
137
eina_vector3_negate(&v1, &v2);
138
fail_if(!EINA_DBL_EQ(v1.x, -5) || !EINA_DBL_EQ(v1.y, -5) || !EINA_DBL_EQ(v1.z, -5));
140
eina_vector3_set(&v1, x, y, z);
141
eina_vector3_add(&v3, &v1, &v2);
142
fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 7) || !EINA_DBL_EQ(v3.z, 8));
144
eina_vector3_subtract(&v3, &v2, &v1);
145
fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 3) || !EINA_DBL_EQ(v3.z, 2));
147
eina_vector3_scale(&v3, &v1, y);
148
fail_if(!EINA_DBL_EQ(v3.x, 2) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, 6));
150
eina_vector3_multiply(&v3, &v2, &v1);
151
fail_if(!EINA_DBL_EQ(v3.x, 5) || !EINA_DBL_EQ(v3.y, 10) || !EINA_DBL_EQ(v3.z, 15));
153
res = eina_vector3_dot_product(&v1, &v2);
154
fail_if(!EINA_DBL_EQ(res, 30));
156
eina_vector3_cross_product(&v3, &v1, &v2);
157
fail_if(!EINA_DBL_EQ(v3.x, -5) || !EINA_DBL_EQ(v3.y, 10) || !EINA_DBL_EQ(v3.z, -5));
159
eina_vector3_cross_product(&v3, &v1, &v3);
160
fail_if(!EINA_DBL_EQ(v3.x, -40) || !EINA_DBL_EQ(v3.y, -10) || !EINA_DBL_EQ(v3.z, 20));
163
res = eina_vector3_length_get(&v2);
164
fail_if((res - sqrt(75)) > DBL_EPSILON);
166
res = eina_vector3_length_square_get(&v2);
167
fail_if(!EINA_DBL_EQ(res, 75));
169
res = eina_vector3_distance_get(&v2, &v1);
170
fail_if((res - sqrt(29)) > (DBL_EPSILON * 2.0));
172
res = eina_vector3_distance_square_get(&v2, &v1);
173
fail_if(!EINA_DBL_EQ(res, 29));
175
eina_vector3_normalize(&v3, &v2);
176
fail_if((v3.x - v2.x / sqrt(75)) > DBL_EPSILON ||
177
(v3.y - v2.y / sqrt(75)) > DBL_EPSILON ||
178
(v3.z - v2.z / sqrt(75)) > DBL_EPSILON);
180
res = eina_vector3_angle_get(&v1, &v2);
181
fail_if((res - (30 / (sqrt(14) * sqrt(75)))) > DBL_EPSILON);
183
eina_matrix3_values_set(&m3,
187
eina_vector3_transform(&v3, &m3, &v1);
188
fail_if(!EINA_DBL_EQ(v3.x, 12) || !EINA_DBL_EQ(v3.y, 12) || !EINA_DBL_EQ(v3.z, 12));
190
eina_vector3_transform(&v3, &m3, &v3);
191
fail_if(!EINA_DBL_EQ(v3.x, 72) || !EINA_DBL_EQ(v3.y, 72) || !EINA_DBL_EQ(v3.z, 72));
193
eina_matrix4_values_set(&m4,
198
eina_vector3_homogeneous_position_transform(&v3, &m4, &v1);
199
fail_if(!EINA_DBL_EQ(v3.x, 1) || !EINA_DBL_EQ(v3.y, 1) || !EINA_DBL_EQ(v3.z, 1));
201
eina_quaternion_set(&q, 2, 2, 2, 0);
202
eina_vector3_quaternion_rotate(&v3, &v1, &q);
203
fail_if(!EINA_DBL_EQ(v3.x, 25) || !EINA_DBL_EQ(v3.y, 2) || !EINA_DBL_EQ(v3.z, -21));
205
eina_vector3_orthogonal_projection_on_plane(&v3, &v1, &v2);
206
fail_if(!EINA_DBL_EQ(v3.x, -1) || !EINA_DBL_EQ(v3.y, 0) || !EINA_DBL_EQ(v3.z, 1));
208
eina_vector3_plane_by_points(&q, &v3, &v1, &v2);
209
fail_if(!EINA_DBL_EQ(q.x, -2) || !EINA_DBL_EQ(q.y, 4) || !EINA_DBL_EQ(q.z, -2) || (q.z > DBL_EPSILON));
211
eina_vector3_homogeneous_direction_set(&v3, &q);
212
fail_if(!EINA_DBL_EQ(v3.x, -2) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, -2));
214
eina_quaternion_set(&q, 2, 2, 2, 0.5);
215
eina_vector3_homogeneous_position_set(&v3, &q);
216
fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, 4));
218
res2 = eina_vector3_equivalent(&v1, &v2);
219
fail_if(res2 != EINA_FALSE);
221
res2 = eina_vector3_equivalent(&v1, &v1);
222
fail_if(res2 != EINA_TRUE);
224
res2 = eina_vector3_triangle_equivalent(&v1, &v2, &v3,
226
fail_if(res2 != EINA_FALSE);
228
res2 = eina_vector3_triangle_equivalent(&v1, &v2, &v3,
230
fail_if(res2 != EINA_TRUE);
232
eina_vector3_homogeneous_direction_transform(&v3, &m4, &v1);
233
fail_if(!EINA_DBL_EQ(v3.x, 12) || !EINA_DBL_EQ(v3.y, 12) || !EINA_DBL_EQ(v3.z, 12));
235
eina_vector3_homogeneous_direction_transform(&v3, &m4, &v3);
236
fail_if(!EINA_DBL_EQ(v3.x, 72) || !EINA_DBL_EQ(v3.y, 72) || !EINA_DBL_EQ(v3.z, 72));
242
eina_test_vector(TCase *tc)
244
tcase_add_test(tc, eina_test_vector2_operations);
245
tcase_add_test(tc, eina_test_vector3_operations);