OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TestGSLCompat.cpp
Go to the documentation of this file.
1
54#include <gtest/gtest.h>
55#include <cmath>
56#include <limits>
57#include "Utilities/GSLCompat.h"
58
59class GSLCompatTest : public ::testing::Test {
60protected:
61 void SetUp() override {
62 // Test setup
63 }
64};
65
66TEST_F(GSLCompatTest, ErfFunction) {
67 EXPECT_NEAR(gsl_sf_erf(0.0), 0.0, 1e-10);
68 EXPECT_NEAR(gsl_sf_erf(1.0), std::erf(1.0), 1e-10);
69 EXPECT_NEAR(gsl_sf_erf(-1.0), std::erf(-1.0), 1e-10);
70 EXPECT_NEAR(gsl_sf_erf(2.0), std::erf(2.0), 1e-10);
71
72 // erf(inf) should be 1
73 EXPECT_NEAR(gsl_sf_erf(10.0), 1.0, 1e-6);
74}
75
77 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, 0), 1.0);
78 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, 1), 2.0);
79 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, 2), 4.0);
80 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, 3), 8.0);
81 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, -1), 0.5);
82 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(2.0, -2), 0.25);
83
84 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(3.0, 4), 81.0);
85 EXPECT_DOUBLE_EQ(gsl_sf_pow_int(5.0, 3), 125.0);
86}
87
88TEST_F(GSLCompatTest, GammaFunction) {
89 EXPECT_NEAR(gsl_sf_gamma(1.0), 1.0, 1e-10);
90 EXPECT_NEAR(gsl_sf_gamma(2.0), 1.0, 1e-10);
91 EXPECT_NEAR(gsl_sf_gamma(3.0), 2.0, 1e-10);
92 EXPECT_NEAR(gsl_sf_gamma(4.0), 6.0, 1e-10);
93 EXPECT_NEAR(gsl_sf_gamma(0.5), std::sqrt(M_PI), 1e-10);
94}
95
96TEST_F(GSLCompatTest, Factorial) {
97 EXPECT_DOUBLE_EQ(gsl_sf_fact(0), 1.0);
98 EXPECT_DOUBLE_EQ(gsl_sf_fact(1), 1.0);
99 EXPECT_DOUBLE_EQ(gsl_sf_fact(2), 2.0);
100 EXPECT_DOUBLE_EQ(gsl_sf_fact(3), 6.0);
101 EXPECT_DOUBLE_EQ(gsl_sf_fact(4), 24.0);
102 EXPECT_DOUBLE_EQ(gsl_sf_fact(5), 120.0);
103 EXPECT_DOUBLE_EQ(gsl_sf_fact(10), 3628800.0);
104}
105
106TEST_F(GSLCompatTest, FactorialLarge) {
107 // Test large factorial (uses gamma function)
108 double fact20 = gsl_sf_fact(20);
109 double expected = 2432902008176640000.0; // 20!
110 EXPECT_NEAR(fact20, expected, 1e6); // Allow some tolerance for large numbers
111}
112
113TEST_F(GSLCompatTest, BinomialCoefficient) {
114 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 0), 1.0);
115 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 1), 5.0);
116 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 2), 10.0);
117 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 3), 10.0);
118 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 4), 5.0);
119 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 5), 1.0);
120
121 EXPECT_DOUBLE_EQ(gsl_sf_choose(10, 3), 120.0);
122 EXPECT_DOUBLE_EQ(gsl_sf_choose(10, 7), 120.0); // Symmetry
123}
124
125TEST_F(GSLCompatTest, BinomialCoefficientEdgeCases) {
126 EXPECT_DOUBLE_EQ(gsl_sf_choose(5, 6), 0.0); // m > n
127 EXPECT_DOUBLE_EQ(gsl_sf_choose(0, 0), 1.0);
128 EXPECT_DOUBLE_EQ(gsl_sf_choose(1, 0), 1.0);
129 EXPECT_DOUBLE_EQ(gsl_sf_choose(1, 1), 1.0);
130}
131
133 EXPECT_NEAR(gsl_hypot(3.0, 4.0), 5.0, 1e-10);
134 EXPECT_NEAR(gsl_hypot(5.0, 12.0), 13.0, 1e-10);
135 EXPECT_NEAR(gsl_hypot(0.0, 0.0), 0.0, 1e-10);
136 EXPECT_NEAR(gsl_hypot(1.0, 0.0), 1.0, 1e-10);
137 EXPECT_NEAR(gsl_hypot(0.0, 1.0), 1.0, 1e-10);
138}
139
140TEST_F(GSLCompatTest, ErrorHandler) {
142 // Should not crash
143 gsl_set_error_handler(old_handler);
144}
gsl_error_handler_t gsl_set_error_handler(gsl_error_handler_t handler)
Set a global error handler and return the previous handler.
Definition GSLCompat.h:32
double gsl_sf_gamma(double x)
Gamma function .
Definition GSLCompat.h:63
double gsl_sf_fact(unsigned int n)
Factorial (computed via for large ).
Definition GSLCompat.h:69
double gsl_sf_erf(double x)
Error function .
Definition GSLCompat.h:50
double gsl_sf_pow_int(double x, int n)
Integer power .
Definition GSLCompat.h:57
void(* gsl_error_handler_t)(const char *reason, const char *file, int line, int gsl_errno)
Signature of a GSL-style error handler callback.
Definition GSLCompat.h:27
double gsl_sf_choose(unsigned int n, unsigned int m)
Binomial coefficient .
Definition GSLCompat.h:87
double gsl_hypot(double x, double y)
Hypotenuse with overflow-safe std::hypot.
Definition GSLCompat.h:114
gsl_error_handler_t gsl_set_error_handler_off()
Disable error handling and return a null handler.
Definition GSLCompat.h:42
TEST_F(GSLCompatTest, ErfFunction)
void SetUp() override