#include <gtest/gtest.h>
#include <cstring>
#include <iostream>
#include <cstdio>
using std::cout;
using std::endl;
void pr(int fd)
{
cout << "fd: " << static_cast<int>(fd) << endl;
}
{
FileDesc fd;
ASSERT_EQ(static_cast<int>(fd), -1);
pr(fd);
}
TEST(FileDesc_test, dup_stdout)
{
cout << "dup stdout:" << endl;
FileDesc fd;
cout << "fd: " << (int)fd << endl;
dprintf(1, "print to stdout\n");
fd.dup(1);
cout << "fd: " << (int)fd << endl;
dprintf(fd, "print to dup\n");
ASSERT_NE(static_cast<int>(fd), -1);
ASSERT_NE(static_cast<int>(fd), 1);
dprintf(1, "print to stdout again\n");
}
TEST(FileDesc_test, copy_construct)
{
cout << "copy construct:" << endl;
FileDesc fd;
cout << "fd: " << (int)fd << endl;
dprintf(1, "print to stdout\n");
fd.dup(1);
cout << "fd: " << (int)fd << endl;
dprintf(fd, "print to dup\n");
FileDesc fd2(fd);
cout << "fd: " << (int)fd << endl;
cout << "fd2: " << (int)fd2 << endl;
dprintf(fd2, "print to dup2\n");
ASSERT_NE(static_cast<int>(fd), -1);
ASSERT_NE(static_cast<int>(fd2), -1);
ASSERT_NE(static_cast<int>(fd), static_cast<int>(fd2));
}
TEST(FileDesc_test, copy)
{
cout << "copy:" << endl;
FileDesc fd, fd2;
cout << "fd: " << (int)fd << endl;
dprintf(1, "print to stdout\n");
fd.dup(1);
cout << "fd: " << (int)fd << endl;
dprintf(fd, "print to dup\n");
fd2 = fd;
cout << "fd: " << (int)fd << endl;
cout << "fd2: " << (int)fd2 << endl;
dprintf(fd2, "print to dup2\n");
ASSERT_NE(static_cast<int>(fd), -1);
ASSERT_NE(static_cast<int>(fd2), -1);
ASSERT_NE(static_cast<int>(fd), static_cast<int>(fd2));
}
TEST(FileDesc_test, move_construct)
{
cout << "move construct:" << endl;
FileDesc fd;
cout << "fd: " << (int)fd << endl;
dprintf(1, "print to stdout\n");
fd.dup(1);
cout << "fd: " << (int)fd << endl;
dprintf(fd, "print to dup\n");
FileDesc fd2 = std::move(fd);
cout << "fd: " << (int)fd << endl;
cout << "fd2: " << (int)fd2 << endl;
dprintf(fd2, "print to dup2\n");
ASSERT_EQ(static_cast<int>(fd), -1);
ASSERT_NE(static_cast<int>(fd2), -1);
}
TEST(FileDesc_test, move)
{
cout << "move:" << endl;
FileDesc fd, fd2;
cout << "fd: " << (int)fd << endl;
dprintf(1, "print to stdout\n");
fd.dup(1);
cout << "fd: " << (int)fd << endl;
dprintf(fd, "print to dup\n");
fd2 = std::move(fd);
cout << "fd: " << (int)fd << endl;
cout << "fd2: " << (int)fd2 << endl;
dprintf(fd2, "print to dup2\n");
ASSERT_EQ(static_cast<int>(fd), -1);
ASSERT_NE(static_cast<int>(fd2), -1);
}
TEST(inet_example, client_server_stream_test)
[Inet client server]