Skip to content

Commit

Permalink
fix:partial strings test fixed (OpenAtomFoundation#2624)
Browse files Browse the repository at this point in the history
* fix: partial strings test fixed

* fix bug of BitOpNot
  • Loading branch information
euvre authored and chenbt-hz committed Jun 3, 2024
1 parent 15a00d5 commit 35e7f00
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 46 deletions.
1 change: 1 addition & 0 deletions src/storage/src/storage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ Status Storage::BitCount(const Slice& key, int64_t start_offset, int64_t end_off
Status Storage::BitOp(BitOpType op, const std::string& dest_key, const std::vector<std::string>& src_keys,
std::string &value_to_dest, int64_t* ret) {
assert(is_classic_mode_);
if (op == storage::BitOpType::kBitOpNot && src_keys.size() >= 2) { return Status::InvalidArgument(); }
Status s;
int64_t max_len = 0;
int64_t value_len = 0;
Expand Down
93 changes: 47 additions & 46 deletions src/storage/tests/strings_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -147,56 +147,57 @@ TEST_F(StringsTest, BitCountTest) {
ASSERT_EQ(ret, 6);
}

// TODO(@tangruilin): 修复测试代码
// BitOp
// TEST_F(StringsTest, BitOpTest) {
// int64_t ret;
// std::string value;
// s = db.Set("BITOP_KEY1", "FOOBAR");
// ASSERT_TRUE(s.ok());
// s = db.Set("BITOP_KEY2", "ABCDEF");
// ASSERT_TRUE(s.ok());
// s = db.Set("BITOP_KEY3", "STORAGE");
// ASSERT_TRUE(s.ok());
// std::vector<std::string> src_keys {"BITOP_KEY1", "BITOP_KEY2", "BITOP_KEY3"};
TEST_F(StringsTest, BitOpTest) {
int64_t ret;
std::string value;
s = db.Set("BITOP_KEY1", "FOOBAR");
ASSERT_TRUE(s.ok());
s = db.Set("BITOP_KEY2", "ABCDEF");
ASSERT_TRUE(s.ok());
s = db.Set("BITOP_KEY3", "STORAGE");
ASSERT_TRUE(s.ok());
std::vector<std::string> src_keys {"BITOP_KEY1", "BITOP_KEY2", "BITOP_KEY3"};

// // AND
// s = db.BitOp(storage::BitOpType::kBitOpAnd,
// "BITOP_DESTKEY", src_keys, &ret);
// ASSERT_TRUE(s.ok());
// ASSERT_EQ(ret, 10);
// s = db.Get("BITOP_DESTKEY", &value);
// ASSERT_STREQ(value.c_str(), "@@A@AB\x00\x00\x00\x00");
std::string value_to_dest{};

// // OR
// s = db.BitOp(storage::BitOpType::kBitOpOr,
// "BITOP_DESTKEY", src_keys, &ret);
// ASSERT_TRUE(s.ok());
// ASSERT_EQ(ret, 10);
// s = db.Get("BITOP_DESTKEY", &value);
// ASSERT_STREQ(value.c_str(), "GOOGOWIDOW");
// AND
s = db.BitOp(storage::BitOpType::kBitOpAnd,
"BITOP_DESTKEY", src_keys, std::ref(value_to_dest), &ret);
ASSERT_TRUE(s.ok());
ASSERT_EQ(ret, 7);
s = db.Get("BITOP_DESTKEY", &value);
ASSERT_STREQ(value.c_str(), "@@C@AB\x00");

// // XOR
// s = db.BitOp(storage::BitOpType::kBitOpXor,
// "BITOP_DESTKEY", src_keys, &ret);
// ASSERT_TRUE(s.ok());
// ASSERT_EQ(ret, 10);
// s = db.Get("BITOP_DESTKEY", &value);
// ASSERT_STREQ(value.c_str(), "EAMEOCIDOW");

// // NOT
// std::vector<std::string> not_keys {"BITOP_KEY1"};
// s = db.BitOp(storage::BitOpType::kBitOpNot,
// "BITOP_DESTKEY", not_keys, &ret);
// ASSERT_TRUE(s.ok());
// ASSERT_EQ(ret, 6);
// s = db.Get("BITOP_DESTKEY", &value);
// ASSERT_STREQ(value.c_str(), "\xb9\xb0\xb0\xbd\xbe\xad");
// // NOT operation more than two parameters
// s = db.BitOp(storage::BitOpType::kBitOpNot,
// "BITOP_DESTKEY", src_keys, &ret);
// ASSERT_TRUE(s.IsInvalidArgument());
// }
// OR
s = db.BitOp(storage::BitOpType::kBitOpOr,
"BITOP_DESTKEY", src_keys, std::ref(value_to_dest), &ret);
ASSERT_TRUE(s.ok());
ASSERT_EQ(ret, 7);
s = db.Get("BITOP_DESTKEY", &value);
ASSERT_STREQ(value.c_str(), "W_OVEWE");

// XOR
s = db.BitOp(storage::BitOpType::kBitOpXor,
"BITOP_DESTKEY", src_keys, std::ref(value_to_dest), &ret);
ASSERT_TRUE(s.ok());
ASSERT_EQ(ret, 7);
s = db.Get("BITOP_DESTKEY", &value);
ASSERT_STREQ(value.c_str(), "TYCTESE");

// NOT
std::vector<std::string> not_keys {"BITOP_KEY1"};
s = db.BitOp(storage::BitOpType::kBitOpNot,
"BITOP_DESTKEY", not_keys, std::ref(value_to_dest), &ret);
ASSERT_TRUE(s.ok());
ASSERT_EQ(ret, 6);
s = db.Get("BITOP_DESTKEY", &value);
ASSERT_STREQ(value.c_str(), "\xb9\xb0\xb0\xbd\xbe\xad");
// NOT operation more than two parameters
s = db.BitOp(storage::BitOpType::kBitOpNot,
"BITOP_DESTKEY", src_keys, std::ref(value_to_dest), &ret);
ASSERT_TRUE(s.IsInvalidArgument());
}

// Decrby
TEST_F(StringsTest, DecrbyTest) {
Expand Down

0 comments on commit 35e7f00

Please sign in to comment.