Merge pull request #2254 from chaoran:master
PiperOrigin-RevId: 248759825
This commit is contained in:
@@ -1556,6 +1556,65 @@ TEST(PrintOneofTest, Basic) {
|
||||
PrintToString(Type(NonPrintable{})));
|
||||
}
|
||||
#endif // GTEST_HAS_ABSL
|
||||
namespace {
|
||||
class string_ref;
|
||||
|
||||
/**
|
||||
* This is a synthetic pointer to a fixed size string.
|
||||
*/
|
||||
class string_ptr {
|
||||
public:
|
||||
string_ptr(const char* data, size_t size) : data_(data), size_(size) {}
|
||||
|
||||
string_ptr& operator++() noexcept {
|
||||
data_ += size_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
string_ref operator*() const noexcept;
|
||||
|
||||
private:
|
||||
const char* data_;
|
||||
size_t size_;
|
||||
};
|
||||
|
||||
/**
|
||||
* This is a synthetic reference of a fixed size string.
|
||||
*/
|
||||
class string_ref {
|
||||
public:
|
||||
string_ref(const char* data, size_t size) : data_(data), size_(size) {}
|
||||
|
||||
string_ptr operator&() const noexcept { return {data_, size_}; } // NOLINT
|
||||
|
||||
bool operator==(const char* s) const noexcept {
|
||||
if (size_ > 0 && data_[size_ - 1] != 0) {
|
||||
return std::string(data_, size_) == std::string(s);
|
||||
} else {
|
||||
return std::string(data_) == std::string(s);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
const char* data_;
|
||||
size_t size_;
|
||||
};
|
||||
|
||||
string_ref string_ptr::operator*() const noexcept { return {data_, size_}; }
|
||||
|
||||
TEST(string_ref, compare) {
|
||||
const char* s = "alex\0davidjohn\0";
|
||||
string_ptr ptr(s, 5);
|
||||
EXPECT_EQ(*ptr, "alex");
|
||||
EXPECT_TRUE(*ptr == "alex");
|
||||
++ptr;
|
||||
EXPECT_EQ(*ptr, "david");
|
||||
EXPECT_TRUE(*ptr == "david");
|
||||
++ptr;
|
||||
EXPECT_EQ(*ptr, "john");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
} // namespace gtest_printers_test
|
||||
} // namespace testing
|
||||
|
||||
Reference in New Issue
Block a user