libuav original
Dependents: UAVCAN UAVCAN_Subscriber
char_array_formatter.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <gtest/gtest.h> 00006 #include <uavcan/marshal/char_array_formatter.hpp> 00007 00008 using uavcan::Array; 00009 using uavcan::ArrayModeDynamic; 00010 using uavcan::ArrayModeStatic; 00011 using uavcan::IntegerSpec; 00012 using uavcan::SignednessSigned; 00013 using uavcan::SignednessUnsigned; 00014 using uavcan::CastModeSaturate; 00015 using uavcan::CastModeTruncate; 00016 using uavcan::CharArrayFormatter; 00017 00018 TEST(CharArrayFormatter, Basic) 00019 { 00020 typedef Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 45> A8; 00021 A8 a; 00022 00023 CharArrayFormatter<A8> f(a); 00024 ASSERT_STREQ("", f.getArray().c_str()); 00025 00026 f.write("Don't %s.", "Panic"); 00027 ASSERT_STREQ("Don't Panic.", f.getArray().c_str()); 00028 00029 f.write(" abc%idef ", 123); 00030 ASSERT_STREQ("Don't Panic. abc123def ", f.getArray().c_str()); 00031 00032 f.write("%g", 0.0); 00033 ASSERT_STREQ("Don't Panic. abc123def 0", f.getArray().c_str()); 00034 00035 a.clear(); 00036 ASSERT_STREQ("", f.getArray().c_str()); 00037 00038 f.write("123456789"); 00039 ASSERT_STREQ("123456789", f.getArray().c_str()); 00040 } 00041 00042 #if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11) 00043 # error UAVCAN_CPP_VERSION 00044 #endif 00045 00046 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11 00047 00048 TEST(CharArrayFormatter, Hardcore) 00049 { 00050 typedef Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 150> A8; 00051 A8 a; 00052 00053 CharArrayFormatter<A8> f(a); 00054 00055 f.write( 00056 "%% char='%*' double='%*' long='%*' unsigned long='%*' int='%s' long double='%*' bool='%*' const char='%*' %%", 00057 '%', -12.3456, -123456789123456789L, 987654321, -123456789, 0.000000001L, true, "Don't Panic."); 00058 00059 static const std::string Reference = 00060 "% char='%' double='-12.3456' long='-123456789123456789' unsigned long='987654321' int='-123456789' " 00061 "long double='1e-09' bool='1' const char='Don't Pani"; // few chars truncated! 00062 00063 ASSERT_STREQ(Reference.c_str(), f.getArray().c_str()); 00064 00065 a.clear(); 00066 00067 f.write(""); 00068 ASSERT_STREQ("", f.getArray().c_str()); 00069 00070 f.write("%%"); // Nothing to format --> "%%" is not expanded 00071 ASSERT_STREQ("%%", f.getArray().c_str()); 00072 00073 f.write("%*", "Test", 123, true); // Extra args ignored 00074 ASSERT_STREQ("%%Test", f.getArray().c_str()); 00075 00076 f.write("%% %* %* %% %*", true); // Insufficient args are OK; second "%%" is not expanded 00077 ASSERT_STREQ("%%Test% 1 %* %% %*", f.getArray().c_str()); 00078 } 00079 00080 #endif
Generated on Tue Jul 12 2022 17:17:30 by 1.7.2