hidl_string: empty string opt always applies
Before, it only applied for the default constructor. However, there are
many cases where we can avoid the extra allocation. The most important
is when we allocate a hidl_memory object. Here, the empty string literal
is passed to hidl_string, but we don't actually need an allocation.
Bug: 179720143
Test: N/A
Change-Id: I307305b88e8b8c54cb2e2759b60b7015a3ac82b9
diff --git a/test_main.cpp b/test_main.cpp
index ea4dfd1..5c6c78e 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -175,6 +175,20 @@
EXPECT_FALSE(hs2 <= hs1);
}
+// empty string optimization should apply for any constructor
+TEST_F(LibHidlTest, HidlStringEmptyLiteralAllocation) {
+ using android::hardware::hidl_string;
+
+ hidl_string empty1;
+ hidl_string empty2("");
+ hidl_string empty3("foo", 0);
+ hidl_string empty4((std::string()));
+
+ EXPECT_EQ(empty1.c_str(), empty2.c_str());
+ EXPECT_EQ(empty1.c_str(), empty3.c_str());
+ EXPECT_EQ(empty1.c_str(), empty4.c_str());
+}
+
TEST_F(LibHidlTest, MemoryTest) {
using android::hardware::hidl_memory;