END_TEST START_TEST(eina_matrix3) { Eina_Bool ret; Eina_Matrix3 m, m1, m2; double xx, xy, xz, yx, yy, yz, zx, zy, zz; eina_init(); eina_matrix3_values_set(&m, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 0, 1, 0, 0, 0, 1); fail_if(eina_matrix3_type_get(&m) != EINA_MATRIX_TYPE_IDENTITY); eina_matrix3_values_get(&m, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, zz) || !EINA_DBL_EQ(zz, 1)); fail_if(!EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, 0)); ret = eina_matrix3_equal(&m, &m1); fail_if(ret != EINA_TRUE); ret = eina_matrix3_equal(&m1, &m2); fail_if(ret != EINA_FALSE); eina_shutdown(); }
END_TEST START_TEST(eina_matrix3) { Eina_Bool ret; Eina_Matrix3 m, m1, m2; double xx, xy, xz, yx, yy, yz, zx, zy, zz; eina_init(); eina_matrix3_values_set(&m, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 0, 1, 0, 0, 0, 1); fail_if(eina_matrix3_type_get(&m) != EINA_MATRIX_TYPE_IDENTITY); eina_matrix3_values_get(&m, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(xx != yy || yy != zz || zz != 1); fail_if(xy != xz || yx != yz || zx != zy || zy != 0); ret = eina_matrix3_equal(&m, &m1); fail_if(ret != EINA_TRUE); ret = eina_matrix3_equal(&m1, &m2); fail_if(ret != EINA_FALSE); eina_shutdown(); }
END_TEST START_TEST(eina_matrix3_map_transform) { double x = 2, y = 3, x1, y1; Eina_Matrix3 m; Eina_Rectangle r; Eina_Quad q; Eina_Bool ret; eina_init(); eina_matrix3_values_set(&m, 0, 1, 0, 1, 0, 0, 0, 0, 1); eina_matrix3_point_transform(&m, x, y, &x1, &y1); fail_if(x1 != 3 || y1 != 2); EINA_RECTANGLE_SET(&r, 0, 0, 3, 4); eina_matrix3_rectangle_transform(&m, &r, &q); fail_if(q.x0 != 0 || q.y0 != 0 || q.x1 != 0 || q.y1 != 3 || q.x2 != 4 || q.y2 != 3 || q.x3 != 4 || q.y3 != 0); eina_quad_coords_set(&q, 0.0, 0.0, 3.0, 0.0, 3.0, 3.0, 0.0, 3.0); ret = eina_matrix3_square_quad_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(m.xx != 3 || m.xy != 0 || m.xz != 0 || m.yx != 0 || m.yy != 3 || m.yz != 0 || m.zx != 0 || m.zy != 0 || m.zz != 1); ret = eina_matrix3_quad_square_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(q.x0 != 0 || q.y0 != 0 || q.x1 != 3 || q.y1 != 0 || q.x2 != 3 || q.y2 != 3 || q.x3 != 0 || q.y3 != 3); eina_shutdown(); }
END_TEST START_TEST(eina_matrix4_2_3) { Eina_Matrix4 m4; Eina_Matrix3 m3, m3b; eina_init(); eina_matrix3_values_set(&m3, 1, 3, 2, 3, 1, 4, 2, 4, 1); eina_matrix3_matrix4_to(&m4, &m3); eina_matrix4_matrix3_to(&m3b, &m4); fail_if(memcmp(&m3, &m3b, sizeof (Eina_Matrix3)) != 0); eina_shutdown(); }
END_TEST START_TEST(eina_matrix3_map_transform) { double x = 2, y = 3, x1, y1; Eina_Matrix3 m; Eina_Rectangle r; Eina_Quad q; Eina_Bool ret; eina_init(); eina_matrix3_values_set(&m, 0, 1, 0, 1, 0, 0, 0, 0, 1); eina_matrix3_point_transform(&m, x, y, &x1, &y1); fail_if(!EINA_DBL_EQ(x1, 3) || !EINA_DBL_EQ(y1, 2)); EINA_RECTANGLE_SET(&r, 0, 0, 3, 4); eina_matrix3_rectangle_transform(&m, &r, &q); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 0) || !EINA_DBL_EQ(q.y1, 3) || !EINA_DBL_EQ(q.x2, 4) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 4) || !EINA_DBL_EQ(q.y3, 0)); eina_quad_coords_set(&q, 0.0, 0.0, 3.0, 0.0, 3.0, 3.0, 0.0, 3.0); ret = eina_matrix3_square_quad_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!MATRIX3_CMP(m.xx, m.xy, m.xz, m.yx, m.yy, m.yz, m.zx, m.zy, m.zz, 3, 0, 0, 0, 3, 0, 0, 0, 1)); ret = eina_matrix3_quad_square_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 3) || !EINA_DBL_EQ(q.y1, 0) || !EINA_DBL_EQ(q.x2, 3) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 0) || !EINA_DBL_EQ(q.y3, 3)); eina_shutdown(); }
END_TEST START_TEST(eina_matrix3_f16p16) { Eina_Matrix3_F16p16 m1; Eina_Matrix3 m2; Eina_F16p16 xx, xy, xz, yx, yy, yz, zx, zy, zz; Eina_Matrix3_F16p16 m3; eina_init(); eina_matrix3_values_set(&m2, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_matrix3_f16p16_to(&m2, &m1); fail_if (eina_matrix3_f16p16_type_get(&m1) != EINA_MATRIX_TYPE_IDENTITY); eina_matrix3_fixed_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(xx != yy || yy != zz || zz != 65536); fail_if(xy != xz || yx != yz || zx != zy || zy != 0); eina_matrix3_values_set(&m2, 1, 2, 3, 4, 5, 6, 7, 8, 9); eina_matrix3_matrix3_f16p16_to(&m2, &m1); eina_matrix3_f16p16_identity(&m1); fail_if(m1.xx != m1.yy || m1.yy != m1.zz || m1.zz != 65536); fail_if(m1.xy != m1.xz || m1.yx != m1.yz || m1.zx != m1.zy || m1.zy != 0); eina_matrix3_values_set(&m2, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_matrix3_f16p16_to(&m2, &m1); eina_matrix3_f16p16_compose(&m1, &m1, &m3); fail_if (m3.xx != m3.xy || m3.xy != m3.xz || m3.yx != m3.yy || m3.yy != m3.yz || m3.zx != m3.zy || m3.zy != m3.zz || m3.zz != 196608); eina_shutdown(); }
END_TEST #define MATRIX3_CMP(XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ, AXX, AXY, AXZ, AYX, AYY, AYZ, AZX, AZY, AZZ) \ (EINA_DBL_EQ(XX, AXX) && \ EINA_DBL_EQ(XY, AXY) && \ EINA_DBL_EQ(XZ, AXZ) && \ EINA_DBL_EQ(YX, AYX) && \ EINA_DBL_EQ(YY, AYY) && \ EINA_DBL_EQ(YZ, AYZ) && \ EINA_DBL_EQ(ZX, AZX) && \ EINA_DBL_EQ(ZY, AZY) && \ EINA_DBL_EQ(ZZ, AZZ)) START_TEST(eina_matrix3_operations) { Eina_Matrix3 m1, m2, m3; double xx, xy, xz, yx, yy, yz, zx, zy, zz; double tx = 20, ty = 30, ret; const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_compose(&m1, &m2, &m3); eina_matrix3_values_get(&m3, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, xy) || !EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yy) || !EINA_DBL_EQ(yy, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, zz) || !EINA_DBL_EQ(zz, 1)); eina_matrix3_translate(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 0, tx, 0, 1, ty, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_scale(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, tx, 0, 0, 0, ty, 0, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_rotate(&m1, M_PI/2); fail_if (!MATRIX3_CMP(round(m1.xx), round(m1.xy), round(m1.xz), round(m1.yx), round(m1.yy), round(m1.yz), round(m1.zx), round(m1.zy), round(m1.zz), 0, -1, 0, 1, 0, 0, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_identity(&m1); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, zz) || !EINA_DBL_EQ(zz, 1)); fail_if(!EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, 0)); eina_matrix3_values_set(&m1, 1, 2, 1, 2, 1, 1, 1, 2, 2); ret = eina_matrix3_determinant(&m1); fail_if(!EINA_DBL_EQ(ret, -3)); eina_matrix3_values_set(&m1, 3, 3, 3, 3, 3, 3, 3, 3, 3); eina_matrix3_divide(&m1, 2); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, xy) || !EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yy) || !EINA_DBL_EQ(yy, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, zz) || !EINA_DBL_EQ(zz, 1.5)); eina_matrix3_values_set(&m1, 0, 2, 0, 2, 2, 0, 2, 1, 2); eina_matrix3_inverse(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, -0.5, 0.5, 0.0, 0.5, 0.0, 0.0, 0.25, -0.5, 0.5)); eina_matrix3_values_set(&m1, 1, 2, 3, 4, 5, 6, 7, 8, 9); eina_matrix3_transpose(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 4, 7, 2, 5, 8, 3, 6, 9)); eina_matrix3_values_set(&m1, 1, 2, 3, 0, 4, 5, 1, 0, 6); eina_matrix3_cofactor(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 24, 5, -4, -12, 3, 2, -2, -5, 4)); eina_matrix3_adjoint(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 24, -12, -2, 5, 3, -5, -4, 2, 4)); eina_matrix3_values_set(&m2, 2, 2, 2, 1, 1, 1, 3, 3, 3); eina_matrix3_values_set(&m3, 3, 3, 3, 2, 2, 2, 1, 1, 1); eina_matrix3_multiply_copy(&m1, &m2, &m3); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 12, 12, 12, 6, 6, 6, 18, 18, 18)); eina_matrix3_values_set(&m2, 2, 2, 2, 1, 1, 1, 0, 0, 0); eina_matrix3_multiply(&m1, &m2, &m3); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 12, 12, 12, 6, 6, 6, 0, 0, 0)); eina_matrix3_copy(&m1, &m2); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 2, 2, 2, 1, 1, 1, 0, 0, 0)); eina_matrix3_array_set(&m1, arr); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 1, 1, 1, 1, 1, 1, 1, 1)); eina_matrix3_position_transform_set(&m3, 5, 3); eina_matrix3_values_get(&m3, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xz, 5) || !EINA_DBL_EQ(yz, 3)); eina_matrix3_scale_transform_set(&m2, 6, 7); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, 6) || !EINA_DBL_EQ(yy, 7)); }
END_TEST START_TEST(eina_matrix3_operations) { Eina_Matrix3 m1, m2, m3; double xx, xy, xz, yx, yy, yz, zx, zy, zz; double tx = 20, ty = 30, ret; eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_compose(&m1, &m2, &m3); eina_matrix3_values_get(&m3, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != xy || xy != xz || yx != yy || yy != yz || zx != zy || zy != zz || zz != 1); eina_matrix3_translate(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != 1 || xy != 0 || xz != tx || yx != 0 || yy != 1 || yz != ty || zx != 0 || zy != 0 || zz != 1); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_scale(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != tx || xy != 0 || xz != 0 || yx != 0 || yy != ty || yz != 0 || zx != 0 || zy != 0 || zz != 1); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_rotate(&m1, M_PI/2); fail_if (round(m1.xx) != 0 || round(m1.xy) != -1 || round(m1.xz) != 0 || round(m1.yx) != 1 || round(m1.yy) != 0 || round(m1.yz) !=0 || round(m1.zx) != 0 || round(m1.zy) != 0|| round(m1.zz) != 1); eina_matrix3_values_set(&m1, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_identity(&m1); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(xx != yy || yy != zz || zz != 1); fail_if(xy != xz || yx != yz || zx != zy || zy != 0); eina_matrix3_values_set(&m1, 1, 2, 1, 2, 1, 1, 1, 2, 2); ret = eina_matrix3_determinant(&m1); fail_if(ret != -3); eina_matrix3_values_set(&m1, 3, 3, 3, 3, 3, 3, 3, 3, 3); eina_matrix3_divide(&m1, 2); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != xy || xy != xz || yx != yy || yy != yz || zx != zy || zy != zz || zz != 1.5); eina_matrix3_values_set(&m1, 0, 2, 0, 2, 2, 0, 2, 1, 2); eina_matrix3_inverse(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != -0.5 || xy != 0.5 || xz != 0 || yx != 0.5 || yy != 0 || yz != 0 || zx != 0.25 || zy != -0.5 || zz != 0.5); eina_matrix3_values_set(&m1, 1, 2, 3, 4, 5, 6, 7, 8, 9); eina_matrix3_transpose(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != 1 || xy != 4 || xz != 7 || yx != 2 || yy != 5 || yz != 8 || zx != 3 || zy != 6 || zz != 9); eina_matrix3_values_set(&m1, 1, 2, 3, 0, 4, 5, 1, 0, 6); eina_matrix3_cofactor(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != 24 || xy != 5 || xz != -4 || yx != -12 || yy != 3 || yz != 2 || zx != -2 || zy != -5 || zz != 4); eina_matrix3_adjoint(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (xx != 24 || xy != -12 || xz != -2 || yx != 5 || yy != 3 || yz != -5 || zx != -4 || zy != 2 || zz != 4); }