mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 22:02:27 +00:00
Improve signal handling and math
- Polyfill ucontext_t on FreeBSD/OpenBSD/NetBSD - Add tests confirming signals can edit CPU state - Work towards supporting ZIP filesystem on bare metal - Add more tinymath unit tests for POSIX conformance - Add X87 and SSE status flags to crash report - Fix some bugs in blinkenlights - Fix llvm build breakage
This commit is contained in:
parent
cdc54ea1fd
commit
40291c9db3
109 changed files with 2316 additions and 520 deletions
|
@ -17,12 +17,83 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/math.h"
|
||||
#include "libc/rand/rand.h"
|
||||
#include "libc/runtime/gc.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
int rando;
|
||||
|
||||
void SetUp(void) {
|
||||
rando = rand() & 0xffff;
|
||||
}
|
||||
|
||||
TEST(ldexpl, test) {
|
||||
EXPECT_EQ(rando, ldexpl(rando, 0));
|
||||
EXPECT_STREQ("NAN", gc(xdtoal(ldexpl(NAN, 0))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoal(ldexpl(-NAN, 0))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoal(ldexpl(INFINITY, 0))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoal(ldexpl(-INFINITY, 0))));
|
||||
EXPECT_STREQ("NAN", gc(xdtoal(ldexpl(NAN, 1))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoal(ldexpl(-NAN, 1))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoal(ldexpl(INFINITY, 1))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoal(ldexpl(-INFINITY, 1))));
|
||||
EXPECT_STREQ("16384", gc(xdtoal(log2l(LDBL_MAX))));
|
||||
EXPECT_STREQ(".00390625", gc(xdtoal(ldexpl(1, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoal(ldexpl(0, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoal(ldexpl(0, 8))));
|
||||
EXPECT_STREQ("256", gc(xdtoal(ldexpl(1, 8))));
|
||||
EXPECT_STREQ("512", gc(xdtoal(ldexpl(2, 8))));
|
||||
EXPECT_STREQ("768", gc(xdtoal(ldexpl(3, 8))));
|
||||
EXPECT_STREQ("6.997616471358197e+3461", gc(xdtoal(ldexpl(1, 11500))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoal(ldexpl(1, 999999))));
|
||||
EXPECT_STREQ("0", gc(xdtoal(ldexpl(1, -999999))));
|
||||
}
|
||||
|
||||
TEST(ldexp, test) {
|
||||
EXPECT_EQ(rando, ldexp(rando, 0));
|
||||
EXPECT_STREQ("NAN", gc(xdtoa(ldexp(NAN, 0))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoa(ldexp(-NAN, 0))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoa(ldexp(INFINITY, 0))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoa(ldexp(-INFINITY, 0))));
|
||||
EXPECT_STREQ("NAN", gc(xdtoa(ldexp(NAN, 1))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoa(ldexp(-NAN, 1))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoa(ldexp(INFINITY, 1))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoa(ldexp(-INFINITY, 1))));
|
||||
EXPECT_STREQ("16384", gc(xdtoa(log2l(LDBL_MAX))));
|
||||
EXPECT_STREQ(".00390625", gc(xdtoa(ldexp(1, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoa(ldexp(0, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoa(ldexp(0, 8))));
|
||||
EXPECT_STREQ("256", gc(xdtoa(ldexp(1, 8))));
|
||||
EXPECT_STREQ("512", gc(xdtoa(ldexp(2, 8))));
|
||||
EXPECT_STREQ("768", gc(xdtoa(ldexp(3, 8))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoa(ldexp(1, 999999))));
|
||||
EXPECT_STREQ("0", gc(xdtoa(ldexp(1, -999999))));
|
||||
}
|
||||
|
||||
TEST(ldexpf, test) {
|
||||
EXPECT_EQ(rando, ldexpf(rando, 0));
|
||||
EXPECT_STREQ("NAN", gc(xdtoaf(ldexpf(NAN, 0))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoaf(ldexpf(-NAN, 0))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoaf(ldexpf(INFINITY, 0))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoaf(ldexpf(-INFINITY, 0))));
|
||||
EXPECT_STREQ("NAN", gc(xdtoaf(ldexpf(NAN, 1))));
|
||||
EXPECT_STREQ("-NAN", gc(xdtoaf(ldexpf(-NAN, 1))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoaf(ldexpf(INFINITY, 1))));
|
||||
EXPECT_STREQ("-INFINITY", gc(xdtoaf(ldexpf(-INFINITY, 1))));
|
||||
EXPECT_STREQ("16384", gc(xdtoaf(log2l(LDBL_MAX))));
|
||||
EXPECT_STREQ(".00390625", gc(xdtoaf(ldexpf(1, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoaf(ldexpf(0, -8))));
|
||||
EXPECT_STREQ("0", gc(xdtoaf(ldexpf(0, 8))));
|
||||
EXPECT_STREQ("256", gc(xdtoaf(ldexpf(1, 8))));
|
||||
EXPECT_STREQ("512", gc(xdtoaf(ldexpf(2, 8))));
|
||||
EXPECT_STREQ("768", gc(xdtoaf(ldexpf(3, 8))));
|
||||
EXPECT_STREQ("INFINITY", gc(xdtoaf(ldexpf(1, 999999))));
|
||||
EXPECT_STREQ("0", gc(xdtoaf(ldexpf(1, -999999))));
|
||||
}
|
||||
|
||||
TEST(ldexp, stuff) {
|
||||
volatile int twopow = 5;
|
||||
volatile double pi = 3.14;
|
||||
ASSERT_STREQ("100.48", gc(xasprintf("%.2f", ldexp(pi, twopow))));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue