libs
libuavcan
libuavcan
test
marshal
char_array_formatter.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3
*/
4
5
#include <gtest/gtest.h>
6
#include <
uavcan/marshal/char_array_formatter.hpp
>
7
8
using
uavcan::Array
;
9
using
uavcan::ArrayModeDynamic
;
10
using
uavcan::ArrayModeStatic
;
11
using
uavcan::IntegerSpec
;
12
using
uavcan::SignednessSigned
;
13
using
uavcan::SignednessUnsigned
;
14
using
uavcan::CastModeSaturate
;
15
using
uavcan::CastModeTruncate
;
16
using
uavcan::CharArrayFormatter
;
17
18
TEST
(
CharArrayFormatter
, Basic)
19
{
20
typedef
Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>
,
ArrayModeDynamic
, 45> A8;
21
A8 a;
22
23
CharArrayFormatter<A8>
f
(a);
24
ASSERT_STREQ(
""
, f.
getArray
().c_str());
25
26
f.
write
(
"Don't %s."
,
"Panic"
);
27
ASSERT_STREQ(
"Don't Panic."
, f.
getArray
().c_str());
28
29
f.
write
(
" abc%idef "
, 123);
30
ASSERT_STREQ(
"Don't Panic. abc123def "
, f.
getArray
().c_str());
31
32
f.
write
(
"%g"
, 0.0);
33
ASSERT_STREQ(
"Don't Panic. abc123def 0"
, f.
getArray
().c_str());
34
35
a.clear();
36
ASSERT_STREQ(
""
, f.
getArray
().c_str());
37
38
f.
write
(
"123456789"
);
39
ASSERT_STREQ(
"123456789"
, f.
getArray
().c_str());
40
}
41
42
#if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11)
43
# error UAVCAN_CPP_VERSION
44
#endif
45
46
#if UAVCAN_CPP_VERSION >= UAVCAN_CPP11
47
48
TEST
(
CharArrayFormatter
, Hardcore)
49
{
50
typedef
Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>
,
ArrayModeDynamic
, 150> A8;
51
A8 a;
52
53
CharArrayFormatter<A8>
f
(a);
54
55
f.
write
(
56
"%% char='%*' double='%*' long='%*' unsigned long='%*' int='%s' long double='%*' bool='%*' const char='%*' %%"
,
57
'%'
, -12.3456, -123456789123456789L, 987654321, -123456789, 0.000000001L,
true
,
"Don't Panic."
);
58
59
static
const
std::string Reference =
60
"% char='%' double='-12.3456' long='-123456789123456789' unsigned long='987654321' int='-123456789' "
61
"long double='1e-09' bool='1' const char='Don't Pani"
;
// few chars truncated!
62
63
ASSERT_STREQ(Reference.c_str(), f.
getArray
().c_str());
64
65
a.clear();
66
67
f.
write
(
""
);
68
ASSERT_STREQ(
""
, f.
getArray
().c_str());
69
70
f.
write
(
"%%"
);
// Nothing to format --> "%%" is not expanded
71
ASSERT_STREQ(
"%%"
, f.
getArray
().c_str());
72
73
f.
write
(
"%*"
,
"Test"
, 123,
true
);
// Extra args ignored
74
ASSERT_STREQ(
"%%Test"
, f.
getArray
().c_str());
75
76
f.
write
(
"%% %* %* %% %*"
,
true
);
// Insufficient args are OK; second "%%" is not expanded
77
ASSERT_STREQ(
"%%Test% 1 %* %% %*"
, f.
getArray
().c_str());
78
}
79
80
#endif
uavcan::SignednessUnsigned
Definition:
integer_spec.hpp:17
uavcan::CastModeTruncate
Definition:
type_util.hpp:17
TEST
TEST(CharArrayFormatter, Basic)
Definition:
char_array_formatter.cpp:18
f
f
uavcan::ArrayModeDynamic
Definition:
array.hpp:35
uavcan::ArrayModeStatic
Definition:
array.hpp:35
uavcan::IntegerSpec
Definition:
integer_spec.hpp:24
uavcan::CharArrayFormatter::write
void write(const char *text)
Definition:
char_array_formatter.hpp:79
uavcan::CastModeSaturate
Definition:
type_util.hpp:17
char_array_formatter.hpp
uavcan::SignednessSigned
Definition:
integer_spec.hpp:17
uavcan::CharArrayFormatter::getArray
ArrayType & getArray()
Definition:
char_array_formatter.hpp:76
uavcan::Array
Definition:
array.hpp:424
uavcan::CharArrayFormatter
Definition:
char_array_formatter.hpp:25
uavcan_communicator
Author(s):
autogenerated on Wed Jan 11 2023 03:59:39