Files
Sourcetrail/src/test/Vector2TestSuite.h
T

270 lines
5.9 KiB
C++

#include "cxxtest/TestSuite.h"
#include "utility/logging/logging.h"
#include "utility/math/Vector2.h"
class Vector2TestSuite : public CxxTest::TestSuite
{
public:
void test_vec2i_constructors()
{
Vec2i vec0;
Vec2i vec1(1, 1);
Vec2i vec2(vec1);
TS_ASSERT_EQUALS(0, vec0.x);
TS_ASSERT_EQUALS(0, vec0.y);
TS_ASSERT_EQUALS(1, vec1.x);
TS_ASSERT_EQUALS(1, vec1.y);
TS_ASSERT_EQUALS(1, vec2.x);
TS_ASSERT_EQUALS(1, vec2.y);
}
void test_vec2f_constructors()
{
Vec2f vec0;
Vec2f vec1(1.0f, 1.0f);
Vec2f vec2(vec1);
TS_ASSERT_EQUALS(0.0f, vec0.x);
TS_ASSERT_EQUALS(0.0f, vec0.y);
TS_ASSERT_EQUALS(1.0f, vec1.x);
TS_ASSERT_EQUALS(1.0f, vec1.y);
TS_ASSERT_EQUALS(1.0f, vec2.x);
TS_ASSERT_EQUALS(1.0f, vec2.y);
}
void test_vector2_get_length()
{
Vec2f vec0(3.0f, 3.0f);
TS_ASSERT_EQUALS(18.0f, vec0.getLengthSquared());
vec0.x = -3.0f;
TS_ASSERT_EQUALS(18.0f, vec0.getLengthSquared());
TS_ASSERT_EQUALS(std::sqrt(18.0f), vec0.getLength());
Vec2i vec1(4, 2);
TS_ASSERT_EQUALS(20.0f, vec1.getLengthSquared());
TS_ASSERT_EQUALS(std::sqrt(20.0f), vec1.getLength());
}
void test_vector2_normalization()
{
Vec2f vec0(1.0f, 1.0f);
float targetXY = 1.0f / std::sqrt(2.0f);
TS_ASSERT_EQUALS(targetXY, vec0.normalized().x);
TS_ASSERT_EQUALS(targetXY, vec0.normalized().y);
vec0.normalize();
TS_ASSERT_EQUALS(targetXY, vec0.x);
TS_ASSERT_EQUALS(targetXY, vec0.y);
float x = 17.53f;
float y = 42.42f;
vec0.x = x;
vec0.y = y;
float targetX = x / std::sqrt(x * x + y * y);
float targetY = y / std::sqrt(x * x + y * y);
vec0.normalize();
TS_ASSERT_EQUALS(targetX, vec0.x);
TS_ASSERT_EQUALS(targetY, vec0.y);
}
void test_vector2_comparison()
{
Vec2i vec0(42, 24);
Vec2i vec1(42, 24);
Vec2i vec2(69, 96);
TS_ASSERT_EQUALS(true, vec0.isEqual(vec1));
TS_ASSERT_EQUALS(false, vec0.isEqual(vec2));
TS_ASSERT_EQUALS(true, vec0.isSame(vec0));
TS_ASSERT_EQUALS(false, vec0.isSame(vec1));
Vec2f vec3(42.0f, 24.0f);
Vec2f vec4(42.0f, 24.0f);
Vec2f vec5(69.0f, 96.0f);
TS_ASSERT_EQUALS(true, vec3.isEqual(vec4));
TS_ASSERT_EQUALS(false, vec3.isEqual(vec5));
TS_ASSERT_EQUALS(true, vec3.isSame(vec3));
TS_ASSERT_EQUALS(false, vec3.isSame(vec4));
}
void test_vector2_comparison_operators()
{
Vec2i vec0(42, 24);
Vec2i vec1(42, 24);
Vec2i vec2(69, 96);
TS_ASSERT_EQUALS(true, vec0 == vec0);
TS_ASSERT_EQUALS(true, vec0 == vec1);
TS_ASSERT_EQUALS(false, vec0 == vec2);
TS_ASSERT_EQUALS(false, vec0 != vec0);
TS_ASSERT_EQUALS(false, vec0 != vec1);
TS_ASSERT_EQUALS(true, vec0 != vec2);
Vec2f vec3(42.0f, 24.0f);
Vec2f vec4(42.0f, 24.0f);
Vec2f vec5(69.0f, 96.0f);
TS_ASSERT_EQUALS(true, vec3 == vec3);
TS_ASSERT_EQUALS(true, vec3 == vec4);
TS_ASSERT_EQUALS(false, vec3 == vec5);
TS_ASSERT_EQUALS(false, vec3 != vec3);
TS_ASSERT_EQUALS(false, vec3 != vec4);
TS_ASSERT_EQUALS(true, vec3 != vec5);
}
void test_assignment_operator()
{
Vec2i vec0(42, 24);
Vec2i vec1(69, 96);
vec1 = vec0;
TS_ASSERT_EQUALS(42, vec1.x);
TS_ASSERT_EQUALS(24, vec1.y);
TS_ASSERT_EQUALS(true, vec0.isEqual(vec1));
TS_ASSERT_EQUALS(false, vec0.isSame(vec1));
Vec2i vec2(42, 24);
Vec2i vec3(69, 96);
vec2 = vec3;
TS_ASSERT_EQUALS(69, vec2.x);
TS_ASSERT_EQUALS(96, vec2.y);
TS_ASSERT_EQUALS(true, vec3.isEqual(vec2));
TS_ASSERT_EQUALS(false, vec3.isSame(vec2));
}
void test_addition_operators()
{
Vec2i vec0(-2, 2);
Vec2i vec1(3, -3);
Vec2i vec2 = vec0 + vec1;
TS_ASSERT_EQUALS(1, vec2.x);
TS_ASSERT_EQUALS(-1, vec2.y);
TS_ASSERT_EQUALS(-2, vec0.x);
TS_ASSERT_EQUALS(2, vec0.y);
TS_ASSERT_EQUALS(3, vec1.x);
TS_ASSERT_EQUALS(-3, vec1.y);
vec0 += vec1;
TS_ASSERT_EQUALS(1, vec0.x);
TS_ASSERT_EQUALS(-1, vec0.y);
}
void test_subtraction_operators()
{
Vec2f vec0(-2.0f, 2.0f);
Vec2f vec1(3.0f, -3.0f);
Vec2f vec2 = vec0 - vec1;
TS_ASSERT_EQUALS(-5.0f, vec2.x);
TS_ASSERT_EQUALS(5.0f, vec2.y);
TS_ASSERT_EQUALS(-2.0f, vec0.x);
TS_ASSERT_EQUALS(2.0f, vec0.y);
TS_ASSERT_EQUALS(3.0f, vec1.x);
TS_ASSERT_EQUALS(-3.0f, vec1.y);
vec0 -= vec1;
TS_ASSERT_EQUALS(-5.0f, vec0.x);
TS_ASSERT_EQUALS(5.0f, vec0.y);
}
void test_scalar_multiplication_operators()
{
Vec2f vec0(-2.0f, 2.0f);
Vec2f vec1 = vec0 * 42.0f;
TS_ASSERT_EQUALS(-84.0f, vec1.x);
TS_ASSERT_EQUALS(84.0f, vec1.y);
TS_ASSERT_EQUALS(-2.0f, vec0.x);
TS_ASSERT_EQUALS(2.0f, vec0.y);
vec0 *= 42.0f;
TS_ASSERT_EQUALS(-84.0f, vec0.x);
TS_ASSERT_EQUALS(84.0f, vec0.y);
Vec2i vec2(-2, 2);
Vec2i vec3 = vec2 * 42.4f;
TS_ASSERT_EQUALS(-84, (int)vec3.x);
TS_ASSERT_EQUALS(84, (int)vec3.y);
Vec2i vec3b = vec2 * 42.5f;
TS_ASSERT_EQUALS(-85, (int)vec3b.x);
TS_ASSERT_EQUALS(85, (int)vec3b.y);
TS_ASSERT_EQUALS(-2, vec2.x);
TS_ASSERT_EQUALS(2, vec2.y);
vec2 *= 42;
TS_ASSERT_EQUALS(-84, vec2.x);
TS_ASSERT_EQUALS(84, vec2.y);
vec2 *= 0.5f;
TS_ASSERT_EQUALS(-42, vec2.x);
TS_ASSERT_EQUALS(42, vec2.y);
}
void test_dot_product_operator()
{
Vec2f vec0(2.0f, 4.0f);
Vec2f vec1(3.0f, 6.0f);
Vec2f vec2(-2.0f, -1.0f);
TS_ASSERT_EQUALS(30.0f, vec0.dotProduct(vec1));
TS_ASSERT_EQUALS(-8.0f, vec0.dotProduct(vec2));
Vec2f vec3(2, 4);
Vec2f vec4(3, 6);
Vec2f vec5(-2, -1);
TS_ASSERT_EQUALS(30, vec3.dotProduct(vec4));
TS_ASSERT_EQUALS(-8, vec3.dotProduct(vec5));
}
void test_scalar_division_operators()
{
Vec2f vec0(42.0f, 24.0f);
Vec2f vec1 = vec0 / 2.0f;
Vec2f vec2 = vec0 / 0.5f;
TS_ASSERT_EQUALS(42.0f, vec0.x);
TS_ASSERT_EQUALS(24.0f, vec0.y);
TS_ASSERT_EQUALS(21.0f, vec1.x);
TS_ASSERT_EQUALS(12.0f, vec1.y);
TS_ASSERT_EQUALS(84.0f, vec2.x);
TS_ASSERT_EQUALS(48.0f, vec2.y);
vec0 /= 2.0f;
TS_ASSERT_EQUALS(21.0f, vec0.x);
TS_ASSERT_EQUALS(12.0f, vec0.y);
Vec2i vec3(42, 24);
Vec2i vec4 = vec3 / 2;
TS_ASSERT_EQUALS(42, vec3.x);
TS_ASSERT_EQUALS(24, vec3.y);
TS_ASSERT_EQUALS(21, vec4.x);
TS_ASSERT_EQUALS(12, vec4.y);
vec3 /= 2;
TS_ASSERT_EQUALS(21, vec3.x);
TS_ASSERT_EQUALS(12, vec3.y);
}
};