DryChem 1.0.0
A generic, compile-time C++ toolbox with no dependencies for the modern computational chemistry project.
Loading...
Searching...
No Matches
testLexicalCast.hpp
Go to the documentation of this file.
1// Copyright (c) 2020-2025 Cody R. Drisko. All rights reserved.
2// Licensed under the MIT License. See the LICENSE file in the project root for more information.
3//
4// Name: testLexicalCast.hpp
5// Author: crdrisko
6// Date: 11/09/2020-11:07:16
7// Description: Provides ~100% unit test coverage over the lexical_cast functions
8
9#ifndef DRYCHEM_COMMON_UTILITIES_LIBS_STRINGS_TESTS_TESTUTILITIES_TESTLEXICALCAST_HPP
10#define DRYCHEM_COMMON_UTILITIES_LIBS_STRINGS_TESTS_TESTUTILITIES_TESTLEXICALCAST_HPP
11
12#include <limits>
13#include <string>
14
16#include <gtest/gtest.h>
17
19
20GTEST_TEST(testLexicalCast, lexiCastOnAStringResultsInTheSameString)
21{
22 std::string str1 {"This is the string to \"convert\""};
23 std::string str2 {DryChem::lexical_cast<std::string>(str1)};
24
25 DryChem::ci_string ci_str1 {"This is the string to \"convert\""};
26 DryChem::ci_string ci_str2 {DryChem::lexical_cast<DryChem::ci_string>(ci_str1)};
27
28 ASSERT_EQ(str1, str2);
29 ASSERT_EQ(ci_str1, ci_str2);
30}
31
32GTEST_TEST(testLexicalCast, anInputStreamThatDoesntFailIsUsedToConvertTheStringToItsProperValue)
33{
35
36 GoodValue val = DryChem::lexical_cast<GoodValue>("14");
37
38 ASSERT_EQ(14, val.getValue());
39}
40
41GTEST_TEST(testLexicalCast, ifInputStreamFailsWithTheBadBitSetAWarningIsPrintedAndValueIsSetToDefault)
42{
44
45 testing::internal::CaptureStderr();
46
47 BadValue val = DryChem::lexical_cast<BadValue>("14");
48
49 std::string output = testing::internal::GetCapturedStderr();
50 ASSERT_EQ(output, "Common-Utilities Warning:\n Error in lexical_cast, default value returned.\n");
51
52 ASSERT_EQ(0, val.getValue());
53}
54
55GTEST_TEST(testLexicalCast, ifInputStreamFailsWithTheFailBitAWarningIsPrintedAndValueIsSetToDefault)
56{
58
59 testing::internal::CaptureStderr();
60
61 FailValue val = DryChem::lexical_cast<FailValue>("14");
62
63 std::string output = testing::internal::GetCapturedStderr();
64 ASSERT_EQ(output, "Common-Utilities Warning:\n Error in lexical_cast, default value returned.\n");
65
66 ASSERT_EQ(0, val.getValue());
67}
68
69GTEST_TEST(testLexicalCast, lexiCastOnLongDoubleIsTheSameAsCallingStdFunction)
70{
71 std::string str {std::to_string(std::numeric_limits<long double>::max())};
72
73 ASSERT_EQ(std::stold(std::to_string(std::numeric_limits<long double>::max())), DryChem::lexical_cast<long double>(str));
74}
75
76GTEST_TEST(testLexicalCast, lexiCastOnDoubleIsTheSameAsCallingStdFunction)
77{
78 std::string str {std::to_string(std::numeric_limits<double>::max())};
79
80 ASSERT_EQ(std::stod(std::to_string(std::numeric_limits<double>::max())), DryChem::lexical_cast<double>(str));
81}
82
83GTEST_TEST(testLexicalCast, lexiCastOnFloatIsTheSameAsCallingStdFunction)
84{
85 std::string str {std::to_string(std::numeric_limits<float>::max())};
86
87 ASSERT_EQ(std::stof(std::to_string(std::numeric_limits<float>::max())), DryChem::lexical_cast<float>(str));
88}
89
90GTEST_TEST(testLexicalCast, lexiCastOnIntIsTheSameAsCallingStdFunction)
91{
92 std::string str {std::to_string(std::numeric_limits<int>::max())};
93
94 ASSERT_EQ(std::stoi(std::to_string(std::numeric_limits<int>::max())), DryChem::lexical_cast<int>(str));
95}
96
97GTEST_TEST(testLexicalCast, lexiCastOnLongIsTheSameAsCallingStdFunction)
98{
99 std::string str {std::to_string(std::numeric_limits<long>::max())};
100
101 ASSERT_EQ(std::stol(std::to_string(std::numeric_limits<long>::max())), DryChem::lexical_cast<long>(str));
102}
103
104GTEST_TEST(testLexicalCast, lexiCastOnUnsignedLongIsTheSameAsCallingStdFunction)
105{
106 std::string str {std::to_string(std::numeric_limits<unsigned long>::max())};
107
108 ASSERT_EQ(
109 std::stoul(std::to_string(std::numeric_limits<unsigned long>::max())), DryChem::lexical_cast<unsigned long>(str));
110}
111
112GTEST_TEST(testLexicalCast, lexiCastOnLongLongIsTheSameAsCallingStdFunction)
113{
114 std::string str {std::to_string(std::numeric_limits<long long>::max())};
115
116 ASSERT_EQ(std::stoll(std::to_string(std::numeric_limits<long long>::max())), DryChem::lexical_cast<long long>(str));
117}
118
119GTEST_TEST(testLexicalCast, lexiCastOnUnsignedLongLongIsTheSameAsCallingStdFunction)
120{
121 std::string str {std::to_string(std::numeric_limits<unsigned long long>::max())};
122
123 ASSERT_EQ(std::stoull(std::to_string(std::numeric_limits<unsigned long long>::max())),
124 DryChem::lexical_cast<unsigned long long>(str));
125}
126
127#endif
Definition stringDetails.hpp:40
Definition stringDetails.hpp:54
Definition stringDetails.hpp:18
GTEST_TEST(testLexicalCast, lexiCastOnAStringResultsInTheSameString)
Definition testLexicalCast.hpp:20