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... ============================================================================== --- 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... ============================================================================== --- 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@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_api... ============================================================================== --- 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... ============================================================================== --- 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 }