Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:28

0001 // -*- C++ -*-
0002 //
0003 // utilitiesTestMaths.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration, 2015 Marco A. Harrendorf
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
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  * Start of boost unit tests for Maths.h
0018  * 
0019  */
0020 BOOST_AUTO_TEST_SUITE(utilitiesMathsTest)
0021 
0022 /*
0023  * Boost unit tests
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 /* HERWIG_Utilities_Test_Maths_H */