Skip to content

Commit

Permalink
Add more tests. Remake print_ip for integers
Browse files Browse the repository at this point in the history
  • Loading branch information
dwarfovich committed Aug 2, 2024
1 parent db6a0aa commit 0ecb3d9
Show file tree
Hide file tree
Showing 2 changed files with 225 additions and 3 deletions.
2 changes: 1 addition & 1 deletion HW4/include/print_ip.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
template<typename T, std::enable_if_t<std::is_integral_v<T>, bool> = false>
void print_ip(const T& v)
{
std::cout << +std::make_unsigned_t<T>(v >> (sizeof(v) - 1) * CHAR_BIT);
std::cout << +static_cast<uint8_t>(v >> (sizeof(v) - 1) * CHAR_BIT);
if (sizeof(v) == 1) {
return;
}
Expand Down
226 changes: 224 additions & 2 deletions HW4/tests/sanity_check.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,229 @@

#include "print_ip.h"

TEST(Test, TestTest)
TEST(PrintIpTest, SanityCheck)
{

std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(int8_t { -1 });
ASSERT_EQ(outStream.str(), "255");
outStream.str("");
print_ip(int16_t { 0 });
ASSERT_EQ(outStream.str(), "0.0");
outStream.str("");
print_ip(int32_t { 2130706433 });
ASSERT_EQ(outStream.str(), "127.0.0.1");
outStream.str("");
print_ip(int64_t { 8875824491850138409 });
ASSERT_EQ(outStream.str(), "123.45.67.89.101.112.131.41");
outStream.str("");
print_ip(std::string { "Hello, World !" });
ASSERT_EQ(outStream.str(), "Hello, World !");
outStream.str("");
print_ip(std::vector<int> { 100, 200, 300, 400 });
ASSERT_EQ(outStream.str(), "100.200.300.400");
outStream.str("");
print_ip(std::list<short> { 400, 300, 200, 100 });
ASSERT_EQ(outStream.str(), "400.300.200.100");
outStream.str("");
print_ip(std::make_tuple(123, 456, 789, 0));
ASSERT_EQ(outStream.str(), "123.456.789.0");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckUint8)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(uint8_t { 0 });
ASSERT_EQ(outStream.str(), "0");
outStream.str("");
print_ip(uint8_t (-1));
ASSERT_EQ(outStream.str(), "255");
outStream.str("");
print_ip(uint8_t { 255 });
ASSERT_EQ(outStream.str(), "255");
outStream.str("");
print_ip(uint8_t ( 256 ));
ASSERT_EQ(outStream.str(), "0");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckInt8)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(int8_t { 0 });
ASSERT_EQ(outStream.str(), "0");
outStream.str("");
print_ip(int8_t(-1));
ASSERT_EQ(outStream.str(), "255");
outStream.str("");
print_ip(int8_t { 127 });
ASSERT_EQ(outStream.str(), "127");
outStream.str("");
print_ip(uint8_t(255));
ASSERT_EQ(outStream.str(), "255");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckUint16)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(uint16_t { 0 });
ASSERT_EQ(outStream.str(), "0.0");
outStream.str("");
print_ip(uint16_t (255 ));
ASSERT_EQ(outStream.str(), "0.255");
outStream.str("");
print_ip(uint16_t(256));
ASSERT_EQ(outStream.str(), "1.0");
outStream.str("");
print_ip(uint16_t(257));
ASSERT_EQ(outStream.str(), "1.1");
outStream.str("");
print_ip(uint16_t(257 + 256));
ASSERT_EQ(outStream.str(), "2.1");
outStream.str("");
print_ip(uint16_t(256*255));
ASSERT_EQ(outStream.str(), "255.0");
outStream.str("");
print_ip(uint16_t(256 * 255 + 1));
ASSERT_EQ(outStream.str(), "255.1");
outStream.str("");
print_ip(uint16_t(256 * 255 + 255));
ASSERT_EQ(outStream.str(), "255.255");
outStream.str("");
print_ip(static_cast<uint16_t>(256 * 255 + 255 + 1));
ASSERT_EQ(outStream.str(), "0.0");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckInt16)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(int16_t { 0 });
ASSERT_EQ(outStream.str(), "0.0");
outStream.str("");
print_ip(int16_t(255));
ASSERT_EQ(outStream.str(), "0.255");
outStream.str("");
print_ip(int16_t(256));
ASSERT_EQ(outStream.str(), "1.0");
outStream.str("");
print_ip(int16_t(257));
ASSERT_EQ(outStream.str(), "1.1");
outStream.str("");
print_ip(int16_t(257 + 256));
ASSERT_EQ(outStream.str(), "2.1");
outStream.str("");
print_ip(static_cast<int16_t>(256 * 255));
ASSERT_EQ(outStream.str(), "255.0");
outStream.str("");
print_ip(static_cast<int16_t>(256 * 255 + 1));
ASSERT_EQ(outStream.str(), "255.1");
outStream.str("");
print_ip(static_cast<int16_t>(256 * 255 + 255));
ASSERT_EQ(outStream.str(), "255.255");
outStream.str("");
print_ip(static_cast<int16_t>(256 * 255 + 255 + 1));
ASSERT_EQ(outStream.str(), "0.0");
outStream.str("");
print_ip(static_cast<int16_t>(256 * 255 + 255 + 1 + 1));
ASSERT_EQ(outStream.str(), "0.1");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckUint64)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(uint64_t { 0 });
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.0.0");
outStream.str("");
print_ip(uint64_t(255));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.0.255");
outStream.str("");
print_ip(uint64_t(256));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.1.0");
outStream.str("");
print_ip(uint64_t(257));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.1.1");
outStream.str("");
print_ip(uint64_t(257 + 256));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.2.1");
outStream.str("");
print_ip(uint64_t(256 * 255 + 255));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.255.255");
outStream.str("");
print_ip(uint64_t(-1));
ASSERT_EQ(outStream.str(), "255.255.255.255.255.255.255.255");
outStream.str("");
print_ip(uint64_t(-72'057'594'037'927'936));
ASSERT_EQ(outStream.str(), "255.0.0.0.0.0.0.0");
outStream.str("");
print_ip(uint64_t(-72'057'594'037'927'935));
ASSERT_EQ(outStream.str(), "255.0.0.0.0.0.0.1");
outStream.str("");
print_ip(uint64_t(-281'474'976'710'656));
ASSERT_EQ(outStream.str(), "255.255.0.0.0.0.0.0");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

TEST(PrintIpTest, CheckInt64)
{
std::stringstream outStream;
std::streambuf* oldbuf = std::cout.rdbuf(outStream.rdbuf());

print_ip(int64_t { 0 });
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.0.0");
outStream.str("");
print_ip(int64_t(255));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.0.255");
outStream.str("");
print_ip(int64_t(256));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.1.0");
outStream.str("");
print_ip(int64_t(257));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.1.1");
outStream.str("");
print_ip(int64_t(257 + 256));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.2.1");
outStream.str("");
print_ip(int64_t(256*255 + 255));
ASSERT_EQ(outStream.str(), "0.0.0.0.0.0.255.255");
outStream.str("");
print_ip(int64_t(-1));
ASSERT_EQ(outStream.str(), "255.255.255.255.255.255.255.255");
outStream.str("");
print_ip(int64_t(-72'057'594'037'927'936));
ASSERT_EQ(outStream.str(), "255.0.0.0.0.0.0.0");
outStream.str("");
print_ip(int64_t(-72'057'594'037'927'935));
ASSERT_EQ(outStream.str(), "255.0.0.0.0.0.0.1");
outStream.str("");
print_ip(int64_t(-281'474'976'710'656));
ASSERT_EQ(outStream.str(), "255.255.0.0.0.0.0.0");
outStream.str("");

std::cout.rdbuf(oldbuf);
}

0 comments on commit 0ecb3d9

Please sign in to comment.