std::cout << "Failed fd numerical check (copy constructor)" << std::endl; return TestFail; } if (!isValidFd(desc1_->get()) || !isValidFd(desc2_->get())) { std::cout << "Failed fd validity after construction (copy constructor)" << std::endl; return TestFail; } delete desc1_; desc1_ = nullptr; if (!isValidFd(desc2_->get())) { std::cout << "Failed fd validity after destruction (copy constructor)" << std::endl; return TestFail; } delete desc2_; desc2_ = nullptr; /* Test creating SharedFD by taking over other SharedFD. */ desc1_ = new SharedFD(fd_); fd = desc1_->get(); desc2_ = new SharedFD(std::move(*desc1_)); if (desc1_->get() != -1 || desc2_->get() != fd) { std::cout << "Failed fd numerical check (move constructor)" << std::endl; return TestFail; } if (!isValidFd(desc2_->get())) { std::cout << "Failed fd validity after construction (move constructor)" << std::endl; return TestFail; } delete desc1_; desc1_ = nullptr; delete desc2_; desc2_ = nullptr; /* Test creating SharedFD by copy assignment. */ desc1_ = new SharedFD(); desc2_ = new SharedFD(fd_); fd = desc2_->get(); *desc1_ = *desc2_; if (desc1_->get() != fd || desc2_->get() != fd) { std::cout << "Failed fd numerical check (copy assignment)" << std::endl; return TestFail; } if (!isValidFd(desc1_->get()) || !isValidFd(desc2_->get())) { std::cout << "Failed fd validity after construction (copy assignment)" << std::endl; return TestFail; } delete desc1_; desc1_ = nullptr; delete desc2_; desc2_ = nullptr; /* Test creating SharedFD by move assignment. */ desc1_ = new SharedFD(); desc2_ = new SharedFD(fd_); fd = desc2_->get(); *desc1_ = std::move(*desc2_); if (desc1_->get() != fd || desc2_->get() != -1) { std::cout << "Failed fd numerical check (move assignment)" << std::endl; return TestFail; } if (!isValidFd(desc1_->get())) { std::cout << "Failed fd validity after construction (move assignment)" << std::endl; return TestFail; } delete desc1_; desc1_ = nullptr; delete desc2_; desc2_ = nullptr; return TestPass; } void cleanup() { delete desc2_; delete desc1_; if (fd_ > 0) close(fd_); } private: bool isValidFd(int fd) { struct stat s; if (fstat(fd, &s)) return false; /* Check that inode number matches cached temp file. */ return s.st_ino == inodeNr_; } int fd_; ino_t inodeNr_; SharedFD *desc1_, *desc2_; }; TEST_REGISTER(SharedFDTest) :markers stroke fill" id="rect288-5-10-0-5-5-7" width="11.54506" height="11.262992" x="185.35968" y="37.400467" /> x_even_inc = 1 y_even_inc = 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x_odd_inc = 3 y_odd_inc = 3 0 1 2 3 4 5 6 7 8 9