OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TestGSLComplex.cpp
Go to the documentation of this file.
1
59#include <gtest/gtest.h>
60#include <cmath>
61#include <complex>
63
64class GSLComplexTest : public ::testing::Test {
65protected:
66 void SetUp() override {
67 // Test setup
68 }
69};
70
71TEST_F(GSLComplexTest, CreateRectangular) {
72 gsl_complex z = gsl_complex_rect(3.0, 4.0);
73 EXPECT_DOUBLE_EQ(GSL_REAL(z), 3.0);
74 EXPECT_DOUBLE_EQ(GSL_IMAG(z), 4.0);
75}
76
77TEST_F(GSLComplexTest, CreatePolar) {
78 gsl_complex z = gsl_complex_polar(5.0, M_PI / 4.0);
79 EXPECT_NEAR(GSL_REAL(z), 5.0 * std::cos(M_PI / 4.0), 1e-10);
80 EXPECT_NEAR(GSL_IMAG(z), 5.0 * std::sin(M_PI / 4.0), 1e-10);
81}
82
84 gsl_complex z1 = gsl_complex_rect(1.0, 2.0);
85 gsl_complex z2 = gsl_complex_rect(3.0, 4.0);
86 gsl_complex sum = gsl_complex_add(z1, z2);
87
88 EXPECT_DOUBLE_EQ(GSL_REAL(sum), 4.0);
89 EXPECT_DOUBLE_EQ(GSL_IMAG(sum), 6.0);
90}
91
92TEST_F(GSLComplexTest, Subtraction) {
93 gsl_complex z1 = gsl_complex_rect(5.0, 6.0);
94 gsl_complex z2 = gsl_complex_rect(2.0, 3.0);
95 gsl_complex diff = gsl_complex_sub(z1, z2);
96
97 EXPECT_DOUBLE_EQ(GSL_REAL(diff), 3.0);
98 EXPECT_DOUBLE_EQ(GSL_IMAG(diff), 3.0);
99}
100
101TEST_F(GSLComplexTest, Multiplication) {
102 gsl_complex z1 = gsl_complex_rect(1.0, 2.0);
103 gsl_complex z2 = gsl_complex_rect(3.0, 4.0);
105
106 // (1+2i)(3+4i) = 3 + 4i + 6i + 8i^2 = 3 + 10i - 8 = -5 + 10i
107 EXPECT_DOUBLE_EQ(GSL_REAL(prod), -5.0);
108 EXPECT_DOUBLE_EQ(GSL_IMAG(prod), 10.0);
109}
110
112 gsl_complex z1 = gsl_complex_rect(1.0, 0.0);
113 gsl_complex z2 = gsl_complex_rect(0.0, 1.0);
114 gsl_complex quot = gsl_complex_div(z1, z2);
115
116 // 1 / i = -i
117 EXPECT_NEAR(GSL_REAL(quot), 0.0, 1e-10);
118 EXPECT_NEAR(GSL_IMAG(quot), -1.0, 1e-10);
119}
120
122 gsl_complex z = gsl_complex_rect(3.0, 4.0);
124
125 EXPECT_DOUBLE_EQ(GSL_REAL(conj), 3.0);
126 EXPECT_DOUBLE_EQ(GSL_IMAG(conj), -4.0);
127}
128
130 gsl_complex z = gsl_complex_rect(3.0, 4.0);
131 double abs = gsl_complex_abs(z);
132
133 EXPECT_NEAR(abs, 5.0, 1e-10);
134}
135
137 gsl_complex z = gsl_complex_rect(1.0, 1.0);
138 double arg = gsl_complex_arg(z);
139
140 EXPECT_NEAR(arg, M_PI / 4.0, 1e-10);
141}
142
144 gsl_complex z = gsl_complex_rect(1.0, 0.0);
145 gsl_complex tanh_z = gsl_complex_tanh(z);
146
147 // tanh(1) ≈ 0.7616
148 EXPECT_NEAR(GSL_REAL(tanh_z), std::tanh(1.0), 1e-10);
149 EXPECT_NEAR(GSL_IMAG(tanh_z), 0.0, 1e-10);
150
151 // Test with imaginary part
152 z = gsl_complex_rect(0.0, 1.0);
153 tanh_z = gsl_complex_tanh(z);
154 // tanh(i) = i*tan(1)
155 EXPECT_NEAR(GSL_REAL(tanh_z), 0.0, 1e-10);
156 EXPECT_NEAR(GSL_IMAG(tanh_z), std::tan(1.0), 1e-10);
157}
158
160 gsl_complex z = gsl_complex_rect(0.0, M_PI);
161 gsl_complex exp_z = gsl_complex_exp(z);
162
163 // e^(i*pi) = -1
164 EXPECT_NEAR(GSL_REAL(exp_z), -1.0, 1e-10);
165 EXPECT_NEAR(GSL_IMAG(exp_z), 0.0, 1e-10);
166}
167
169 gsl_complex z = gsl_complex_rect(1.0, 0.0);
170 gsl_complex log_z = gsl_complex_log(z);
171
172 // ln(1) = 0
173 EXPECT_NEAR(GSL_REAL(log_z), 0.0, 1e-10);
174 EXPECT_NEAR(GSL_IMAG(log_z), 0.0, 1e-10);
175}
#define GSL_REAL(z)
Definition GSLCompat.h:117
#define GSL_IMAG(z)
Definition GSLCompat.h:118
gsl_complex gsl_complex_rect(double x, double y)
Construct .
Definition GSLComplex.h:49
gsl_complex gsl_complex_exp(gsl_complex a)
Complex exponential .
Definition GSLComplex.h:181
gsl_complex gsl_complex_div(gsl_complex a, gsl_complex b)
Quotient .
Definition GSLComplex.h:106
gsl_complex gsl_complex_mul(gsl_complex a, gsl_complex b)
Product .
Definition GSLComplex.h:97
double gsl_complex_abs(gsl_complex z)
Magnitude .
Definition GSLComplex.h:67
gsl_complex gsl_complex_polar(double r, double theta)
Construct .
Definition GSLComplex.h:55
gsl_complex gsl_complex_conjugate(gsl_complex a)
Complex conjugate .
Definition GSLComplex.h:151
gsl_complex gsl_complex_add(gsl_complex a, gsl_complex b)
Sum .
Definition GSLComplex.h:79
double gsl_complex_arg(gsl_complex z)
Argument (phase) .
Definition GSLComplex.h:62
gsl_complex gsl_complex_tanh(gsl_complex a)
Complex hyperbolic tangent .
Definition GSLComplex.h:227
gsl_complex gsl_complex_log(gsl_complex a)
Complex natural logarithm .
Definition GSLComplex.h:190
gsl_complex gsl_complex_sub(gsl_complex a, gsl_complex b)
Difference .
Definition GSLComplex.h:88
KOKKOS_INLINE_FUNCTION matrix_t< Rows1, Cols2 > prod(const matrix_t< Rows1, Cols1 > &a, const matrix_t< Rows2, Cols2 > &b)
Definition Matrix.h:151
TEST_F(GSLComplexTest, CreateRectangular)
void SetUp() override
Complex number stored as .
Definition GSLComplex.h:27