90 lines
2.4 KiB
C++

/* Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/* See http://code.google.com/p/googletest/wiki/Primer */
// First include (the generated) my_config.h, to get correct platform defines.
#include "my_config.h"
#include <gtest/gtest.h>
#include "univ.i"
#include "ha_prototypes.h"
namespace innodb_printf_unittest {
static
void
test_snprintf(const char* res, char* buf, size_t bufsz, const char* fmt, ...)
{
va_list args;
size_t len;
EXPECT_STREQ(buf, res);
va_start(args,fmt);
len= my_vsnprintf(buf, bufsz-1, fmt, args);
va_end(args);
EXPECT_EQ(len, strlen(res));
EXPECT_STREQ(buf, res);
}
TEST(hainnodb, UtMySnprintf)
{
char buf[72];
size_t bufsz;
bufsz = sizeof buf;
#define ARGS buf, bufsz, "foo %u " IB_ID_FMT ".", 1, (trx_id_t) -1
ut_snprintf(ARGS);
test_snprintf("foo 1 18446744073709551615.", ARGS);
bufsz = 25;
ut_snprintf(ARGS); EXPECT_STREQ(buf, "foo 1 184467440737095516");
my_snprintf(ARGS); EXPECT_STREQ(buf, "foo 1 .");
bufsz = sizeof buf;
#undef ARGS
ib_uint32_t a;
ib_uint64_t b;
int64_t c;
#define ARGS buf, bufsz, UINT32PF "/" UINT64PF "/%" PRId64 "/" UINT64PFx "*", \
a, b, c, b
a = 0, b = 1, c = 2;
ut_snprintf(ARGS);
test_snprintf(
"0/1/2/0000000000000001*", ARGS);
a = -1, b = -2, c = -3;
ut_snprintf(ARGS);
test_snprintf(
"4294967295/18446744073709551614/-3/fffffffffffffffe*", ARGS);
a = 1234567890, b = 12345678901234567890ULL, c = static_cast<int64_t>(b);
ut_snprintf(ARGS);
test_snprintf(
"1234567890/12345678901234567890/-6101065172474983726/"
"ab54a98ceb1f0ad2*", ARGS);
a = -1234567890, c = -8765432109876543210LL, b = ib_uint64_t (c);
ut_snprintf(ARGS);
test_snprintf(
"3060399406/9681311963833008406/-8765432109876543210/"
"865aedeff4018116*", ARGS);
#undef ARGS
}
}