summaryrefslogtreecommitdiff
path: root/tests/stdlib_test.cpp
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2014-04-29 17:49:06 -0700
committerDan Albert <danalbert@google.com>2014-04-29 19:17:00 -0700
commitb8425c549a0bfe08b01b5906b95603d8523c1b16 (patch)
tree2efb8b0f66e170dff1cb9ff3a90001cc49ff9291 /tests/stdlib_test.cpp
parent85e780d0557643a81c4a33b3bc5d3806ef9d78e3 (diff)
Adds quick_exit(3) and at_quick_exit(3) from freebsd
Change-Id: I4fe88abd8f7b8aa45e58aeb2529d59a8d555d338
Diffstat (limited to 'tests/stdlib_test.cpp')
-rw-r--r--tests/stdlib_test.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp
index bb395f04f..fc0f0e1a2 100644
--- a/tests/stdlib_test.cpp
+++ b/tests/stdlib_test.cpp
@@ -203,6 +203,52 @@ TEST(stdlib, strtold) {
ASSERT_DOUBLE_EQ(1.23, strtold("1.23", NULL));
}
+TEST(stdlib, quick_exit) {
+ pid_t pid = fork();
+ ASSERT_NE(-1, pid) << strerror(errno);
+
+ if (pid == 0) {
+ quick_exit(99);
+ }
+
+ int status;
+ ASSERT_EQ(pid, waitpid(pid, &status, 0));
+ ASSERT_TRUE(WIFEXITED(status));
+ ASSERT_EQ(99, WEXITSTATUS(status));
+}
+
+static int quick_exit_status = 0;
+
+static void quick_exit_1(void) {
+ ASSERT_EQ(quick_exit_status, 0);
+ quick_exit_status = 1;
+}
+
+static void quick_exit_2(void) {
+ ASSERT_EQ(quick_exit_status, 1);
+}
+
+static void not_run(void) {
+ FAIL();
+}
+
+TEST(stdlib, at_quick_exit) {
+ pid_t pid = fork();
+ ASSERT_NE(-1, pid) << strerror(errno);
+
+ if (pid == 0) {
+ ASSERT_EQ(at_quick_exit(quick_exit_2), 0);
+ ASSERT_EQ(at_quick_exit(quick_exit_1), 0);
+ atexit(not_run);
+ quick_exit(99);
+ }
+
+ int status;
+ ASSERT_EQ(pid, waitpid(pid, &status, 0));
+ ASSERT_TRUE(WIFEXITED(status));
+ ASSERT_EQ(99, WEXITSTATUS(status));
+}
+
TEST(unistd, _Exit) {
int pid = fork();
ASSERT_NE(-1, pid) << strerror(errno);