Mcucpp

Форк
0
/
FormatWriter.cpp 
217 строк · 4.5 Кб
1
#include <iostream>
2
#include <string>
3
#include <tiny_ostream.h>
4
#include <tiny_iomanip.h>
5
#include <format_parser.h>
6
#include <limits>
7
#include <gtest/gtest.h>
8

9
class MyWriter
10
{
11
	enum{BufSize = 10000};
12
public:
13
	MyWriter()
14
	{
15
		seekp(0);
16
	}
17

18
	void seekp(int pos)
19
	{
20
		this->pos = pos;
21
		_buffer[0] = '\0';
22
	}
23

24
	void put(char c)
25
	{
26
		_buffer[pos++] = c;
27
	}
28
	char *c_str()
29
	{
30
		_buffer[pos]='\0';
31
		return  &_buffer[0];
32
	}
33
private:
34
	int pos;
35
	char _buffer[BufSize];
36
};
37

38
using namespace Mcucpp;
39

40
typedef basic_ostream<MyWriter > my_ostream;
41

42
TEST(Format, Stream)
43
{
44
	my_ostream my_cout;
45
	my_cout << "Hello, world!";
46
	EXPECT_STREQ(my_cout.c_str(), "Hello, world!");
47
	my_cout.seekp(0);
48

49
	my_cout << (uint8_t)123;
50
	EXPECT_STREQ(my_cout.c_str(), "123");
51
	my_cout.seekp(0);
52

53
	my_cout << (uint16_t)1234;
54
	EXPECT_STREQ(my_cout.c_str(), "1234");
55
	my_cout.seekp(0);
56

57
	my_cout << (uint32_t)12345678;
58
	EXPECT_STREQ(my_cout.c_str(), "12345678");
59
	my_cout.seekp(0);
60

61
	my_cout << (int16_t)-1234;
62
	EXPECT_STREQ(my_cout.c_str(), "-1234");
63
	my_cout.seekp(0);
64

65
	my_cout << (int32_t)-12345678;
66
	EXPECT_STREQ(my_cout.c_str(), "-12345678");
67
	my_cout.seekp(0);
68

69
	my_cout << hex << 0x12345678;
70
	EXPECT_STREQ(my_cout.c_str(), "12345678");
71
	my_cout.seekp(0);
72

73
	my_cout << hex << showbase << 0x12345678;
74
	EXPECT_STREQ(my_cout.c_str(), "0x12345678");
75
	my_cout.seekp(0);
76

77
	my_cout << setw(16) << hex << showbase;
78
	my_cout << left << 0x12345678;
79
	EXPECT_STREQ(my_cout.c_str(), "0x12345678      ");
80
	my_cout.seekp(0);
81

82
	my_cout << setw(16) << right << 0x12345678;
83
	EXPECT_STREQ(my_cout.c_str(), "      0x12345678");
84
	my_cout.seekp(0);
85

86
	my_cout.fill('0');
87
	my_cout << setw(16) << internal << 0x12345678;
88
	EXPECT_STREQ(my_cout.c_str(), "0x00000012345678");
89
	my_cout.seekp(0);
90

91
	my_cout << setw(0);
92
	my_cout << true;
93
	EXPECT_STREQ(my_cout.c_str(), "1");
94
	my_cout.seekp(0);
95

96
	my_cout << false;
97
	EXPECT_STREQ(my_cout.c_str(), "0");
98
	my_cout.seekp(0);
99

100
	my_cout << boolalpha;
101
	my_cout << true;
102
	EXPECT_STREQ(my_cout.c_str(), "true");
103
	my_cout.seekp(0);
104

105
	my_cout << false;
106
	EXPECT_STREQ(my_cout.c_str(), "false");
107
	my_cout.seekp(0);
108
}
109

110
TEST(Format, String)
111
{
112
	my_ostream my_cout;
113

114
	my_cout % Format("Hello, %!") % "world";
115
	EXPECT_STREQ(my_cout.c_str(), "Hello, world!");
116
	my_cout.seekp(0);
117

118
	my_cout % Format("Foo = %") % 1000;
119
	EXPECT_STREQ(my_cout.c_str(), "Foo = 1000");
120
	my_cout.seekp(0);
121

122
	my_cout % Format("Foo = %|#0x10|%%") % 0x1234;
123
	EXPECT_STREQ(my_cout.c_str(), "Foo = 0x00001234%");
124
	my_cout.seekp(0);
125
}
126

127

128
TEST(Format, FloatDefault)
129
{
130
	my_ostream my_cout;
131

132
	my_cout.precision(5);
133
	my_cout << 0.0f;
134
	EXPECT_STREQ("0", my_cout.c_str());
135
	my_cout.seekp(0);
136

137
	my_cout << 123.f;
138
	EXPECT_STREQ("123", my_cout.c_str());
139
	my_cout.seekp(0);
140

141
	my_cout << 12.34f;
142
	EXPECT_STREQ("12.34", my_cout.c_str());
143
	my_cout.seekp(0);
144

145
	my_cout << 12345.67f;
146
	EXPECT_STREQ("12346", my_cout.c_str());
147
	my_cout.seekp(0);
148

149
	my_cout << 1234567890.123f;
150
	EXPECT_STREQ("1.2346e+9", my_cout.c_str());
151
	my_cout.seekp(0);
152

153
	my_cout << 1.234567890e-5f;
154
	EXPECT_STREQ("1.2346e-5", my_cout.c_str());
155
	my_cout.seekp(0);
156

157
	my_cout << -12.34f;
158
	EXPECT_STREQ("-12.34", my_cout.c_str());
159
	my_cout.seekp(0);
160

161
	my_cout << -12345.67f;
162
	EXPECT_STREQ("-12346", my_cout.c_str());
163
	my_cout.seekp(0);
164

165
	my_cout << -1234567890.123f;
166
	EXPECT_STREQ("-1.2346e+9", my_cout.c_str());
167
	my_cout.seekp(0);
168

169
	my_cout << -1.234567890e-5f;
170
	EXPECT_STREQ("-1.2346e-5", my_cout.c_str());
171
	my_cout.seekp(0);
172
}
173

174
TEST(Format, FloatRound)
175
{
176
	my_ostream my_cout;
177

178
	my_cout.precision(5);
179
	my_cout << 99999.99f;
180
	EXPECT_STREQ("1e+5", my_cout.c_str());
181
	my_cout.seekp(0);
182

183
	my_cout << 99999.0f;
184
	EXPECT_STREQ("99999", my_cout.c_str());
185
	my_cout.seekp(0);
186

187
	my_cout << 9999.99f;
188
	EXPECT_STREQ("10000", my_cout.c_str());
189
	my_cout.seekp(0);
190

191
	my_cout << 9999.001f;
192
	EXPECT_STREQ("9999", my_cout.c_str());
193
	my_cout.seekp(0);
194
}
195

196

197
TEST(Format, FloatNanAndInf)
198
{
199
	my_ostream my_cout;
200

201
	my_cout.precision(5);
202
	my_cout << std::numeric_limits<float>::infinity();
203
	EXPECT_STREQ("inf", my_cout.c_str());
204
	my_cout.seekp(0);
205

206
	my_cout << -std::numeric_limits<float>::infinity();
207
	EXPECT_STREQ("-inf", my_cout.c_str());
208
	my_cout.seekp(0);
209

210
	my_cout << std::numeric_limits<float>::quiet_NaN();
211
	EXPECT_STREQ("nan", my_cout.c_str());
212
	my_cout.seekp(0);
213

214
	my_cout << std::numeric_limits<float>::signaling_NaN();
215
	EXPECT_STREQ("nan", my_cout.c_str());
216
	my_cout.seekp(0);
217
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.