Switch sigpending over to rt_sigpending.

Change-Id: I7b28984796b5fb343cfbcc47e0afc3a84293d417
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp
index 70e9017..a719fe7 100644
--- a/tests/signal_test.cpp
+++ b/tests/signal_test.cpp
@@ -19,6 +19,28 @@
 #include <errno.h>
 #include <signal.h>
 
+static size_t SIGNAL_MIN() {
+  return 1; // Signals start at 1 (SIGHUP), not 0.
+}
+
+static size_t SIGNAL_MAX() {
+  size_t result = SIGRTMAX;
+
+#if defined(__BIONIC__) && !defined(__mips__) && !defined(__LP64__)
+  // 32-bit bionic's sigset_t is too small for ARM and x86: 32 bits instead of 64.
+  // This means you can't refer to any of the real-time signals.
+  // See http://b/3038348 and http://b/5828899.
+  result = 32;
+#else
+  // Otherwise, C libraries should be perfectly capable of using their largest signal.
+  if (sizeof(sigset_t) * 8 < static_cast<size_t>(SIGRTMAX)) {
+    abort();
+  }
+#endif
+
+  return result;
+}
+
 template <typename Fn>
 static void TestSigSet1(Fn fn) {
   // NULL sigset_t*.
@@ -45,19 +67,6 @@
   sigset_t set;
   sigemptyset(&set);
 
-  int min_signal = SIGHUP;
-  int max_signal = SIGRTMAX;
-
-#if defined(__BIONIC__) && !defined(__mips__)
-  // bionic's sigset_t is too small for ARM and x86: 32 bits instead of 64.
-  // This means you can't refer to any of the real-time signals.
-  // See http://b/3038348 and http://b/5828899.
-  max_signal = 32;
-#else
-  // Other C libraries (or bionic for MIPS) are perfectly capable of using their largest signal.
-  ASSERT_GE(sizeof(sigset_t) * 8, static_cast<size_t>(SIGRTMAX));
-#endif
-
   // Bad signal number: too small.
   errno = 0;
   ASSERT_EQ(-1, fn(&set, 0));
@@ -65,14 +74,14 @@
 
   // Bad signal number: too high.
   errno = 0;
-  ASSERT_EQ(-1, fn(&set, max_signal + 1));
+  ASSERT_EQ(-1, fn(&set, SIGNAL_MAX() + 1));
   ASSERT_EQ(EINVAL, errno);
 
   // Good signal numbers, low and high ends of range.
   errno = 0;
-  ASSERT_EQ(0, fn(&set, min_signal));
+  ASSERT_EQ(0, fn(&set, SIGNAL_MIN()));
   ASSERT_EQ(0, errno);
-  ASSERT_EQ(0, fn(&set, max_signal));
+  ASSERT_EQ(0, fn(&set, SIGNAL_MAX()));
   ASSERT_EQ(0, errno);
 }
 
@@ -160,7 +169,7 @@
   ++gSigSuspendTestHelperCallCount;
 }
 
-TEST(signal, sigsuspend) {
+TEST(signal, sigsuspend_sigpending) {
   ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
 
   // Block SIGALRM.
@@ -170,10 +179,25 @@
   sigset_t original_set;
   ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
 
+  // There should be no pending signals.
+  sigset_t pending;
+  sigemptyset(&pending);
+  ASSERT_EQ(0, sigpending(&pending));
+  for (size_t i = SIGNAL_MIN(); i <= SIGNAL_MAX(); ++i) {
+    EXPECT_FALSE(sigismember(&pending, i)) << i;
+  }
+
   // Raise SIGALRM and check our signal handler wasn't called.
   raise(SIGALRM);
   ASSERT_EQ(0, gSigSuspendTestHelperCallCount);
 
+  // We should now have a pending SIGALRM but nothing else.
+  sigemptyset(&pending);
+  ASSERT_EQ(0, sigpending(&pending));
+  for (size_t i = SIGNAL_MIN(); i <= SIGNAL_MAX(); ++i) {
+    EXPECT_EQ((i == SIGALRM), sigismember(&pending, i));
+  }
+
   // Use sigsuspend to block everything except SIGALRM...
   sigset_t not_SIGALRM;
   sigfillset(&not_SIGALRM);