1 /*
2 * Distributed under the OSI-approved Apache License, Version 2.0. See
3 * accompanying file Copyright.txt for details.
4 */
5 #include <cmath>
6 #include <cstdint>
7 #include <cstring>
8
9 #include <iostream>
10 #include <limits>
11 #include <stdexcept>
12
13 #include <adios2.h>
14 #include <adios2/common/ADIOSTypes.h>
15 #include <adios2/helper/adiosString.h>
16
17 #include <gtest/gtest.h>
18
TEST(ADIOS2HelperString,ADIOS2HelperStringFNF)19 TEST(ADIOS2HelperString, ADIOS2HelperStringFNF)
20 {
21
22 const std::string fname("nosuchfile.txt");
23 const std::string hint("");
24
25 ASSERT_THROW(adios2::helper::FileToString(fname, hint),
26 std::ios_base::failure);
27 }
28
TEST(ADIOS2HelperString,ADIOS2HelperStringParameterMapFromVector)29 TEST(ADIOS2HelperString, ADIOS2HelperStringParameterMapFromVector)
30 {
31
32 const std::vector<std::string> badparam_in = {"badparam"};
33 const std::vector<std::string> emptyparam_in = {"emptyparam="};
34 const std::vector<std::string> dupparam_in = {"dupparam=1", "dupparam=2"};
35 const std::vector<std::string> param_in = {"param1=1", "param2=2",
36 "param3=3"};
37
38 adios2::Params parameters =
39 adios2::helper::BuildParametersMap(param_in, '=');
40
41 ASSERT_EQ(parameters.find("param1")->second, "1");
42 ASSERT_EQ(parameters.find("param2")->second, "2");
43 ASSERT_EQ(parameters.find("param3")->second, "3");
44
45 ASSERT_THROW(adios2::helper::BuildParametersMap(badparam_in, '='),
46 std::invalid_argument);
47 ASSERT_THROW(adios2::helper::BuildParametersMap(emptyparam_in, '='),
48 std::invalid_argument);
49 ASSERT_THROW(adios2::helper::BuildParametersMap(dupparam_in, '='),
50 std::invalid_argument);
51 }
52
TEST(ADIOS2HelperString,ADIOS2HelperStringParameterMapFromString)53 TEST(ADIOS2HelperString, ADIOS2HelperStringParameterMapFromString)
54 {
55
56 const std::string badparam_in = "badparam";
57 const std::string emptyparam_in = "emptyparam=";
58 const std::string dupparam_in = "dupparam = 1 , dupparam=2";
59 const std::string param_in =
60 "param1=1, param2=2, "
61 " param3=3";
62
63 adios2::Params parameters =
64 adios2::helper::BuildParametersMap(param_in, '=', ',');
65
66 ASSERT_EQ(parameters.find("param1")->second, "1");
67 ASSERT_EQ(parameters.find("param2")->second, "2");
68 ASSERT_EQ(parameters.find("param3")->second, "3");
69
70 ASSERT_THROW(adios2::helper::BuildParametersMap(badparam_in, '=', ','),
71 std::invalid_argument);
72 ASSERT_THROW(adios2::helper::BuildParametersMap(emptyparam_in, '=', ','),
73 std::invalid_argument);
74 ASSERT_THROW(adios2::helper::BuildParametersMap(dupparam_in, '=', ','),
75 std::invalid_argument);
76 }
77
TEST(ADIOS2HelperString,ADIOS2HelperStringAddExtension)78 TEST(ADIOS2HelperString, ADIOS2HelperStringAddExtension)
79 {
80
81 const std::string abc("abc");
82 const std::string abcbp("abc.bp");
83 const std::string ext(".bp");
84
85 ASSERT_EQ(adios2::helper::AddExtension(abc, ext), abcbp);
86 ASSERT_EQ(adios2::helper::AddExtension(abcbp, ext), abcbp);
87 }
88
TEST(ADIOS2HelperString,ADIOS2HelperStringEndsWithCaseSensitive)89 TEST(ADIOS2HelperString, ADIOS2HelperStringEndsWithCaseSensitive)
90 {
91
92 const std::string abcdefgh("abcd.efgh");
93 const std::string theend(".efgh");
94 const std::string notanend(".ephs");
95 const std::string shortstr("abc");
96
97 ASSERT_TRUE(adios2::helper::EndsWith(abcdefgh, theend));
98 ASSERT_FALSE(adios2::helper::EndsWith(abcdefgh, notanend));
99 ASSERT_FALSE(adios2::helper::EndsWith(shortstr, theend));
100 }
101
TEST(ADIOS2HelperString,ADIOS2HelperStringEndsWithCaseInsensitive)102 TEST(ADIOS2HelperString, ADIOS2HelperStringEndsWithCaseInsensitive)
103 {
104
105 const std::string abcdefgh("abCd.eFgH");
106 const std::string end1(".efGh");
107 const std::string end2(".efgh");
108 const std::string noend1(".ephs");
109 const std::string noend2(".efdHs");
110 const std::string shortstr("ABC");
111
112 ASSERT_TRUE(adios2::helper::EndsWith(abcdefgh, end1, false));
113 ASSERT_TRUE(adios2::helper::EndsWith(abcdefgh, end2, false));
114 ASSERT_FALSE(adios2::helper::EndsWith(abcdefgh, noend1, false));
115 ASSERT_FALSE(adios2::helper::EndsWith(abcdefgh, noend2, false));
116 ASSERT_FALSE(adios2::helper::EndsWith(shortstr, end1, false));
117 }
118
TEST(ADIOS2HelperString,ADIOS2HelperStringConversion)119 TEST(ADIOS2HelperString, ADIOS2HelperStringConversion)
120 {
121
122 const std::string dbl("123.1230");
123 const std::string uint("123");
124 const std::string notnum("notnum");
125 const std::string hint("");
126
127 const double diff =
128 std::abs(adios2::helper::StringTo<double>(dbl, hint) - 123.123);
129 ASSERT_LT(diff, 1E-4);
130
131 ASSERT_THROW(adios2::helper::StringTo<double>(notnum, hint),
132 std::invalid_argument);
133 ASSERT_EQ(adios2::helper::StringTo<uint32_t>(uint, hint), 123);
134 ASSERT_THROW(adios2::helper::StringTo<uint32_t>(notnum, hint),
135 std::invalid_argument);
136 }
137
TEST(ADIOS2HelperString,ADIOS2HelperDimString)138 TEST(ADIOS2HelperString, ADIOS2HelperDimString)
139 {
140
141 const adios2::Dims dimensions = {1, 2, 3};
142 const std::string dimstr("Dims(3):[1, 2, 3]");
143
144 ASSERT_EQ(adios2::helper::DimsToString(dimensions), dimstr);
145 }
146
TEST(ADIOS2HelperString,ADIOS2HelperGlobalName)147 TEST(ADIOS2HelperString, ADIOS2HelperGlobalName)
148 {
149
150 const std::string localName("myfile.bp");
151 const std::string prefix("mydir");
152 const std::string separator("/");
153 const std::string global("mydir/myfile.bp");
154
155 ASSERT_EQ(adios2::helper::GlobalName(localName, prefix, separator), global);
156 }
157
main(int argc,char ** argv)158 int main(int argc, char **argv)
159 {
160
161 int result;
162 ::testing::InitGoogleTest(&argc, argv);
163 result = RUN_ALL_TESTS();
164
165 return result;
166 }
167