3
#include <tiny_ostream.h>
4
#include <tiny_iomanip.h>
5
#include <format_parser.h>
7
#include <gtest/gtest.h>
11
enum{BufSize = 10000};
35
char _buffer[BufSize];
38
using namespace Mcucpp;
40
typedef basic_ostream<MyWriter > my_ostream;
45
my_cout << "Hello, world!";
46
EXPECT_STREQ(my_cout.c_str(), "Hello, world!");
49
my_cout << (uint8_t)123;
50
EXPECT_STREQ(my_cout.c_str(), "123");
53
my_cout << (uint16_t)1234;
54
EXPECT_STREQ(my_cout.c_str(), "1234");
57
my_cout << (uint32_t)12345678;
58
EXPECT_STREQ(my_cout.c_str(), "12345678");
61
my_cout << (int16_t)-1234;
62
EXPECT_STREQ(my_cout.c_str(), "-1234");
65
my_cout << (int32_t)-12345678;
66
EXPECT_STREQ(my_cout.c_str(), "-12345678");
69
my_cout << hex << 0x12345678;
70
EXPECT_STREQ(my_cout.c_str(), "12345678");
73
my_cout << hex << showbase << 0x12345678;
74
EXPECT_STREQ(my_cout.c_str(), "0x12345678");
77
my_cout << setw(16) << hex << showbase;
78
my_cout << left << 0x12345678;
79
EXPECT_STREQ(my_cout.c_str(), "0x12345678 ");
82
my_cout << setw(16) << right << 0x12345678;
83
EXPECT_STREQ(my_cout.c_str(), " 0x12345678");
87
my_cout << setw(16) << internal << 0x12345678;
88
EXPECT_STREQ(my_cout.c_str(), "0x00000012345678");
93
EXPECT_STREQ(my_cout.c_str(), "1");
97
EXPECT_STREQ(my_cout.c_str(), "0");
100
my_cout << boolalpha;
102
EXPECT_STREQ(my_cout.c_str(), "true");
106
EXPECT_STREQ(my_cout.c_str(), "false");
114
my_cout % Format("Hello, %!") % "world";
115
EXPECT_STREQ(my_cout.c_str(), "Hello, world!");
118
my_cout % Format("Foo = %") % 1000;
119
EXPECT_STREQ(my_cout.c_str(), "Foo = 1000");
122
my_cout % Format("Foo = %|#0x10|%%") % 0x1234;
123
EXPECT_STREQ(my_cout.c_str(), "Foo = 0x00001234%");
128
TEST(Format, FloatDefault)
132
my_cout.precision(5);
134
EXPECT_STREQ("0", my_cout.c_str());
138
EXPECT_STREQ("123", my_cout.c_str());
142
EXPECT_STREQ("12.34", my_cout.c_str());
145
my_cout << 12345.67f;
146
EXPECT_STREQ("12346", my_cout.c_str());
149
my_cout << 1234567890.123f;
150
EXPECT_STREQ("1.2346e+9", my_cout.c_str());
153
my_cout << 1.234567890e-5f;
154
EXPECT_STREQ("1.2346e-5", my_cout.c_str());
158
EXPECT_STREQ("-12.34", my_cout.c_str());
161
my_cout << -12345.67f;
162
EXPECT_STREQ("-12346", my_cout.c_str());
165
my_cout << -1234567890.123f;
166
EXPECT_STREQ("-1.2346e+9", my_cout.c_str());
169
my_cout << -1.234567890e-5f;
170
EXPECT_STREQ("-1.2346e-5", my_cout.c_str());
174
TEST(Format, FloatRound)
178
my_cout.precision(5);
179
my_cout << 99999.99f;
180
EXPECT_STREQ("1e+5", my_cout.c_str());
184
EXPECT_STREQ("99999", my_cout.c_str());
188
EXPECT_STREQ("10000", my_cout.c_str());
191
my_cout << 9999.001f;
192
EXPECT_STREQ("9999", my_cout.c_str());
197
TEST(Format, FloatNanAndInf)
201
my_cout.precision(5);
202
my_cout << std::numeric_limits<float>::infinity();
203
EXPECT_STREQ("inf", my_cout.c_str());
206
my_cout << -std::numeric_limits<float>::infinity();
207
EXPECT_STREQ("-inf", my_cout.c_str());
210
my_cout << std::numeric_limits<float>::quiet_NaN();
211
EXPECT_STREQ("nan", my_cout.c_str());
214
my_cout << std::numeric_limits<float>::signaling_NaN();
215
EXPECT_STREQ("nan", my_cout.c_str());