// =====================================================================================================================
// fennec-test, a program to execute unit tests for fennec
// Copyright © 2025 Medusa Slockbower
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
// =====================================================================================================================
#ifndef FENNEC_TEST_VECTOR_H
#define FENNEC_TEST_VECTOR_H
#include
#include
#include
#include "../../test.h"
namespace fennec
{
namespace test
{
inline void fennec_test_math_vector()
{
fennec_test_section("component_count");
fennec_test_spacer(1);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_run((component_count_v == 1), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_spacer(1);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_run((component_count_v == 2), true);
fennec_test_run((component_count_v == 3), true);
fennec_test_run((component_count_v == 4), true);
fennec_test_spacer(2);
fennec_test_section("vec2 constructors");
fennec_test_spacer(1);
fennec_test_run(vec2(), vec2(0.0f, 0.0f));
fennec_test_run(vec2(1.0f), vec2(1.0f, 1.0f));
fennec_test_run(vec2(), vec2(0.0, 0.0));
fennec_test_run(vec2(1.0), vec2(1.0, 1.0));
fennec_test_run(vec2(), vec2(0, 0));
fennec_test_run(vec2(1), vec2(1, 1));
fennec_test_run(vec2(fennec::copy(vec2(1.0f))), vec2(1.0f));
fennec_test_run(vec2(fennec::move(vec2(1.0f))), vec2(1.0f));
fennec_test_spacer(2);
fennec_test_section("vec2 swizzles");
fennec_test_spacer(1);
fennec_test_run(vec2(vec2(0, 1).xx), vec2(0, 0));
fennec_test_run(vec2(vec2(0, 1).xy), vec2(0, 1));
fennec_test_run(vec2(vec2(0, 1).yx), vec2(1, 0));
fennec_test_run(vec2(vec2(0, 1).yy), vec2(1, 1));
fennec_test_spacer(2);
fennec_test_section("vec3 constructors");
fennec_test_spacer(1);
fennec_test_run(vec3(), vec3(0.0f, 0.0f, 0.0f));
fennec_test_run(vec3(1.0f), vec3(1.0f, 1.0f, 1.0f));
fennec_test_run(vec3(), vec3(0.0, 0.0, 0.0));
fennec_test_run(vec3(1.0), vec3(1.0, 1.0, 1.0));
fennec_test_run(vec3(), vec3(0, 0, 0));
fennec_test_run(vec3(1), vec3(1, 1, 1));
fennec_test_run(vec3(fennec::copy(vec3(1))), vec3(1));
fennec_test_run(vec3(fennec::move(vec3(1))), vec3(1));
fennec_test_spacer(2);
fennec_test_section("vec3 swizzles");
fennec_test_spacer(1);
fennec_test_run(vec3(vec3(0, 1, 2).xxx), vec3(0, 0, 0));
fennec_test_run(vec3(vec3(0, 1, 2).xxy), vec3(0, 0, 1));
fennec_test_run(vec3(vec3(0, 1, 2).xxz), vec3(0, 0, 2));
fennec_test_run(vec3(vec3(0, 1, 2).xyx), vec3(0, 1, 0));
fennec_test_run(vec3(vec3(0, 1, 2).xyy), vec3(0, 1, 1));
fennec_test_run(vec3(vec3(0, 1, 2).xyz), vec3(0, 1, 2));
fennec_test_run(vec3(vec3(0, 1, 2).xzx), vec3(0, 2, 0));
fennec_test_run(vec3(vec3(0, 1, 2).xzy), vec3(0, 2, 1));
fennec_test_run(vec3(vec3(0, 1, 2).xzz), vec3(0, 2, 2));
fennec_test_spacer(1);
fennec_test_run(vec3(vec3(0, 1, 2).yxx), vec3(1, 0, 0));
fennec_test_run(vec3(vec3(0, 1, 2).yxy), vec3(1, 0, 1));
fennec_test_run(vec3(vec3(0, 1, 2).yxz), vec3(1, 0, 2));
fennec_test_run(vec3(vec3(0, 1, 2).yyx), vec3(1, 1, 0));
fennec_test_run(vec3(vec3(0, 1, 2).yyy), vec3(1, 1, 1));
fennec_test_run(vec3(vec3(0, 1, 2).yyz), vec3(1, 1, 2));
fennec_test_run(vec3(vec3(0, 1, 2).yzx), vec3(1, 2, 0));
fennec_test_run(vec3(vec3(0, 1, 2).yzy), vec3(1, 2, 1));
fennec_test_run(vec3(vec3(0, 1, 2).yzz), vec3(1, 2, 2));
fennec_test_spacer(1);
fennec_test_run(vec3(vec3(0, 1, 2).zxx), vec3(2, 0, 0));
fennec_test_run(vec3(vec3(0, 1, 2).zxy), vec3(2, 0, 1));
fennec_test_run(vec3(vec3(0, 1, 2).zxz), vec3(2, 0, 2));
fennec_test_run(vec3(vec3(0, 1, 2).zyx), vec3(2, 1, 0));
fennec_test_run(vec3(vec3(0, 1, 2).zyy), vec3(2, 1, 1));
fennec_test_run(vec3(vec3(0, 1, 2).zyz), vec3(2, 1, 2));
fennec_test_run(vec3(vec3(0, 1, 2).zzx), vec3(2, 2, 0));
fennec_test_run(vec3(vec3(0, 1, 2).zzy), vec3(2, 2, 1));
fennec_test_run(vec3(vec3(0, 1, 2).zzz), vec3(2, 2, 2));
fennec_test_spacer(2);
fennec_test_section("scalar-vector operations");
fennec_test_spacer(1);
fennec_test_run(2.0 * vec2(1, 2), vec2(2, 4));
fennec_test_run(2.0 * vec3(1, 2, 3), vec3(2, 4, 6));
fennec_test_run(2.0 * vec4(1, 2, 3, 4), vec4(2, 4, 6, 8));
fennec_test_spacer(2);
fennec_test_run(2.0 / vec2(1, 2), vec2(2.0, 1.0));
fennec_test_run(2.0 / vec3(1, 2, 4), vec3(2.0, 1.0, 0.5));
fennec_test_run(2.0 / vec4(1, 2, 4, 8), vec4(2.0, 1.0, 0.5, 0.25));
fennec_test_spacer(2);
fennec_test_section("vector-vector operations");
fennec_test_spacer(1);
fennec_test_run(vec2(1, 2) + vec2(1, 2), vec2(2, 4));
fennec_test_run(vec3(1, 2, 3) + vec3(1, 2, 3), vec3(2, 4, 6));
fennec_test_run(vec4(1, 2, 3, 4) + vec4(1, 2, 3, 4), vec4(2, 4, 6, 8));
fennec_test_spacer(1);
fennec_test_run(vec2(1, 2) - vec2(1, 2), vec2(0, 0));
fennec_test_run(vec3(1, 2, 3) - vec3(1, 2, 3), vec3(0, 0, 0));
fennec_test_run(vec4(1, 2, 3, 4) - vec4(1, 2, 3, 4), vec4(0, 0, 0, 0));
fennec_test_spacer(1);
fennec_test_run(vec2(1, 2) * vec2(1, 2), vec2(1, 4));
fennec_test_run(vec3(1, 2, 3) * vec3(1, 2, 3), vec3(1, 4, 9));
fennec_test_run(vec4(1, 2, 3, 4) * vec4(1, 2, 3, 4), vec4(1, 4, 9, 16));
fennec_test_spacer(1);
fennec_test_run(vec2(1, 2) / vec2(1, 2), vec2(1, 1));
fennec_test_run(vec3(1, 2, 4) / vec3(1, 2, 4), vec3(1, 1, 1));
fennec_test_run(vec4(1, 2, 4, 8) / vec4(1, 2, 4, 8), vec4(1, 1, 1, 1));
fennec_test_spacer(1);
fennec_test_run(ivec2(1, 2) % ivec2(1, 2), ivec2(0, 0));
fennec_test_run(ivec3(1, 2, 4) % ivec3(1, 2, 4), ivec3(0, 0, 0));
fennec_test_run(ivec4(1, 2, 4, 8) % ivec4(1, 2, 4, 8), ivec4(0, 0, 0, 0));
}
}
}
#endif // FENNEC_TEST_VECTOR_H