Summary: Fix hex2String performance issues by removing sscanf dependency. Also fixed some edge case handling (odd length, bad input). Test Plan: Created a test file which called old and new implementation, and validated results are the same. I'll paste results in the phabricator diff. Reviewers: igor, rven, anthony, IslamAbdelRahman, kradhakrishnan, yhchiang, sdong Reviewed By: sdong Subscribers: thatsafunnyname, leveldb, dhruba Differential Revision: https://reviews.facebook.net/D46785main
parent
f03b5c987b
commit
4805fa0eae
@ -0,0 +1,44 @@ |
||||
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
#include "util/ldb_cmd.h" |
||||
#include "util/testharness.h" |
||||
|
||||
class LdbCmdTest : public testing::Test {}; |
||||
|
||||
TEST_F(LdbCmdTest, HexToString) { |
||||
// map input to expected outputs.
|
||||
map<string, vector<int>> inputMap = { |
||||
{"0x7", {7}}, {"0x5050", {80, 80}}, {"0xFF", {-1}}, |
||||
{"0x1234", {18, 52}}, {"0xaa", {-86}}, {"0x123", {18, 3}}, |
||||
}; |
||||
|
||||
for (const auto& inPair : inputMap) { |
||||
auto actual = rocksdb::LDBCommand::HexToString(inPair.first); |
||||
auto expected = inPair.second; |
||||
for (unsigned int i = 0; i < actual.length(); i++) { |
||||
ASSERT_EQ(expected[i], static_cast<int>(actual[i])); |
||||
} |
||||
} |
||||
} |
||||
|
||||
TEST_F(LdbCmdTest, HexToStringBadInputs) { |
||||
const vector<string> badInputs = { |
||||
"0xZZ", "123", "0xx5", "0x11G", "Ox12", "0xT", "0x1Q1", |
||||
}; |
||||
for (const auto badInput : badInputs) { |
||||
try { |
||||
rocksdb::LDBCommand::HexToString(badInput); |
||||
std::cerr << "Should fail on bad hex value: " << badInput << "\n"; |
||||
FAIL(); |
||||
} catch (...) { |
||||
} |
||||
} |
||||
} |
||||
|
||||
int main(int argc, char** argv) { |
||||
::testing::InitGoogleTest(&argc, argv); |
||||
return RUN_ALL_TESTS(); |
||||
} |
Loading…
Reference in new issue