2026-27-cpp-homework/feladat5/UnitTest1/UnitTest1.cpp

405 lines
7.2 KiB
C++
Raw Normal View History

2026-11-03 18:48:31 +01:00
// Tóth Dániel Mátyás | IFPQYY | v1
#include "pch.h"
#include "CppUnitTest.h"
2026-11-06 11:36:52 +01:00
#include <CMyString.h>
#include <CMyStringException.h>
2026-11-03 18:48:31 +01:00
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
2026-11-06 11:36:52 +01:00
TEST_METHOD(EmptyTests)
2026-11-03 18:48:31 +01:00
{
2026-11-06 11:36:52 +01:00
CMyString empty = CMyString();
Assert::AreEqual(0, (int)empty.size());
Assert::AreEqual(1, (int)empty.capacity());
Assert::IsTrue(empty.empty());
}
TEST_METHOD(c_strTests)
{
try
{
char* tmp = "txt";
CMyString str = CMyString((const char*)tmp);
Assert::IsFalse(tmp == str.c_str()); //memory addr
Assert::AreEqual(tmp, str.c_str()); //value
}
catch (...)
{
Assert::IsTrue(false);
}
}
TEST_METHOD(StringConstructionTests)
{
//char* constructor
char* pszargs[] = {
{nullptr},
{""},
{"test"},
{"long text aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
};
int pszres[] = {
0,
0,
4,
48,
};
int testcount = sizeof(pszres) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
CMyString pszctor = CMyString(pszargs[i]);
Assert::AreEqual(pszres[i], (int)pszctor.size());
Assert::AreEqual((pszres[i]) + 1, (int)pszctor.capacity());
if (pszargs[i] != nullptr)
{
Assert::AreEqual(pszargs[i], pszctor.c_str());
}
}
catch (...)
{
Assert::IsTrue(false);
}
}
//repeat constructor
char repeatchargs[] = {
'\0',
'\0',
'a',
'a',
};
int repeatcntargs[] = {
0,
5,
0,
5,
};
int repeatres[] = {
0,
0,
0,
5,
};
char* repeattextres[] = {
nullptr,
nullptr,
nullptr,
"aaaaa",
};
testcount = sizeof(repeatres) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
CMyString repeatctor = CMyString(repeatchargs[i], repeatcntargs[i]);
Assert::AreEqual(repeatres[i], (int)repeatctor.size());
Assert::AreEqual((repeatres[i]) + 1, (int)repeatctor.capacity());
if (repeattextres[i] != nullptr)
{
Assert::AreEqual(repeattextres[i], repeatctor.c_str());
}
}
catch (...)
{
Assert::IsTrue(false);
}
}
//copy constructor
CMyString strargs[] = {
CMyString(),
CMyString("test"),
CMyString('a', 10),
CMyString("really long text thats to be cleared"),
};
strargs[3].clear();
int strres[] = {
0,
4,
10,
0,
};
int allocLengths[] = {
1,
5,
11,
1,
};
char* cpytextres[] = {
"",
"test",
"aaaaaaaaaa",
"",
};
testcount = sizeof(strres) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
CMyString cpy = CMyString(strargs[i]);
CMyString strctor = CMyString(cpy);
Assert::AreEqual(strres[i], (int)strctor.size());
Assert::AreEqual((allocLengths[i]), (int)strctor.capacity());
Assert::AreEqual(cpytextres[i], strctor.c_str());
}
catch (...)
{
Assert::IsTrue(false);
}
}
}
TEST_METHOD(ClearTests) {
CMyString str[]{
CMyString(),
CMyString("test"),
CMyString('a', 10),
CMyString(CMyString("to be copied then cleared")),
};
int allocLengths[] = {
1,
5,
11,
26,
};
int testcount = sizeof(allocLengths) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
str[i].clear();
Assert::IsTrue(str[i].empty());
Assert::AreEqual(allocLengths[i], (int)str[i].capacity());
}
catch (...)
{
Assert::IsTrue(false);
}
}
}
2026-11-06 21:57:42 +01:00
TEST_METHOD(EqualOperatorTests) {
CMyString preps[]{
CMyString(),
CMyString("testtesttest"),
};
CMyString strs[]{
CMyString("test"),
CMyString("test"),
};
int expected[][2] = {
{ 4, 10 },
{ 4, 13 },
};
int testcount = sizeof(expected) / (sizeof(int) * 2);
for (size_t i = 0; i < testcount; i++)
{
try
{
CMyString res = preps[i];
res = strs[i];
Assert::AreEqual(expected[i][0], (int)res.size());
Assert::AreEqual(expected[i][1], (int)res.capacity());
Assert::AreEqual(strs[i].c_str(), res.c_str());
}
catch (...)
{
Assert::IsTrue(false);
}
}
CMyString str1 = CMyString("test");
CMyString str2 = str1;
}
2026-11-06 11:36:52 +01:00
TEST_METHOD(GetAtTests) {
CMyString str[]{
CMyString(),
CMyString(),
CMyString("test"),
CMyString("test"),
CMyString("test"),
CMyString('a', 10),
CMyString(CMyString("to be copied then cleared")),
};
int pos[] = {
1,
0,
4,
-1,
1,
9,
12,
};
char character[] = {
'\0',
'\0',
'\0',
'\0', //first four are invalid
'e',
'a',
' ',
};
int testcount = sizeof(pos) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
Assert::AreEqual(character[i], str[i].getat(pos[i]));
}
catch(const CMyStringException& e)
{
if (i < 4)
{
Assert::AreEqual(CMyStringException::ErrOutOfRange, e.what());
}
else
{
Assert::IsTrue(false);
}
}
catch (...)
{
Assert::IsTrue(false);
}
}
}
TEST_METHOD(SetAtTests) {
CMyString str[]{
CMyString(),
CMyString("test"),
CMyString("test"),
CMyString('a', 10),
};
int pos[] = {
0,
4,
-1,
3,
};
char* text[] = {
'\0',
'\0',
'\0', //first three are invalid
"aaataaaaaa",
};
int testcount = sizeof(pos) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
str[i].setat(pos[i], 't');
Assert::AreEqual(text[i], str[i].c_str());
}
catch (const CMyStringException& e)
{
if (i < 3)
{
Assert::AreEqual(CMyStringException::ErrOutOfRange, e.what());
}
else
{
Assert::IsTrue(false);
}
}
catch (...)
{
Assert::IsTrue(false);
}
}
}
TEST_METHOD(ReserveTests) {
int allocs[] = {
1,
5,
10,
33,
};
int testcount = sizeof(allocs) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
CMyString str = CMyString("test");
str.reserve(allocs[i]);
Assert::AreEqual(allocs[i], (int)str.capacity());
}
catch (const CMyStringException& e)
{
Assert::AreEqual(CMyStringException::ErrOutOfRange, e.what());
}
}
}
TEST_METHOD(EraseTests) {
2026-11-06 21:57:42 +01:00
CMyString str[]{
CMyString(),
CMyString("test"),
CMyString("test"),
CMyString("test"),
CMyString("test"),
CMyString('a', 10),
};
int pos[] = {
0,
4,
-1,
3,
3,
3,
};
int cnt[] = {
1,
1,
1,
0,
1,
1,
};
char* text[] = {
'\0',
'\0',
'\0',
"test",
"tes",
"aaaaaaaaa",
};
int testcount = sizeof(pos) / sizeof(int);
for (size_t i = 0; i < testcount; i++)
{
try
{
str[i].erase(pos[i], cnt[i]);
Assert::AreEqual(text[i], str[i].c_str());
}
catch (const CMyStringException& e)
{
if (i < 3)
{
Assert::AreEqual(CMyStringException::ErrOutOfRange, e.what());
}
else
{
Assert::IsTrue(false);
}
}
catch (...)
{
Assert::IsTrue(false);
}
}
}
TEST_METHOD(ShrinkToFitTests) {
2026-11-03 18:48:31 +01:00
}
};
}