BLI: Fix error in vector library and add more test for operators

The operator was wrongly returning a reference to local temp variable.

Add test for all uncovered operators.
This commit is contained in:
Clément Foucault 2022-11-25 11:27:48 +01:00
parent 0ce18561bc
commit b9c358392d
2 changed files with 89 additions and 2 deletions

View File

@ -261,9 +261,8 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size>
vec_base &operator+=(const T &b)
{
vec_base result;
unroll<Size>([&](auto i) { (*this)[i] += b; });
return result;
return *this;
}
friend vec_base operator-(const vec_base &a)

View File

@ -146,6 +146,94 @@ TEST(math_vec_types, VectorTypeConversion)
EXPECT_EQ(d[1], -1.0);
}
TEST(math_vec_types, Add)
{
float2 result = float2(1.0f, 2.0f) + float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result.x, 1.5f);
EXPECT_FLOAT_EQ(result.y, 4.0f);
float2 result2 = float2(1.0f, 2.0f);
result2 += float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 1.5f);
EXPECT_FLOAT_EQ(result2.y, 4.0f);
}
TEST(math_vec_types, AddFloatByVector)
{
float2 result = float2(0.5f, 2.0f) + 2.0f;
EXPECT_FLOAT_EQ(result.x, 2.5f);
EXPECT_FLOAT_EQ(result.y, 4.0f);
float2 result2 = 2.0f + float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 2.5f);
EXPECT_FLOAT_EQ(result2.y, 4.0f);
float2 result3 = float2(0.5f, 2.0f);
result3 += 2.0f;
EXPECT_FLOAT_EQ(result3.x, 2.5f);
EXPECT_FLOAT_EQ(result3.y, 4.0f);
}
TEST(math_vec_types, Sub)
{
float2 result = float2(1.0f, 2.0f) - float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result.x, 0.5f);
EXPECT_FLOAT_EQ(result.y, 0.0f);
float2 result2 = float2(1.0f, 2.0f);
result2 -= float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 0.5f);
EXPECT_FLOAT_EQ(result2.y, 0.0f);
float2 result3 = -float2(1.0f, 2.0f);
EXPECT_FLOAT_EQ(result3.x, -1.0f);
EXPECT_FLOAT_EQ(result3.y, -2.0f);
}
TEST(math_vec_types, SubFloatByVector)
{
float2 result = float2(0.5f, 2.0f) - 2.0f;
EXPECT_FLOAT_EQ(result.x, -1.5f);
EXPECT_FLOAT_EQ(result.y, 0.0f);
float2 result2 = 2.0f - float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 1.5f);
EXPECT_FLOAT_EQ(result2.y, 0.0f);
float2 result3 = float2(0.5f, 2.0f);
result3 -= 2.0f;
EXPECT_FLOAT_EQ(result3.x, -1.5f);
EXPECT_FLOAT_EQ(result3.y, 0.0f);
}
TEST(math_vec_types, Mul)
{
float2 result = float2(1.0f, 2.0f) * float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result.x, 0.5f);
EXPECT_FLOAT_EQ(result.y, 4.0f);
float2 result2 = float2(1.0f, 2.0f);
result2 *= float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 0.5f);
EXPECT_FLOAT_EQ(result2.y, 4.0f);
}
TEST(math_vec_types, MulFloatByVector)
{
float2 result = float2(0.5f, 2.0f) * 2.0f;
EXPECT_FLOAT_EQ(result.x, 1.0f);
EXPECT_FLOAT_EQ(result.y, 4.0f);
float2 result2 = 2.0f * float2(0.5f, 2.0f);
EXPECT_FLOAT_EQ(result2.x, 1.0f);
EXPECT_FLOAT_EQ(result2.y, 4.0f);
float2 result3 = float2(0.5f, 2.0f);
result3 *= 2.0f;
EXPECT_FLOAT_EQ(result3.x, 1.0f);
EXPECT_FLOAT_EQ(result3.y, 4.0f);
}
TEST(math_vec_types, Divide)
{
float2 a(1.0f, 2.0f);