您的位置:首页 > 移动开发

append_zero 浮点和double补充0 库函数PK自己写的函数效率对比

2015-11-25 17:44 393 查看

define USING_LOG_PREFIX RPC_TEST

include

include “rpc/obmysql/ob_mysql_util.h”

using namespace oceanbase::common;

using namespace oceanbase::obmysql;

class TestDoubleZeroFill

: public ::testing::Test

{

public:

TestDoubleZeroFill()

{}

virtual void SetUp()

{

}

virtual void TearDown()

{

}

void zero_fill_libraries(char *buf, int64_t &length, int16_t scale)

{

if (scale > 0) {

int point = 0;

const char *findponit = buf;

const char *pot = strchr(findponit,’.’);

if (pot !=NULL)

{

point = static_cast(pot - findponit);

} else {

point = static_cast(length);

}

if (point == length) {

// *(buf + length) = ‘.’;

memcpy(buf+ length, “.”, 1);

length ++;

}

memset(buf + length, ‘0’, scale + 1 - length + point);

length += scale + 1 - length - point;

*(buf + length) = ‘\0’;

}

}

void ObMySQLUtil::zero_fill(char *buf, int64_t &length, int16_t scale)

{

if (scale > 0) {

int point = 0;

for (;*(buf + point) != ‘.’ && point < length; point ++) { }

if (point == length) {

*(buf + length) = ‘.’;

length ++;

}

for (int64_t i = length-point; (scale - i + 1) >0; i++) {

*(buf + length) = ‘0’;

length ++;

}

*(buf + length) = ‘\0’;

}

}

protected:

};

TEST_F(TestDoubleZeroFill, TestFillZero)

{

const char org = (const char )”623423.234”;

char buf[64];

int64_t char_size = strlen(org);

int16_t scale = 10;

const char *org_1 = (const char *)"3.2";
int64_t char_size_1 = strlen(org_1);
int16_t scale_1 = 2;

int64_t total_my = 0;
int64_t total_lib = 0;

for (int j = 0; j<5; j++)
{
memset(buf, 0, 64);
memcpy(buf, org, char_size);
const int64_t start_ts_my = ObTimeUtility::current_time();
for (int i = 0; i < 100000000; i++)
{
zero_fill(buf, char_size, scale);
}
const int64_t end_ts_my = ObTimeUtility::current_time();

memset(buf, 0, 64);
memcpy(buf, org, char_size);
const int64_t start_ts_lib = ObTimeUtility::current_time();
for (int i = 0; i < 100000000; i++)
{
zero_fill_libraries(buf, char_size, scale);
}
const int64_t end_ts_lib = ObTimeUtility::current_time();

total_my += end_ts_my - start_ts_my;
total_lib += end_ts_lib - start_ts_lib;

memset(buf, 0, 64);
memcpy(buf, org_1, char_size_1);
const int64_t start_ts_my_1 = ObTimeUtility::current_time();
for (int i = 0; i < 100000000; i++)
{
zero_fill(buf, char_size_1, scale_1);
}
const int64_t end_ts_my_1 = ObTimeUtility::current_time();

memset(buf, 0, 64);
memcpy(buf, org_1, char_size_1);
const int64_t  start_ts_lib_1 = ObTimeUtility::current_time();
for (int i = 0; i < 100000000; i++)
{
zero_fill_libraries(buf, char_size_1, scale_1);
}
const int64_t end_ts_lib_1 = ObTimeUtility::current_time();

total_my += end_ts_my_1 - start_ts_my_1;
total_lib += end_ts_lib_1 - start_ts_lib_1;
}

LOG_INFO("cmp, ob vs lib", K(total_my), K(total_lib));


}

int main(int argc, char *argv[])

{

::testing::InitGoogleTest(&argc, argv);

return RUN_ALL_TESTS();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数