function that compares files added

function tests
This commit is contained in:
Kirill Zhdanovich 2013-01-21 17:58:22 +03:00 committed by Alex Zolotarev
parent afd954e47f
commit 5d0bde083b
3 changed files with 90 additions and 0 deletions

View file

@ -17,6 +17,12 @@ namespace
f.Write(name.c_str(), name.size());
}
void MakeFile(string const & name, size_t const size, const char c)
{
my::FileData f(name, my::FileData::OP_WRITE_TRUNCATE);
f.Write(string(size, c).c_str(), size);
}
void CheckFileOK(string const & name)
{
my::FileData f(name, my::FileData::OP_READ);
@ -106,3 +112,58 @@ UNIT_TEST(FileData_SharingAV_Windows)
TEST(my::DeleteFileX(name2), ());
}
#endif
UNIT_TEST(Equal_Function_Test)
{
MakeFile(name1);
MakeFile(name2);
TEST(my::IsEqualFiles(name1, name1), ());
TEST(my::IsEqualFiles(name2, name2), ());
TEST(!my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
UNIT_TEST(Equal_Function_Test_For_Big_Files)
{
{
MakeFile(name1, 1024 * 1024, 'a');
MakeFile(name2, 1024 * 1024, 'a');
TEST(my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
{
MakeFile(name1, 1024 * 1024 + 512, 'a');
MakeFile(name2, 1024 * 1024 + 512, 'a');
TEST(my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
{
MakeFile(name1, 1024 * 1024 + 1, 'a');
MakeFile(name2, 1024 * 1024 + 1, 'b');
TEST(my::IsEqualFiles(name1, name1), ());
TEST(my::IsEqualFiles(name2, name2), ());
TEST(!my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
{
MakeFile(name1, 1024 * 1024, 'a');
MakeFile(name2, 1024 * 1024, 'b');
TEST(my::IsEqualFiles(name1, name1), ());
TEST(my::IsEqualFiles(name2, name2), ());
TEST(!my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
{
MakeFile(name1, 1024 * 1024, 'a');
MakeFile(name2, 1024 * 1024 + 1, 'b');
TEST(!my::IsEqualFiles(name1, name2), ());
TEST(my::DeleteFileX(name1), ());
TEST(my::DeleteFileX(name2), ());
}
}

View file

@ -263,4 +263,32 @@ bool CopyFile(string const & fOld, string const & fNew)
return false;
}
bool IsEqualFiles(string const & firstFile, string const & secondFile)
{
my::FileData first(firstFile, my::FileData::OP_READ);
my::FileData second(secondFile, my::FileData::OP_READ);
if (first.Size() != second.Size())
return false;
size_t const bufSize = 512 * 1024;
vector<char> buf1, buf2;
buf1.resize(bufSize);
buf2.resize(bufSize);
size_t const fileSize = first.Size();
size_t currSize = 0;
while (currSize < fileSize)
{
size_t toRead = fileSize - currSize;
if (toRead > bufSize)
toRead = bufSize;
first.Read(step * bufSize, &buf1[0], readingLength);
second.Read(step * bufSize, &buf2[0], readingLength);
if (buf1 != buf2)
return false;
currSize += toRead;
}
return true;
}
}

View file

@ -49,5 +49,6 @@ bool DeleteFileX(string const & fName);
bool RenameFileX(string const & fOld, string const & fNew);
/// @return false if copy fails. DO NOT THROWS exceptions
bool CopyFile(string const & fOld, string const & fNew);
bool IsEqualFiles(string const & firstFile, string const & secondFile);
}