diff --git a/test.cpp b/test.cpp index c8d5eec..09f53c8 100644 --- a/test.cpp +++ b/test.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "String.h" #include @@ -8,7 +9,7 @@ TEST(StringTest, defaultConstructible) { - EXPECT_EQ(true, std::is_default_constructible::value); + EXPECT_TRUE(std::is_default_constructible::value); } TEST(StringTest, constcharConstructible) @@ -16,27 +17,41 @@ TEST(StringTest, constcharConstructible) // is_constructible with multiple template params cannot be passed to macro, // TODO: should open an issue at GTest's GitHub auto value = std::is_constructible::value; - EXPECT_EQ(true, value); + EXPECT_TRUE(value); } TEST(StringTest, copyConstructible) { - EXPECT_EQ(true, std::is_copy_constructible::value); + EXPECT_TRUE(std::is_copy_constructible::value); } TEST(StringTest, copyAssignable) { - EXPECT_EQ(true, std::is_copy_assignable::value); + EXPECT_TRUE(std::is_copy_assignable::value); } TEST(StringTest, moveConstructible) { - EXPECT_EQ(true, std::is_move_constructible::value); + EXPECT_TRUE(std::is_move_constructible::value); } TEST(StringTest, moveAssignable) { - EXPECT_EQ(true, std::is_move_assignable::value); + EXPECT_TRUE(std::is_move_assignable::value); +} + +TEST(StringTest, cStrMethodWorks) +{ + String str("sajtos cica"); + + EXPECT_STREQ("sajtos cica", str.c_str()); +} + +TEST(StringTest, uninitializedStringcStrThrows) +{ + String str; + + EXPECT_THROW(str.c_str(), std::runtime_error); } TEST(StringTest, addable) @@ -71,6 +86,22 @@ TEST(StringTest, plusequalsAddableChar) EXPECT_STREQ("sajtok", str.c_str()); } +TEST(StringTest, comparable) +{ + String str1("cica"); + String str2("cica"); + + EXPECT_EQ(str1, str2); +} + +TEST(StringTest, uninitializedStringCompareThrows) +{ + String str1; + String str2; + + EXPECT_THROW(str1 == str2, std::runtime_error); +} + TEST(StringTest, indexOperatorWorks) { String str("cica"); @@ -79,6 +110,29 @@ TEST(StringTest, indexOperatorWorks) EXPECT_EQ(i, str[1]); } +TEST(StringTest, indexoperatorBoundCheckWorks) +{ + String str("sajt"); + + EXPECT_THROW(str[4], std::out_of_range); +} + +TEST(StringTest, uninitializedStringIndexingThrows) +{ + String str; + + EXPECT_THROW(str[0], std::runtime_error); +} + +TEST(StringTest, copyOnWriteWorks) +{ + String str1("cica"); + String str2 = str1; + str2[0] = ' '; + + EXPECT_STRNE(str1.c_str(), str2.c_str()); +} + TEST(StringTest, resourceSharingWorks) { String str1("sajt");