diff --git a/test.cpp b/test.cpp new file mode 100644 index 0000000..c8d5eec --- /dev/null +++ b/test.cpp @@ -0,0 +1,118 @@ +#include +#include +#include +#include "String.h" +#include + + + +TEST(StringTest, defaultConstructible) +{ + EXPECT_EQ(true, std::is_default_constructible::value); +} + +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); +} + +TEST(StringTest, copyConstructible) +{ + EXPECT_EQ(true, std::is_copy_constructible::value); +} + +TEST(StringTest, copyAssignable) +{ + EXPECT_EQ(true, std::is_copy_assignable::value); +} + +TEST(StringTest, moveConstructible) +{ + EXPECT_EQ(true, std::is_move_constructible::value); +} + +TEST(StringTest, moveAssignable) +{ + EXPECT_EQ(true, std::is_move_assignable::value); +} + +TEST(StringTest, addable) +{ + String str1("cica"); + String str2("sajt"); + + EXPECT_STREQ("cicasajt", (str1+str2).c_str()); +} + +TEST(StringTest, plusequalsAddable) +{ + String str1("cica"); + String str2("sajt"); + str1 += str2; + + EXPECT_STREQ("cicasajt", str1.c_str()); +} + +TEST(StringTest, addableChar) +{ + String str("cicá"); + + EXPECT_STREQ("cicák", (str+'k').c_str()); +} + +TEST(StringTest, plusequalsAddableChar) +{ + String str("sajto"); + str+='k'; + + EXPECT_STREQ("sajtok", str.c_str()); +} + +TEST(StringTest, indexOperatorWorks) +{ + String str("cica"); + char i = 'i'; + + EXPECT_EQ(i, str[1]); +} + +TEST(StringTest, resourceSharingWorks) +{ + String str1("sajt"); + String str2 = String("sajt"); + + EXPECT_EQ(str1.c_str(), str2.c_str()); +} + +struct StreamStringTest : public ::testing::Test +{ + std::stringstream _stream; +}; + +TEST_F(StreamStringTest, ostreamOperatorWorks) +{ + String str("cica"); + _stream << str; + + EXPECT_STREQ("cica", _stream.str().c_str()); +} + +TEST_F(StreamStringTest, istreamOperatorWorks) +{ + String str; + _stream << "sajt"; + _stream >> str; + + EXPECT_STREQ("sajt", str.c_str()); +} + + + +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file