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/CMakeList…
==============================================================================
--- 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?re…
==============================================================================
--- 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 (pierre(a)reactos.org)
+ */
+
+#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_ap…
==============================================================================
--- 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.…
==============================================================================
--- 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 }