You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
3.7 KiB

// Copyright 2020 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#include "pw_kvs/key.h"
#include <string_view>
#include "gtest/gtest.h"
namespace pw::kvs {
namespace {
constexpr const char kTestString[] = "test_string";
constexpr std::string_view kTestStringView{kTestString};
// kTestString2 starts with same string as kTestString.
constexpr const char kTestString2[] = "test_string2";
} // namespace
TEST(Key, ConstructorEmpty) {
Key key;
EXPECT_EQ(key.size(), 0u);
EXPECT_TRUE(key.empty());
EXPECT_EQ(key.data(), nullptr);
EXPECT_EQ(key.begin(), nullptr);
EXPECT_EQ(key.end(), nullptr);
}
TEST(Key, ConstructorString) {
std::string str{kTestStringView};
Key key{str};
EXPECT_EQ(key.size(), kTestStringView.size());
EXPECT_FALSE(key.empty());
EXPECT_EQ(key.data(), str.data());
EXPECT_EQ(key.front(), kTestStringView.front());
EXPECT_EQ(key.back(), kTestStringView.back());
}
TEST(Key, ConstructorStringView) {
Key key{kTestStringView};
EXPECT_EQ(key.size(), kTestStringView.size());
EXPECT_FALSE(key.empty());
EXPECT_EQ(key.data(), kTestStringView.data());
EXPECT_EQ(key.front(), kTestStringView.front());
EXPECT_EQ(key.back(), kTestStringView.back());
}
TEST(Key, ConstructorNullTermString) {
Key key{kTestString};
EXPECT_EQ(key.size(), kTestStringView.size());
EXPECT_FALSE(key.empty());
EXPECT_EQ(key.data(), kTestString);
EXPECT_EQ(key.front(), kTestStringView.front());
EXPECT_EQ(key.back(), kTestStringView.back());
}
TEST(Key, ConstructorCharPtrLength) {
Key key{kTestString, kTestStringView.size() + 1}; // include null terminator
EXPECT_EQ(key.size(), kTestStringView.size() + 1);
EXPECT_FALSE(key.empty());
EXPECT_EQ(key.data(), kTestStringView.data());
EXPECT_EQ(key.front(), kTestStringView.front());
EXPECT_EQ(key.back(), '\0');
}
TEST(Key, ConstructorCopy) {
Key key1{kTestString};
Key key{key1};
EXPECT_EQ(key.size(), kTestStringView.size());
EXPECT_FALSE(key.empty());
EXPECT_EQ(key.data(), kTestStringView.data());
EXPECT_EQ(key.front(), kTestStringView.front());
EXPECT_EQ(key.back(), kTestStringView.back());
}
TEST(Key, Access) {
Key key{kTestStringView};
for (size_t i = 0; i < key.size(); i++) {
EXPECT_EQ(key[i], kTestStringView[i]);
EXPECT_EQ(key.at(i), kTestStringView.at(i));
}
}
TEST(Key, Iterator) {
size_t i = 0;
for (auto c : Key{kTestString}) {
EXPECT_EQ(c, kTestString[i++]);
}
}
TEST(Key, Same) {
// Since start of two test strings are the same, verify those are equal.
EXPECT_TRUE((Key{kTestString} == Key{kTestString2, kTestStringView.size()}));
EXPECT_FALSE((Key{kTestString} != Key{kTestString2, kTestStringView.size()}));
}
TEST(Key, Different) {
EXPECT_FALSE(Key{kTestString} == Key{kTestString2});
EXPECT_TRUE(Key{kTestString} != Key{kTestString2});
}
TEST(Key, DifferentWithSameLength) {
// Start second test string offset by one.
EXPECT_FALSE(
(Key{kTestString} == Key{kTestString2 + 1, kTestStringView.size()}));
EXPECT_TRUE(
(Key{kTestString} != Key{kTestString2 + 1, kTestStringView.size()}));
}
TEST(Key, ConvertToStringView) {
std::string_view view = Key{kTestString};
EXPECT_TRUE(view == kTestStringView);
}
} // namespace pw::kvs