From 53137560aed84dc22bb901e69efa95907e4cf13c Mon Sep 17 00:00:00 2001 From: swetank18 Date: Thu, 29 Jan 2026 05:07:04 +0530 Subject: [PATCH 1/2] Add tests for analytical TF1 integrals --- hist/hist/test/test_tf1.cxx | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hist/hist/test/test_tf1.cxx b/hist/hist/test/test_tf1.cxx index eca71b878f960..872dbc763e977 100644 --- a/hist/hist/test/test_tf1.cxx +++ b/hist/hist/test/test_tf1.cxx @@ -4,6 +4,7 @@ #include "TObjArray.h" #include "gtest/gtest.h" +#include #include @@ -81,6 +82,31 @@ void test_normalization() { n2.SetParameter(0, 0); EXPECT_NEAR(n2.Integral(xmin, xmax), -.5, delta); } +// Test analytical exponential integral when p1 == 0 +TEST(TF1AnalyticalIntegral, ExponentialP1Zero) +{ + TF1 f("f_expo_zero", "expo", 0.0, 2.0); + f.SetParameters(1.2, 0.0); // p0 = 1.2, p1 = 0 + + const double a = 0.3; + const double b = 1.7; + + const double result = f.AnalyticalIntegral(a, b); + const double expected = std::exp(1.2) * (b - a); + + EXPECT_NEAR(result, expected, 1e-12); +} + +// Test analytical Gaussian integral with invalid sigma +TEST(TF1AnalyticalIntegral, GaussianInvalidSigma) +{ + TF1 f("f_gaus_invalid", "gaus", -5.0, 5.0); + f.SetParameters(1.0, 0.0, 0.0); // sigma = 0 + + const double result = f.AnalyticalIntegral(-1.0, 1.0); + + EXPECT_TRUE(std::isnan(result)); +} void voigtHelper(double sigma, double lg) { From 67a516e681a36607f6d9b8c1ad27c68492aae4c9 Mon Sep 17 00:00:00 2001 From: swetank18 Date: Sat, 31 Jan 2026 20:58:49 +0530 Subject: [PATCH 2/2] Fix analytical integral tests to use TF1::Integral --- hist/hist/test/test_tf1.cxx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hist/hist/test/test_tf1.cxx b/hist/hist/test/test_tf1.cxx index 872dbc763e977..212409cc743f3 100644 --- a/hist/hist/test/test_tf1.cxx +++ b/hist/hist/test/test_tf1.cxx @@ -91,7 +91,10 @@ TEST(TF1AnalyticalIntegral, ExponentialP1Zero) const double a = 0.3; const double b = 1.7; + const double result = f.AnalyticalIntegral(a, b); + const double result = f.Integral(a, b); + const double expected = std::exp(1.2) * (b - a); EXPECT_NEAR(result, expected, 1e-12); @@ -103,7 +106,11 @@ TEST(TF1AnalyticalIntegral, GaussianInvalidSigma) TF1 f("f_gaus_invalid", "gaus", -5.0, 5.0); f.SetParameters(1.0, 0.0, 0.0); // sigma = 0 - const double result = f.AnalyticalIntegral(-1.0, 1.0); + + + + const double result = f.Integral(-1.0, 1.0); + EXPECT_TRUE(std::isnan(result)); }