File indexing completed on 2026-08-06 09:24:28
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef HERWIG_Utilities_Test_Maths_H
0010 #define HERWIG_Utilities_Test_Maths_H
0011
0012 #include <boost/test/unit_test.hpp>
0013
0014 #include "Herwig/Utilities/Maths.h"
0015
0016
0017
0018
0019
0020 BOOST_AUTO_TEST_SUITE(utilitiesMathsTest)
0021
0022
0023
0024
0025
0026 BOOST_AUTO_TEST_CASE(dilogFunction)
0027 {
0028 BOOST_CHECK_EQUAL(Herwig::Math::Li2(0.), 0.);
0029 BOOST_CHECK_CLOSE(Herwig::Math::Li2(-1).real(), -1./12. * M_PI * M_PI, 1e-5);
0030 BOOST_CHECK_CLOSE(Herwig::Math::Li2(-1).imag(), 0., 1e-5);
0031 BOOST_CHECK_CLOSE(Herwig::Math::Li2(1).real(), 1./6. * M_PI * M_PI, 1e-5);
0032 BOOST_CHECK_CLOSE(Herwig::Math::Li2(1).imag(), 0., 1e-5);
0033
0034 BOOST_CHECK_CLOSE(Herwig::Math::Li2(Herwig::Complex(0.5, 1)).real(), 0.203354, 2e-4);
0035 BOOST_CHECK_CLOSE(Herwig::Math::Li2(Herwig::Complex(0.5, 1)).imag(), 1.13194, 1e-4);
0036 BOOST_CHECK_CLOSE(Herwig::Math::Li2(Herwig::Complex(-0.5, -1)).real(), -0.578503, 1e-4);
0037 BOOST_CHECK_CLOSE(Herwig::Math::Li2(Herwig::Complex(-0.5, -1)).imag(), -0.772714, 1e-4);
0038 }
0039
0040 BOOST_AUTO_TEST_CASE(realDilogFunction)
0041 {
0042 BOOST_CHECK_EQUAL(Herwig::Math::ReLi2(0.), 0.);
0043 BOOST_CHECK_CLOSE(Herwig::Math::ReLi2(-1), -1./12. * M_PI * M_PI, 1e-5);
0044 BOOST_CHECK_CLOSE(Herwig::Math::ReLi2(1), 1./6. * M_PI * M_PI, 1e-5);
0045 }
0046
0047
0048 BOOST_AUTO_TEST_CASE(angleZeroTo2Pi)
0049 {
0050 BOOST_CHECK_EQUAL(Herwig::Math::angleZeroTo2Pi(0.), 0.);
0051 BOOST_CHECK_EQUAL(Herwig::Math::angleZeroTo2Pi(-0.5*M_PI), 1.5*M_PI);
0052 BOOST_CHECK_EQUAL(Herwig::Math::angleZeroTo2Pi(-2.5*M_PI), 1.5*M_PI);
0053 BOOST_CHECK_EQUAL(Herwig::Math::angleZeroTo2Pi( 2.5*M_PI), 0.5*M_PI);
0054 BOOST_CHECK(Herwig::Math::angleZeroTo2Pi( 2.5*M_PI) != 1*M_PI);
0055 }
0056
0057 BOOST_AUTO_TEST_CASE(angleMinusPiToPi)
0058 {
0059 BOOST_CHECK_EQUAL(Herwig::Math::angleMinusPiToPi(0.), 0.);
0060 BOOST_CHECK_EQUAL(Herwig::Math::angleMinusPiToPi(-0.5*M_PI), -0.5*M_PI);
0061 BOOST_CHECK_EQUAL(Herwig::Math::angleMinusPiToPi(-2.5*M_PI), -0.5*M_PI);
0062 BOOST_CHECK_EQUAL(Herwig::Math::angleMinusPiToPi( 2.5*M_PI), 0.5*M_PI);
0063 BOOST_CHECK(Herwig::Math::angleMinusPiToPi( 2.5*M_PI) != 1*M_PI);
0064 }
0065
0066 BOOST_AUTO_TEST_CASE(median)
0067 {
0068 std::vector<double> medianTest1;
0069 medianTest1.push_back(10);
0070 medianTest1.push_back(-1);
0071 medianTest1.push_back(5);
0072 BOOST_CHECK_EQUAL(Herwig::Math::median<double>(medianTest1), 5);
0073
0074 std::vector<double> medianTest2;
0075 medianTest2.push_back(-10);
0076 medianTest2.push_back(-1);
0077 medianTest2.push_back(-5);
0078 medianTest2.push_back(-6);
0079 BOOST_CHECK_EQUAL(Herwig::Math::median<double>(medianTest2), -6);
0080 }
0081
0082 BOOST_AUTO_TEST_SUITE_END()
0083
0084 #endif