Add unit tests for StringValue and Value.

Add unit test framework to CMakeLists.txt.
Fix a couple of bugs found by unit tests.

Change-Id: I2092a7f0570fae0f19f9e083c4837ccefcc4ca1a
This commit is contained in:
Peter Johnson
2015-07-03 13:29:31 -07:00
parent b66fb68f29
commit 5a0fccc9cf
8 changed files with 479 additions and 28 deletions

View File

@@ -0,0 +1,52 @@
#include "Value.h"
#include "gtest/gtest.h"
namespace ntimpl {
class StringValueTest : public ::testing::Test {
public:
NT_String& ToNT(StringValue& v) { return v; }
};
TEST_F(StringValueTest, ConstructEmpty) {
StringValue v;
ASSERT_EQ(ToNT(v).str, nullptr);
ASSERT_EQ(ToNT(v).len, 0u);
}
TEST_F(StringValueTest, ConstructStringRef) {
StringValue v("hello");
ASSERT_EQ(llvm::StringRef(v), "hello");
ASSERT_EQ(ToNT(v).str, llvm::StringRef("hello"));
ASSERT_EQ(ToNT(v).len, 5u);
}
TEST_F(StringValueTest, ConstructMove) {
StringValue v("hello");
char* orig = ToNT(v).str;
ASSERT_NE(orig, nullptr);
ASSERT_EQ(ToNT(v).len, 5u);
StringValue v2(std::move(v));
ASSERT_EQ(ToNT(v).str, nullptr);
ASSERT_EQ(ToNT(v).len, 0u);
ASSERT_EQ(ToNT(v2).str, orig);
ASSERT_EQ(ToNT(v2).len, 5u);
}
TEST_F(StringValueTest, AssignMove) {
StringValue v("hello");
char* orig = ToNT(v).str;
ASSERT_NE(orig, nullptr);
ASSERT_EQ(ToNT(v).len, 5u);
StringValue v2("goodbye");
ASSERT_NE(ToNT(v2).str, nullptr);
ASSERT_EQ(ToNT(v2).len, 7u);
v2 = std::move(v);
ASSERT_EQ(ToNT(v).str, nullptr);
ASSERT_EQ(ToNT(v).len, 0u);
ASSERT_EQ(ToNT(v2).str, orig);
ASSERT_EQ(ToNT(v2).len, 5u);
}
} // namespace ntimpl