module math_quaternion @test; import std::math; fn void test() { { Quaternion rotation = QUATERNION_IDENTITY; Quaternionf rotation_f = QUATERNIONF_IDENTITY; assert(rotation.v == {0,0,0,1}); assert(rotation.v == {0,0,0,1}); }; { Quaternion rotation = QUATERNION_IDENTITY; Matrix4 identity_matrix = MATRIX4_IDENTITY; Quaternionf rotation_f = QUATERNIONF_IDENTITY; Matrix4f identity_matrix_f = MATRIX4F_IDENTITY; assert((double[<16>])rotation.to_matrix().m == (double[<16>])identity_matrix.m); assert((float[<16>])rotation_f.to_matrixf().m == (float[<16>])identity_matrix_f.m); }; { Matrix4 result = { 0.428571, -0.285714, 0.857143, 0.000000, 0.857143, 0.428571, -0.285714, 0.000000, -0.285714, 0.857143, 0.428571, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000 }; Matrix4 rotation = (Quaternion) {0.5, 0.5, 0.5, 1}.to_matrix(); Matrix4f rotation_f = (Quaternionf) {0.5, 0.5, 0.5, 1}.to_matrixf(); assert(math::round_to_decimals((double[<16>])result.m, 2) == math::round_to_decimals((double[<16>])rotation.m, 2)); assert(math::round_to_decimals((float[<16>])result.m, 2) == math::round_to_decimals((float[<16>])rotation_f.m, 2)); }; }