44
55TEST (DFTD3XCTest, SearchXcnameLibXCXplusC)
66{
7- std::string xcpattern = " XC_GGA_X_PBE+XC_GGA_C_OP_PBE" ;
87 std::string xname;
9- DFTD3::_xcname_libxc_xplusc (xcpattern, xname);
8+ DFTD3::_xcname_libxc_xplusc (" XC_GGA_X_PBE+XC_GGA_C_OP_PBE" , xname);
9+ EXPECT_EQ (xname, " pbeop" );
10+ // then test the case with out prefix XC_
11+ DFTD3::_xcname_libxc_xplusc (" GGA_X_PBE+GGA_C_OP_PBE" , xname);
1012 EXPECT_EQ (xname, " pbeop" );
1113}
1214
1315TEST (DFTD3XCTest, SearchXcnameLibXCXC)
1416{
15- std::string xcpattern = " XC_LDA_XC_TETER93" ;
1617 std::string xname;
17- DFTD3::_xcname_libxc_xc (xcpattern, xname);
18+ DFTD3::_xcname_libxc_xc (" XC_LDA_XC_TETER93" , xname);
19+ EXPECT_EQ (xname, " teter93" );
20+ // then test the case with out prefix XC_
21+ DFTD3::_xcname_libxc_xc (" LDA_XC_TETER93" , xname);
1822 EXPECT_EQ (xname, " teter93" );
1923}
2024
2125TEST (DFTD3XCTest, SearchXcnameLibXC)
2226{
23- std::string xcpattern = " XC_GGA_X_PBE+XC_GGA_C_OP_PBE" ;
2427 std::string xname;
25- DFTD3::_xcname_libxc (xcpattern, xname);
28+ DFTD3::_xcname_libxc (" XC_GGA_X_PBE+XC_GGA_C_OP_PBE" , xname);
29+ EXPECT_EQ (xname, " pbeop" );
30+ // then test the case with out prefix XC_
31+ DFTD3::_xcname_libxc (" GGA_X_PBE+GGA_C_OP_PBE" , xname);
2632 EXPECT_EQ (xname, " pbeop" );
2733}
2834
@@ -45,6 +51,52 @@ TEST(DFTD3XCTest, SearchXcname)
4551 EXPECT_EQ (xname, " pbe" );
4652}
4753
54+ TEST (DFTD3XCTest, SuccessfulSearch)
55+ {
56+ std::string xc = " pbe" ;
57+ std::string d3method = " d3_0" ;
58+ std::string s6_in = " default" ;
59+ std::string s8_in = " default" ;
60+ std::string a1_in = " default" ;
61+ std::string a2_in = " default" ;
62+ double s6, s8, a1, a2;
63+ DFTD3::dftd3_params (xc, d3method, s6_in, s8_in, a1_in, a2_in, s6, s8, a1, a2);
64+ EXPECT_DOUBLE_EQ (s6, 1.0 );
65+ EXPECT_DOUBLE_EQ (s8, 0.722 );
66+ EXPECT_DOUBLE_EQ (a1, 1.217 );
67+ EXPECT_DOUBLE_EQ (a2, 1.0 );
68+
69+ // a more complicated case: MGGA_X_SCAN+MGGA_C_SCAN
70+ xc = " XC_MGGA_X_SCAN+XC_MGGA_C_SCAN" ;
71+ DFTD3::dftd3_params (xc, d3method, s6_in, s8_in, a1_in, a2_in, s6, s8, a1, a2);
72+ EXPECT_DOUBLE_EQ (s6, 1.0 );
73+ EXPECT_DOUBLE_EQ (s8, 0.0 );
74+ EXPECT_DOUBLE_EQ (a1, 1.324 );
75+ EXPECT_DOUBLE_EQ (a2, 1.0 );
76+
77+ // user defines all parameters
78+ s6_in = " 1.1" ;
79+ s8_in = " 0.1" ;
80+ a1_in = " 1.325" ;
81+ a2_in = " 1.1" ;
82+ DFTD3::dftd3_params (xc, d3method, s6_in, s8_in, a1_in, a2_in, s6, s8, a1, a2);
83+ EXPECT_DOUBLE_EQ (s6, 1.1 );
84+ EXPECT_DOUBLE_EQ (s8, 0.1 );
85+ EXPECT_DOUBLE_EQ (a1, 1.325 );
86+ EXPECT_DOUBLE_EQ (a2, 1.1 );
87+
88+ // user defines one parameter
89+ s6_in = " 1.1" ;
90+ s8_in = " default" ;
91+ a1_in = " default" ;
92+ a2_in = " default" ;
93+ DFTD3::dftd3_params (xc, d3method, s6_in, s8_in, a1_in, a2_in, s6, s8, a1, a2);
94+ EXPECT_DOUBLE_EQ (s6, 1.1 );
95+ EXPECT_DOUBLE_EQ (s8, 0.0 );
96+ EXPECT_DOUBLE_EQ (a1, 1.324 );
97+ EXPECT_DOUBLE_EQ (a2, 1.0 );
98+ }
99+
48100int main (int argc, char **argv)
49101{
50102 ::testing::InitGoogleTest (&argc, argv);
0 commit comments