Skip to content

Commit

Permalink
fixed errors in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
johnpatek committed Jan 5, 2025
1 parent 9061481 commit aa2521d
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 10 deletions.
8 changes: 6 additions & 2 deletions src/internal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,17 @@ namespace sigfn
{
if (std::distance(begin, end) == 0)
{
std::cerr << "empty set" << std::endl;
throw std::runtime_error(empty_sigset);
}
else
{
std::cerr << "not empty set" << std::endl;
}
for(IteratorType it = begin; it != end; ++it)
{
std::cout << "handling: " << *it << std::endl;
sigfn::handle(*it,[&](int signum)
{
std::cout << "received: " << signum << std::endl;
channel.write(signum);
});
}
Expand All @@ -82,6 +85,7 @@ namespace sigfn
}
catch (const std::exception &e)
{
std::cerr << "exception: " << e.what() << std::endl;
state::error_message = e.what();
result = -1;
}
Expand Down
17 changes: 10 additions & 7 deletions src/sigfn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/

#include "internal.hpp"
#include <iostream>

std::unordered_map<int, sigfn::handler_function> sigfn::internal::state::handler_map;
std::string sigfn::internal::state::error_message;
Expand Down Expand Up @@ -142,11 +141,12 @@ int sigfn_reset(int signum)

int sigfn_wait(const int *signums, size_t count, int *received)
{
std::vector<int> signums_vec(signums, signums + count);
return sigfn::internal::try_catch_return(
[&]()
{
int signum;
sigfn::internal::wait(signums, signums + count, signum);
sigfn::internal::wait(signums_vec.begin(), signums_vec.end(), signum);
if (received != nullptr)
{
*received = signum;
Expand All @@ -157,17 +157,19 @@ int sigfn_wait(const int *signums, size_t count, int *received)
int sigfn_wait_for(const int *signums, size_t count, int *received, const struct timeval *timeout)
{
bool finished(false);
std::vector<int> signums_vec(signums, signums + count);
int result = sigfn::internal::try_catch_return(
[&]()
{
int signum;
finished = sigfn::internal::wait_for(signums, signums + count, signum, sigfn::internal::make_duration(timeout));
finished = sigfn::internal::wait_for(signums_vec.begin(), signums_vec.end(), signum, sigfn::internal::make_duration(timeout));
if (finished && received != nullptr)
{
*received = signum;
}
});
if (result = 0 && !finished)
std::cerr << "status: " << result << std::endl;
if (result == 0 && !finished)
{
result = 1;
}
Expand All @@ -177,21 +179,22 @@ int sigfn_wait_for(const int *signums, size_t count, int *received, const struct
int sigfn_wait_until(const int *signums, size_t count, int *received, const struct timeval *deadline)
{
bool finished(false);
std::vector<int> signums_vec(signums, signums + count);
int result = sigfn::internal::try_catch_return(
[&]()
{
int signum;
finished = sigfn::internal::wait_until(signums, signums + count, signum, sigfn::internal::make_time_point(deadline));
finished = sigfn::internal::wait_until(signums_vec.begin(), signums_vec.end(), signum, sigfn::internal::make_time_point(deadline));
if (finished && received != nullptr)
{
*received = signum;
}
});
if (result = 0 && !finished)
if (result == 0 && !finished)
{
result = 1;
}
return 0;
return result;
}

const char *sigfn_error()
Expand Down
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ maxtest_add_test(unit sigfn_ignore "")
maxtest_add_test(unit sigfn_reset "")
maxtest_add_test(unit sigfn_wait "")
maxtest_add_test(unit sigfn_wait_for "")
maxtest_add_test(unit sigfn_wait_until "")
maxtest_add_test(unit sigfn_error "")
maxtest_add_test(unit sigfn::handle "")
maxtest_add_test(unit sigfn::ignore "")
Expand Down
38 changes: 37 additions & 1 deletion tests/unit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,16 @@ MAXTEST_MAIN
const int signums[1] = {SIGINT};
int signum(INVALID_SIGNUM);
int result;
// test empty sigset
result = ::sigfn_wait(NULL, 0, &signum);
MAXTEST_ASSERT(result == -1);
MAXTEST_ASSERT(signum == INVALID_SIGNUM);
// test invalid signum
int zero(0);
result = ::sigfn_wait(&signum, 1, &zero);
MAXTEST_ASSERT(result == -1);
MAXTEST_ASSERT(zero == 0);
// expect success
signal_from_child(SIGINT, std::chrono::milliseconds(100));
result = ::sigfn_wait(&signums[0], 1, &signum);
MAXTEST_ASSERT(result == 0);
Expand All @@ -98,6 +105,7 @@ MAXTEST_MAIN
timeout.tv_sec = 0;
timeout.tv_usec = 200000;
result = ::sigfn_wait_for(NULL, 0, &signum, &timeout);
std::cerr << result << std::endl;
MAXTEST_ASSERT(result == -1);
MAXTEST_ASSERT(signum == INVALID_SIGNUM);
signal_from_child(SIGINT, std::chrono::milliseconds(100));
Expand All @@ -106,12 +114,40 @@ MAXTEST_MAIN
MAXTEST_ASSERT(signums[0] == signum);
timeout.tv_sec = 0;
timeout.tv_usec = 1;
signum = INVALID_SIGNUM;
result = ::sigfn_wait_for(&signums[0], 1, &signum, &timeout);
MAXTEST_ASSERT(result == 1);
MAXTEST_ASSERT(signum == INVALID_SIGNUM);
#endif
};


MAXTEST_TEST_CASE(sigfn_wait_until)
{
#ifndef _WIN32 // WINDOWS
const int signums[1] = {SIGINT};
int signum(INVALID_SIGNUM);
int result;
struct timeval deadline;
struct timeval now;
gettimeofday(&now, NULL);
deadline.tv_sec = now.tv_sec + 1;
deadline.tv_usec = now.tv_usec;
result = ::sigfn_wait_until(NULL, 0, &signum, &deadline);
MAXTEST_ASSERT(result == -1);
MAXTEST_ASSERT(signum == INVALID_SIGNUM);
signal_from_child(SIGINT, std::chrono::milliseconds(100));
result = ::sigfn_wait_until(&signums[0], 1, &signum, &deadline);
MAXTEST_ASSERT(result == 0);
MAXTEST_ASSERT(signums[0] == signum);
deadline.tv_sec = now.tv_sec;
deadline.tv_usec = now.tv_usec;
signum = INVALID_SIGNUM;
result = ::sigfn_wait_until(&signums[0], 1, &signum, &deadline);
MAXTEST_ASSERT(result == 1);
MAXTEST_ASSERT(signum == INVALID_SIGNUM);
#endif
};

MAXTEST_TEST_CASE(sigfn_error)
{
int flag;
Expand Down

0 comments on commit aa2521d

Please sign in to comment.