mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
0.5.5 Disallow multiple `_` in a row in digits, e.g. `1__000`. #1138. Fixed toposort example. Struct/union members now correctly rejects members without storage size #1147. `math::pow` will now correctly promote integer arguments. `math::pow` will now correctly promote integer arguments. Added `new_aligned` and `alloc_aligned` functions to prevent accidental under-alignment when allocating simd. Pointer difference would fail where alignment != size (structs etc) #1150. Add test that overalignment actually works for lists. Fixed array calculation for npot2 vectors. Use native aligned alloc on Windows and POSIX. Deprecates "offset". Simplification of the Allocator interface.
113 lines
3.5 KiB
C
113 lines
3.5 KiB
C
module math_matrix @test;
|
|
import std::math;
|
|
|
|
fn void test_mat4()
|
|
{
|
|
{|
|
|
Matrix4 mat = MATRIX4_IDENTITY;
|
|
Matrix4 mat2 = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
|
|
Matrix4 calc = mat.mul(mat2);
|
|
assert(calc.m == mat.m);
|
|
|
|
Matrix4 translated = mat.translate(Vec3{0.0, 0.0, 0.0});
|
|
assert(translated.m == mat.m);
|
|
|};
|
|
|
|
{|
|
|
Matrix4 mat = { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 };
|
|
Matrix4 mat2 = { 8, 7, 6, 5, 4, 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, 1 };
|
|
Matrix4 calc = mat.mul(mat2);
|
|
Matrix4 value = { 56, 46, 36, 26, 152, 126, 100, 74, 56, 46, 36, 26, 152, 126, 100, 74 };
|
|
assert(calc.m == value.m);
|
|
|};
|
|
|
|
{|
|
|
Matrix4 result = {
|
|
0.988936, 0.000000, -0.148340, -0.988936,
|
|
-0.014599, 0.995146, -0.097325, -2.970838,
|
|
0.147620, 0.098414, 0.984136, -20.765262,
|
|
0.000000, 0.000000, 0.000000, 1.000000
|
|
};
|
|
|
|
Matrix4f result_f = {
|
|
0.988936, 0.000000, -0.148340, -0.988936,
|
|
-0.014599, 0.995146, -0.097325, -2.970838,
|
|
0.147620, 0.098414, 0.984136, -20.765262,
|
|
0.000000, 0.000000, 0.000000, 1.000000
|
|
};
|
|
|
|
Matrix4 result_transposed = {
|
|
0.988936, -0.014599, 0.147620, 0.000000,
|
|
0.000000, 0.995146, 0.098414, 0.000000,
|
|
-0.148340, -0.097325, 0.984136, 0.000000,
|
|
-0.988936, -2.970838, -20.765262, 1.000000
|
|
};
|
|
|
|
Matrix4f result_transposed_f = {
|
|
0.988936, -0.014599, 0.147620, 0.000000,
|
|
0.000000, 0.995146, 0.098414, 0.000000,
|
|
-0.148340, -0.097325, 0.984136, 0.000000,
|
|
-0.988936, -2.970838, -20.765262, 1.000000
|
|
};
|
|
|
|
Matrix4 look_at = vector::matrix4_look_at({4.0, 5.0, 20.0}, {1.0, 3.0, 0.0}, {0.0, 1.0, 0.0});
|
|
Matrix4f look_at_f = vector::matrix4f_look_at({4.0, 5.0, 20.0}, {1.0, 3.0, 0.0}, {0.0, 1.0, 0.0});
|
|
|
|
assert(math::round_to_decimals((double[<16>])look_at.m, 4) == math::round_to_decimals((double[<16>])result.m, 4));
|
|
assert(math::round_to_decimals((float[<16>])look_at_f.m, 4) == math::round_to_decimals((float[<16>])result_f.m, 4));
|
|
|
|
assert(math::round_to_decimals((double[<16>])result_transposed.m, 4) == math::round_to_decimals((double[<16>])look_at.transpose().m, 4));
|
|
assert(math::round_to_decimals((float[<16>])result_transposed_f.m, 4) == math::round_to_decimals((float[<16>])look_at_f.transpose().m, 4));
|
|
|};
|
|
|
|
{|
|
|
Matrix4 result = {
|
|
1.857087, 0.000000, 0.000000,
|
|
0.000000, 0.000000, 2.414214,
|
|
0.000000, 0.000000, 0.000000, 0.000000,
|
|
-1.000200, -0.200020, 0.000000, 0.000000,
|
|
-1.000000, 0.000000
|
|
};
|
|
|
|
Matrix4f result_f = {
|
|
1.857087, 0.000000, 0.000000,
|
|
0.000000, 0.000000, 2.414214,
|
|
0.000000, 0.000000, 0.000000, 0.000000,
|
|
-1.000200, -0.200020, 0.000000, 0.000000,
|
|
-1.000000, 0.000000
|
|
};
|
|
|
|
Matrix4 perspective = matrix4_perspective(math::deg_to_rad(45), 1.3, 0.1, 1000);
|
|
Matrix4f perspective_f = matrix4f_perspective((float)math::deg_to_rad(45), 1.3, 0.1, 1000);
|
|
|
|
assert(math::round_to_decimals((double[<16>])result.m, 4) == math::round_to_decimals((double[<16>])perspective.m, 4));
|
|
assert(math::round_to_decimals((float[<16>])result_f.m, 4) == math::round_to_decimals((float[<16>])perspective_f.m, 4));
|
|
|};
|
|
}
|
|
|
|
|
|
fn void test_mat3()
|
|
{
|
|
Matrix3 mat = { 3, 5, 3, 5, 2, 6, 6, 2, 1 };
|
|
Matrix3 mat2 = { 4, 2, 6, 7, 8, 9, 2, 3, 4 };
|
|
Matrix3 calc = mat.mul(mat2);
|
|
Matrix3 value = { 53, 55, 75, 46, 44, 72, 40, 31, 58 };
|
|
|
|
assert(calc.m == value.m);
|
|
}
|
|
|
|
fn void test_mat2()
|
|
{
|
|
Matrix2 mat = { 3, 5, 5, 2};
|
|
Matrix2 mat2 = { 4, 2, 7, 8 };
|
|
Matrix2 calc = mat.mul(mat2);
|
|
Matrix2 value = { 47, 46, 34, 26 };
|
|
|
|
assert(calc.m == value.m);
|
|
}
|
|
|
|
fn void test_vec3()
|
|
{
|
|
Vec3 cross = Vec3{2,3,4}.cross(Vec3{5,6,7});
|
|
assert(cross == Vec3{-3,6,-3});
|
|
} |