1+ #include " ../math_integral.h"
2+ #include " gtest/gtest.h"
3+
4+ #include < math.h>
5+
6+ #define PI 3.14159265358979
7+ #define doublethreshold 1e-12
8+
9+ /* ***********************************************
10+ * unit test of class Integral
11+ ***********************************************/
12+
13+ /* *
14+ * Tested functions:
15+ * - function Simpson_Integral with rab as input
16+ * - function Simpson_Integral with dr as input
17+ * - function Simpson_Integral_0toall
18+ * - function Simpson_Integral_alltoinf
19+ *
20+ */
21+
22+ class Simpson_Integral_sinx : public testing ::Test
23+ {
24+ /* *
25+ * test the integral of sinx between [0,PI],
26+ * devide to mesh-1 parts
27+ */
28+
29+ protected:
30+
31+ double * func;
32+ double * rab;
33+ int mesh = 10001 ;
34+ double dr = PI/(mesh-1 );
35+ double asum;
36+ double * asumlist;
37+ double expectvalue = 2.0 ;
38+
39+ void SetUp ()
40+ {
41+ func = new double [mesh];
42+ rab = new double [mesh];
43+ asumlist = new double [mesh];
44+
45+ for (int i=0 ;i<mesh;i++)
46+ {
47+ func[i] = sin (PI*i/(mesh-1 ));
48+ rab[i] = dr;
49+ }
50+ }
51+
52+ void TearDown ()
53+ {
54+ delete func;
55+ delete rab;
56+ delete asumlist;
57+ }
58+ };
59+
60+ TEST_F (Simpson_Integral_sinx,Simpson_Integral_rab)
61+ {
62+ ModuleBase::Integral::Simpson_Integral (mesh,func,rab,asum);
63+ EXPECT_NEAR (asum,expectvalue,doublethreshold);
64+ EXPECT_DEATH (ModuleBase::Integral::Simpson_Integral (mesh-1 ,func,rab,asum)," " );
65+ }
66+
67+ TEST_F (Simpson_Integral_sinx,Simpson_Integral_dr)
68+ {
69+ ModuleBase::Integral::Simpson_Integral (mesh,func,dr,asum);
70+ EXPECT_NEAR (asum,expectvalue,doublethreshold);
71+ EXPECT_DEATH (ModuleBase::Integral::Simpson_Integral (mesh-1 ,func,dr,asum)," " );
72+ }
73+
74+ TEST_F (Simpson_Integral_sinx,Simpson_Integral_0toall)
75+ {
76+ int halfmesh = round (mesh/2 );
77+ ModuleBase::Integral::Simpson_Integral_0toall (mesh,func,rab,asumlist);
78+ EXPECT_NEAR (asumlist[mesh-1 ],expectvalue,doublethreshold);
79+ EXPECT_NEAR (asumlist[mesh-2 ],1.9999999506519738901 ,doublethreshold);
80+ EXPECT_NEAR (asumlist[halfmesh],expectvalue/2.0 ,doublethreshold);
81+ EXPECT_NEAR (asumlist[halfmesh-1 ],0.99968584073722277505 ,doublethreshold);
82+ }
83+
84+
85+ TEST_F (Simpson_Integral_sinx,Simpson_Integral_alltoinf)
86+ {
87+ int halfmesh = round (mesh/2 );
88+ ModuleBase::Integral::Simpson_Integral_alltoinf (mesh,func,rab,asumlist);
89+ EXPECT_NEAR (asumlist[0 ],expectvalue,doublethreshold);
90+ EXPECT_NEAR (asumlist[1 ],1.9999999506519754444 ,doublethreshold);
91+ EXPECT_NEAR (asumlist[halfmesh],expectvalue/2.0 ,doublethreshold);
92+ EXPECT_NEAR (asumlist[halfmesh-1 ],1.0003141592627740053 ,doublethreshold);
93+ }
0 commit comments