Author: pschweitzer
Date: Fri Nov 18 22:26:35 2011
New Revision: 54425

URL: http://svn.reactos.org/svn/reactos?rev=54425&view=rev
Log:
[MSVCRT_APITEST]
Add test suite for IEEE floatting-point functions.
It's been tested on w2k3 and it has 0 failed tests.
Some are failing on ReactOS.

Added:
    trunk/rostests/apitests/msvcrt/ieee.c   (with props)
Modified:
    trunk/rostests/apitests/msvcrt/CMakeLists.txt
    trunk/rostests/apitests/msvcrt/msvcrt_apitest.rbuild
    trunk/rostests/apitests/msvcrt/testlist.c

Modified: trunk/rostests/apitests/msvcrt/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msvcrt/CMakeLists.txt?rev=54425&r1=54424&r2=54425&view=diff
==============================================================================
--- trunk/rostests/apitests/msvcrt/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/msvcrt/CMakeLists.txt [iso-8859-1] Fri Nov 18 
22:26:35 2011
@@ -2,6 +2,7 @@
 add_definitions(-D_DLL -D__USE_CRTIMP)
 
 list(APPEND SOURCE
+    ieee.c
     splitpath.c
     testlist.c)
 

Added: trunk/rostests/apitests/msvcrt/ieee.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msvcrt/ieee.c?rev=54425&view=auto
==============================================================================
--- trunk/rostests/apitests/msvcrt/ieee.c (added)
+++ trunk/rostests/apitests/msvcrt/ieee.c [iso-8859-1] Fri Nov 18 22:26:35 2011
@@ -1,0 +1,197 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * PURPOSE:         Tests for IEEE floatting-point functions
+ * PROGRAMMER:      Pierre Schweitzer ([email protected])
+ */
+
+#include <wine/test.h>
+#include <float.h>
+
+typedef union
+{
+    double d;
+    long long l;
+} ieee_double;
+
+void test_finite(void)
+{
+    ieee_double tested;
+
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0xFFF8000000000001LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0xFFF0000000000001LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0xFFF0000000000000LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x8010000000000000LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x8000000000000001LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x8000000000000000LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x0000000000000000LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x0000000000000001LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x0010000000000000LL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == TRUE, "_finite = FALSE\n");
+    tested.l = 0x7FF0000000000000LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0x7FF0000000000001LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0x7FF8000000000000LL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    ok(_finite(tested.d) == FALSE, "_finite = TRUE\n");
+}
+
+void test_fpclass(void)
+{
+    int class;
+    ieee_double tested;
+
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0xFFF8000000000001LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    /* According to IEEE, it should be Signaling NaN, but
+     * on w2k3, it's Quiet NAN
+     * ok(class == _FPCLASS_SNAN, "class = %d\n", class);
+     */
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0xFFF0000000000001LL;
+    class = _fpclass(tested.d);
+    /* According to IEEE, it should be Signaling NaN, but
+     * on w2k3, it's Quiet NAN
+     * ok(class == _FPCLASS_SNAN, "class = %d\n", class);
+     */
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0xFFF0000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_NINF, "class = %d\n", class);
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_NN, "class = %d\n", class);
+    tested.l = 0x8010000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_NN, "class = %d\n", class);
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_ND, "class = %d\n", class);
+    tested.l = 0x8000000000000001LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_ND, "class = %d\n", class);
+    tested.l = 0x8000000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_NZ, "class = %d\n", class);
+    tested.l = 0x0000000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PZ, "class = %d\n", class);
+    tested.l = 0x0000000000000001LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PD, "class = %d\n", class);
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PD, "class = %d\n", class);
+    tested.l = 0x0010000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PN, "class = %d\n", class);
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PN, "class = %d\n", class);
+    tested.l = 0x7FF0000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_PINF, "class = %d\n", class);
+    tested.l = 0x7FF0000000000001LL;
+    class = _fpclass(tested.d);
+    /* According to IEEE, it should be Signaling NaN, but
+     * on w2k3, it's Quiet NAN
+     * ok(class == _FPCLASS_SNAN, "class = %d\n", class);
+     */
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    /* According to IEEE, it should be Signaling NaN, but
+     * on w2k3, it's Quiet NAN
+     * ok(class == _FPCLASS_SNAN, "class = %d\n", class);
+     */
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0x7FF8000000000000LL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    class = _fpclass(tested.d);
+    ok(class == _FPCLASS_QNAN, "class = %d\n", class);
+}
+
+void test_isnan(void)
+{
+    ieee_double tested;
+
+    tested.l = 0xFFFFFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0xFFF8000000000001LL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0xFFF7FFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0xFFF0000000000001LL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0xFFF0000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0xFFEFFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x8010000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x800FFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x8000000000000001LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x8000000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x0000000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x0000000000000001LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x000FFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x0010000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x7FEFFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x7FF0000000000000LL;
+    ok(_isnan(tested.d) == FALSE, "_isnan = TRUE\n");
+    tested.l = 0x7FF0000000000001LL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0x7FF7FFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0x7FF8000000000000LL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+    tested.l = 0x7FFFFFFFFFFFFFFFLL;
+    ok(_isnan(tested.d) == TRUE, "_isnan = FALSE\n");
+}
+
+START_TEST(ieee)
+{
+    test_finite();
+    test_fpclass();
+    test_isnan();
+}

Propchange: trunk/rostests/apitests/msvcrt/ieee.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/rostests/apitests/msvcrt/msvcrt_apitest.rbuild
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msvcrt/msvcrt_apitest.rbuild?rev=54425&r1=54424&r2=54425&view=diff
==============================================================================
--- trunk/rostests/apitests/msvcrt/msvcrt_apitest.rbuild [iso-8859-1] (original)
+++ trunk/rostests/apitests/msvcrt/msvcrt_apitest.rbuild [iso-8859-1] Fri Nov 
18 22:26:35 2011
@@ -7,6 +7,7 @@
        <library>pseh</library>
        <file>testlist.c</file>
 
+       <file>ieee.c</file>
        <file>splitpath.c</file>
 
 </module>

Modified: trunk/rostests/apitests/msvcrt/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msvcrt/testlist.c?rev=54425&r1=54424&r2=54425&view=diff
==============================================================================
--- trunk/rostests/apitests/msvcrt/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/msvcrt/testlist.c [iso-8859-1] Fri Nov 18 22:26:35 
2011
@@ -5,10 +5,12 @@
 #define STANDALONE
 #include "wine/test.h"
 
+extern void func_ieee(void);
 extern void func_splitpath(void);
 
 const struct test winetest_testlist[] =
 {
+    { "ieee", func_ieee },
     { "splitpath", func_splitpath },
 
     { 0, 0 }


Reply via email to