[MSVCRT:APITEST]
[reactos.git] / rostests / apitests / msvcrt / ieee.c
index ffaf13a..814b1c3 100644 (file)
@@ -3,10 +3,12 @@
  * LICENSE:         GPL - See COPYING in the top level directory
  * PURPOSE:         Tests for IEEE floatting-point functions
  * PROGRAMMER:      Pierre Schweitzer (pierre@reactos.org)
+ * REFERENCES:      http://msdn.microsoft.com/en-US/library/h7zkk1bz%28v=VS.80%29.aspx
  */
 
 #include <wine/test.h>
 #include <float.h>
+#include <math.h>
 
 typedef union
 {
@@ -60,6 +62,9 @@ void test_finite(void)
     ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
     tested.l = 0x7FFFFFFFFFFFFFFFLL;
     ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+
+    /* MSDN example */
+    ok(_finite(2.387000) == TRUE, "_finite = FALSE\n");
 }
 
 void test_fpclass(void)
@@ -149,6 +154,10 @@ void test_fpclass(void)
     tested.l = 0x7FFFFFFFFFFFFFFFLL;
     class = _fpclass(tested.d);
     ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+
+    /* MSDN example */
+    class = _fpclass(2.387000);
+    ok(class == _FPCLASS_PN, "class = %d\n", class);
 }
 
 void test_isnan(void)
@@ -197,6 +206,297 @@ void test_isnan(void)
     ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
     tested.l = 0x7FFFFFFFFFFFFFFFLL;
     ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+
+    /* MSDN example */
+    ok(_isnan(2.387000) == FALSE, "_isnan = TRUE\n");
+}
+
+void test_j0(void)
+{
+    ieee_double tested;
+    ieee_double expected;
+    ieee_double result;
+
+    expected.l = 0;
+
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    expected.l = 0x1FE7206E1D6FDCFALL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8010000000000000LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000001LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000000LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000000LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000001LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0010000000000000LL;
+    expected.l = 0x3FF0000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    expected.l = 0x1FE7206E1D6FDCFALL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000001LL;
+    expected.l = 0x7FF8000000000001LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF8000000000000LL;
+    expected.l = 0x7FF8000000000000LL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+
+    /* MSDN example */
+    errno = 0xDEADBEEF;
+    tested.d = 2.387000;
+    expected.l = 0x3F83059F9F6F30CALL;
+    result.d =  _j0(tested.d);
+    ok(result.l == expected.l, "_j0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+}
+
+void test_j1(void)
+{
+    ieee_double tested;
+    ieee_double expected;
+    ieee_double result;
+
+    expected.l = 0;
+
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    expected.l = 0x9FE7206E1D6FDCFALL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8010000000000000LL;
+    expected.l = 0x8008000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    expected.l = 0x8008000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000001LL;
+    expected.l = 0x8000000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000000LL;
+    expected.l = 0x8000000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000000LL;
+    expected.l = 0x0000000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000001LL;
+    expected.l = 0x0000000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    expected.l = 0x0008000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0010000000000000LL;
+    expected.l = 0x0008000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    expected.l = 0x1FE7206E1D6FDCFALL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000001LL;
+    expected.l = 0x7FF8000000000001LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF8000000000000LL;
+    expected.l = 0x7FF8000000000000LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+
+    /* MSDN example */
+    errno = 0xDEADBEEF;
+    tested.d = 2.387000;
+    expected.l = 0x3FE0BBEFC62ABAB1LL;
+    result.d =  _j1(tested.d);
+    ok(result.l == expected.l, "_j1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
 }
 
 void test_scalb(void)
@@ -333,6 +633,302 @@ void test_scalb(void)
     result.d =  _scalb(tested.d, 3);
     ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l);
     ok(errno == EDOM, "errno: %d\n", errno);
+
+    /* MSDN example */
+    errno = 0xDEADBEEF;
+    tested.d = 2.387000;
+    expected.l = 0x4033189374BC6A7FLL;
+    result.d =  _scalb(tested.d, 3);
+    ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+}
+
+void test_y0(void)
+{
+    ieee_double tested;
+    ieee_double expected;
+    ieee_double result;
+
+    expected.l = 0;
+
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8010000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000001LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000000LL;
+    expected.l = 0xFFF0000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == ERANGE, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000000LL;
+    expected.l = 0xFFF0000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == ERANGE, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000001LL;
+    expected.l = 0xC07D9FFC3469E1B3LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    expected.l = 0xC07C30D8F820740ELL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0010000000000000LL;
+    expected.l = 0xC07C30D8F820740ELL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    expected.l = 0x9FD5A36F8428F58BLL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000001LL;
+    expected.l = 0x7FF8000000000001LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF8000000000000LL;
+    expected.l = 0x7FF8000000000000LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+
+    /* MSDN example */
+    errno = 0xDEADBEEF;
+    tested.d = 2.387000;
+    expected.l = 0x3FE05FB1B1E49E66LL;
+    result.d =  _y0(tested.d);
+    ok(result.l == expected.l, "_y0 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+}
+
+void test_y1(void)
+{
+    ieee_double tested;
+    ieee_double expected;
+    ieee_double result;
+
+    expected.l = 0;
+
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF8000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    expected.l = 0xFFFFFFFFFFFFFFFFLL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000001LL;
+    expected.l = 0xFFF8000000000001LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8010000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000001LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x8000000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == ERANGE, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == ERANGE, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0000000000000001LL;
+    expected.l = 0xFFF0000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    expected.l = 0xFFC45F306DC9C884LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x0010000000000000LL;
+    expected.l = 0xFFC45F306DC9C883LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    expected.l = 0x9FD5A36F8428F58BLL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000000LL;
+    expected.l = 0xFFF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF0000000000001LL;
+    expected.l = 0x7FF8000000000001LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FF8000000000000LL;
+    expected.l = 0x7FF8000000000000LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+    errno = 0xDEADBEEF;
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    expected.l = 0x7FFFFFFFFFFFFFFFLL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == EDOM, "errno: %d\n", errno);
+
+    /* MSDN example */
+    errno = 0xDEADBEEF;
+    tested.d = 2.387000;
+    expected.l = 0x3FB828EC13723EE6LL;
+    result.d =  _y1(tested.d);
+    ok(result.l == expected.l, "_y1 returned: %I64x\n", result.l);
+    ok(errno == 0xDEADBEEF, "errno: %d\n", errno);
 }
 
 START_TEST(ieee)
@@ -340,5 +936,9 @@ START_TEST(ieee)
     test_finite();
     test_fpclass();
     test_isnan();
+    test_j0();
+    test_j1();
     test_scalb();
+    test_y0();
+    test_y1();
 }