Blender  V3.3
BLI_math_solvers_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_solvers.h"
6 
7 TEST(math_solvers, Tridiagonal1)
8 {
9  float a[1] = {1}; // ignored
10  float b[1] = {2};
11  float c[1] = {1}; // ignored
12  float d[1] = {4};
13  float x[1];
14 
15  EXPECT_TRUE(BLI_tridiagonal_solve(a, b, c, d, x, 1));
16  EXPECT_FLOAT_EQ(x[0], 2);
17 }
18 
19 TEST(math_solvers, Tridiagonal3)
20 {
21  float a[3] = {1, 2, 3}; // 1 ignored
22  float b[3] = {4, 5, 6};
23  float c[3] = {7, 8, 9}; // 9 ignored
24  float d[3] = {18, 36, 24};
25  float x[3];
26 
27  EXPECT_TRUE(BLI_tridiagonal_solve(a, b, c, d, x, 3));
28  EXPECT_FLOAT_EQ(x[0], 1);
29  EXPECT_FLOAT_EQ(x[1], 2);
30  EXPECT_FLOAT_EQ(x[2], 3);
31 }
32 
33 TEST(math_solvers, CyclicTridiagonal1)
34 {
35  float a[1] = {1};
36  float b[1] = {2};
37  float c[1] = {1};
38  float d[1] = {4};
39  float x[1];
40 
41  EXPECT_TRUE(BLI_tridiagonal_solve_cyclic(a, b, c, d, x, 1));
42  EXPECT_FLOAT_EQ(x[0], 1);
43 }
44 
45 TEST(math_solvers, CyclicTridiagonal2)
46 {
47  float a[2] = {1, 2};
48  float b[2] = {3, 4};
49  float c[2] = {5, 6};
50  float d[2] = {15, 16};
51  float x[2];
52 
53  EXPECT_TRUE(BLI_tridiagonal_solve_cyclic(a, b, c, d, x, 2));
54  EXPECT_FLOAT_EQ(x[0], 1);
55  EXPECT_FLOAT_EQ(x[1], 2);
56 }
57 
58 TEST(math_solvers, CyclicTridiagonal3)
59 {
60  float a[3] = {1, 2, 3};
61  float b[3] = {4, 5, 6};
62  float c[3] = {7, 8, 9};
63  float d[3] = {21, 36, 33};
64  float x[3];
65 
66  EXPECT_TRUE(BLI_tridiagonal_solve_cyclic(a, b, c, d, x, 3));
67  EXPECT_FLOAT_EQ(x[0], 1);
68  EXPECT_FLOAT_EQ(x[1], 2);
69  EXPECT_FLOAT_EQ(x[2], 3);
70 }
bool BLI_tridiagonal_solve_cyclic(const float *a, const float *b, const float *c, const float *d, float *r_x, int count)
Solve a possibly cyclic tridiagonal system using the Sherman-Morrison formula.
Definition: math_solvers.c:86
bool BLI_tridiagonal_solve(const float *a, const float *b, const float *c, const float *d, float *r_x, int count)
Solve a tridiagonal system of equations:
Definition: math_solvers.c:41
TEST(math_solvers, Tridiagonal1)
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
static const pxr::TfToken b("b", pxr::TfToken::Immortal)