5 #include <gmath/gmath.h>
10 float frand(float low, float high);
17 fprintf(stderr, "test_vec3 failed\n");
21 fprintf(stderr, "test_mat failed\n");
27 #define ASSERT_EQ(a, b) assert(memcmp(&a, &b, sizeof a) == 0)
36 for(int i=0; i<2; i++) {
37 rv3[i].x = crv3[i].x = frand(-100, 100);
38 rv3[i].y = crv3[i].y = frand(-100, 100);
39 rv3[i].z = crv3[i].z = frand(-100, 100);
42 cgm_vcross(&cv3, crv3, crv3 + 1);
43 v3 = cross(rv3[0], rv3[1]);
47 cgm_vreflect(&cv3, crv3 + 1);
48 v3 = reflect(rv3[0], rv3[1]);
51 float ior = frand(1, 2);
53 cgm_vrefract(&cv3, crv3 + 1, ior);
54 v3 = refract(rv3[0], rv3[1], ior);
62 float ca[16], cb[16], cc[16];
65 float angle = frand(-100, 100);
66 Vec3 axis = Vec3(frand(-10, 10), frand(-10, 10), frand(-10, 10));
67 cgm_mrotation(ca, angle, axis.x, axis.y, axis.z);
68 a.rotation(angle, axis.x, axis.y, axis.z);
71 Vec3 trans = Vec3(frand(-100, 100), frand(-100, 100), frand(-100, 100));
72 Vec3 scale = Vec3(frand(0.1, 10), frand(0.1, 10), frand(0.1, 10));
73 cgm_mtranslate(ca, trans.x, trans.y, trans.z);
74 cgm_mscale(ca, scale.x, scale.y, scale.z);
75 a.translate(trans.x, trans.y, trans.z);
76 a.scale(scale.x, scale.y, scale.z);
79 cgm_mprerotate_y(ca, trans.x);
80 a.pre_rotate_y(trans.x);
90 float frand(float low, float high)
92 float range = high - low;
93 return ((float)rand() / (float)RAND_MAX) * range + low;