Blender  V3.3
BLI_math_vec_types_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "BLI_math_vec_types.hh"
6 
7 namespace blender::tests {
8 
9 using namespace blender::math;
10 
11 TEST(math_vec_types, ScalarConstructorUnsigned)
12 {
13  float2 u(5u);
14  EXPECT_EQ(u[0], 5.0f);
15  EXPECT_EQ(u[1], 5.0f);
16 }
17 
18 TEST(math_vec_types, ScalarConstructorInt)
19 {
20  float2 i(-5);
21  EXPECT_EQ(i[0], -5.0f);
22  EXPECT_EQ(i[1], -5.0f);
23 }
24 
25 TEST(math_vec_types, ScalarConstructorFloat)
26 {
27  float2 f(5.2f);
28  EXPECT_FLOAT_EQ(f[0], 5.2f);
29  EXPECT_FLOAT_EQ(f[1], 5.2f);
30 }
31 
32 TEST(math_vec_types, ScalarConstructorDouble)
33 {
34  float2 d(5.2);
35  EXPECT_FLOAT_EQ(d[0], 5.2f);
36  EXPECT_FLOAT_EQ(d[1], 5.2f);
37 }
38 
39 TEST(math_vec_types, MultiScalarConstructorVec2)
40 {
41  int2 i(5, -1);
42  EXPECT_EQ(i[0], 5);
43  EXPECT_EQ(i[1], -1);
44 }
45 
46 TEST(math_vec_types, MultiScalarConstructorVec3)
47 {
48  int3 i(5, -1, 6u);
49  EXPECT_EQ(i[0], 5);
50  EXPECT_EQ(i[1], -1);
51  EXPECT_EQ(i[2], 6);
52 }
53 
54 TEST(math_vec_types, MultiScalarConstructorVec4)
55 {
56  int4 i(5, -1, 6u, 0);
57  EXPECT_EQ(i[0], 5);
58  EXPECT_EQ(i[1], -1);
59  EXPECT_EQ(i[2], 6);
60  EXPECT_EQ(i[3], 0);
61 }
62 
63 TEST(math_vec_types, MixedScalarVectorConstructorVec3)
64 {
65  float3 fl_v2(float2(5.5f), 1.8f);
66  EXPECT_FLOAT_EQ(fl_v2[0], 5.5f);
67  EXPECT_FLOAT_EQ(fl_v2[1], 5.5f);
68  EXPECT_FLOAT_EQ(fl_v2[2], 1.8f);
69 
70  float3 v2_fl(1.8f, float2(5.5f));
71  EXPECT_FLOAT_EQ(v2_fl[0], 1.8f);
72  EXPECT_FLOAT_EQ(v2_fl[1], 5.5f);
73  EXPECT_FLOAT_EQ(v2_fl[2], 5.5f);
74 }
75 
76 TEST(math_vec_types, MixedScalarVectorConstructorVec4)
77 {
78  int4 v2_fl_fl(float2(1), 2, 3);
79  EXPECT_EQ(v2_fl_fl[0], 1);
80  EXPECT_EQ(v2_fl_fl[1], 1);
81  EXPECT_EQ(v2_fl_fl[2], 2);
82  EXPECT_EQ(v2_fl_fl[3], 3);
83 
84  float4 fl_v2_fl(1, int2(2), 3);
85  EXPECT_EQ(fl_v2_fl[0], 1);
86  EXPECT_EQ(fl_v2_fl[1], 2);
87  EXPECT_EQ(fl_v2_fl[2], 2);
88  EXPECT_EQ(fl_v2_fl[3], 3);
89 
90  double4 fl_fl_v2(1, 2, double2(3));
91  EXPECT_EQ(fl_fl_v2[0], 1);
92  EXPECT_EQ(fl_fl_v2[1], 2);
93  EXPECT_EQ(fl_fl_v2[2], 3);
94  EXPECT_EQ(fl_fl_v2[3], 3);
95 
96  int4 v2_v2(float2(1), uint2(2));
97  EXPECT_EQ(v2_v2[0], 1);
98  EXPECT_EQ(v2_v2[1], 1);
99  EXPECT_EQ(v2_v2[2], 2);
100  EXPECT_EQ(v2_v2[3], 2);
101 
102  float4 v3_fl(uint3(1), 2);
103  EXPECT_EQ(v3_fl[0], 1);
104  EXPECT_EQ(v3_fl[1], 1);
105  EXPECT_EQ(v3_fl[2], 1);
106  EXPECT_EQ(v3_fl[3], 2);
107 
108  uint4 fl_v3(1, float3(2));
109  EXPECT_EQ(fl_v3[0], 1);
110  EXPECT_EQ(fl_v3[1], 2);
111  EXPECT_EQ(fl_v3[2], 2);
112  EXPECT_EQ(fl_v3[3], 2);
113 }
114 
115 TEST(math_vec_types, ComponentMasking)
116 {
117  int4 i(0, 1, 2, 3);
118  float2 f2 = float2(i);
119  EXPECT_EQ(f2[0], 0.0f);
120  EXPECT_EQ(f2[1], 1.0f);
121 }
122 
123 TEST(math_vec_types, PointerConversion)
124 {
125  float array[3] = {1.0f, 2.0f, 3.0f};
126  float3 farray(array);
127  EXPECT_EQ(farray[0], 1.0f);
128  EXPECT_EQ(farray[1], 2.0f);
129  EXPECT_EQ(farray[2], 3.0f);
130 }
131 
132 TEST(math_vec_types, PointerArrayConversion)
133 {
134  float array[1][3] = {{1.0f, 2.0f, 3.0f}};
135  float(*ptr)[3] = array;
136  float3 fptr(ptr);
137  EXPECT_EQ(fptr[0], 1.0f);
138  EXPECT_EQ(fptr[1], 2.0f);
139  EXPECT_EQ(fptr[2], 3.0f);
140 }
141 
142 TEST(math_vec_types, VectorTypeConversion)
143 {
144  double2 d(int2(float2(5.75f, -1.57f)));
145  EXPECT_EQ(d[0], 5.0);
146  EXPECT_EQ(d[1], -1.0);
147 }
148 
149 TEST(math_vec_types, Divide)
150 {
151  float2 a(1.0f, 2.0f);
152  float2 b(0.5f, 2.0f);
153  float2 result = a / b;
154  EXPECT_FLOAT_EQ(result.x, 2.0f);
155  EXPECT_FLOAT_EQ(result.y, 1.0f);
156 }
157 
158 TEST(math_vec_types, DivideFloatByVector)
159 {
160  float a = 2.0f;
161  float2 b(0.5f, 2.0f);
162  float2 result = a / b;
163  EXPECT_FLOAT_EQ(result.x, 4.0f);
164  EXPECT_FLOAT_EQ(result.y, 1.0f);
165 }
166 
167 TEST(math_vec_types, DivideFloatByVectorSmall)
168 {
169  float2 result = 2.0f / float2(2.0f);
170  EXPECT_FLOAT_EQ(result.x, 1.0f);
171  EXPECT_FLOAT_EQ(result.y, 1.0f);
172 }
173 
174 } // namespace blender::tests
typedef float(TangentPoint)[2]
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
static unsigned a[3]
Definition: RandGen.cpp:78
void Divide(const JntArray &src, const double &factor, JntArray &dest)
Definition: jntarray.cpp:124
TEST(any, DefaultConstructor)
Definition: BLI_any_test.cc:10
vec_base< double, 2 > double2
vec_base< uint32_t, 3 > uint3
vec_base< float, 3 > float3
vec_base< uint32_t, 2 > uint2
vec_base< float, 2 > float2
vec_base< int32_t, 2 > int2
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
PointerRNA * ptr
Definition: wm_files.c:3480