[ros-diffs] [hpoussin] 22306: Add some tests for interlocked functions

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Sun Jun 11 14:02:05 CEST 2006


Author: hpoussin
Date: Sun Jun 11 16:02:04 2006
New Revision: 22306

URL: http://svn.reactos.ru/svn/reactos?rev=22306&view=rev
Log:
Add some tests for interlocked functions

Added:
    trunk/reactos/regtests/winetests/kernel32/interlck.c   (with props)
Modified:
    trunk/reactos/regtests/winetests/kernel32/kernel32.rbuild
    trunk/reactos/regtests/winetests/kernel32/testlist.c

Added: trunk/reactos/regtests/winetests/kernel32/interlck.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/regtests/winetests/kernel32/interlck.c?rev=22306&view=auto
==============================================================================
--- trunk/reactos/regtests/winetests/kernel32/interlck.c (added)
+++ trunk/reactos/regtests/winetests/kernel32/interlck.c Sun Jun 11 16:02:04 2006
@@ -1,0 +1,130 @@
+/*
+ * Unit test suite for interlocked functions.
+ *
+ * Copyright 2006 Hervé Poussineau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <stdarg.h>
+
+#include "wine/test.h"
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+
+static void test_InterlockedCompareExchange(void)
+{
+    LONG dest, res;
+
+    dest = 0;
+    res = InterlockedCompareExchange( &dest, 1, 0 );
+    ok( res == 0 && dest == 1,
+        "Expected 0 and 1, got %ld and %ld", res, dest );
+
+    dest = 1;
+    res = InterlockedCompareExchange( &dest, 2, 0 );
+    ok( res == 1 && dest == 1,
+        "Expected 1 and 1, got %ld and %ld", res, dest );
+}
+
+static void test_InterlockedDecrement(void)
+{
+    LONG dest, res;
+
+    dest = 1;
+    res = InterlockedDecrement( &dest );
+    ok( res == 0 && dest == 0,
+        "Expected 0 and 0, got %ld and %ld", res, dest );
+
+    dest = 0;
+    res = InterlockedDecrement( &dest );
+    ok( res == -1 && dest == -1,
+        "Expected -1 and -1, got %ld and %ld", res, dest );
+
+    dest = -1;
+    res = InterlockedDecrement( &dest );
+    ok( res == -2 && dest == -2,
+        "Expected -2 and -2, got %ld and %ld", res, dest );
+}
+
+static void test_InterlockedExchange(void)
+{
+    LONG dest, res;
+
+    dest = 0;
+    res = InterlockedExchange( &dest, 1 );
+    ok( res == 0 && dest == 1,
+        "Expected 0 and 1, got %ld and %ld", res, dest );
+
+    dest = 1;
+    res = InterlockedExchange( &dest, 2 );
+    ok( res == 1 && dest == 2,
+        "Expected 1 and 2, got %ld and %ld", res, dest );
+
+    dest = 1;
+    res = InterlockedExchange( &dest, -1 );
+    ok( res == 1 && dest == -1,
+        "Expected 1 and -1, got %ld and %ld", res, dest );
+}
+
+static void test_InterlockedExchangeAdd(void)
+{
+    LONG dest, res;
+
+    dest = 0;
+    res = InterlockedExchangeAdd( &dest, 1 );
+    ok( res == 0 && dest == 1,
+        "Expected 0 and 1, got %ld and %ld", res, dest );
+
+    dest = 1;
+    res = InterlockedExchangeAdd( &dest, 2 );
+    ok( res == 1 && dest == 3,
+        "Expected 1 and 3, got %ld and %ld", res, dest );
+
+    dest = 1;
+    res = InterlockedExchangeAdd( &dest, -1 );
+    ok( res == 1 && dest == 0,
+        "Expected 1 and 0, got %ld and %ld", res, dest );
+}
+
+static void test_InterlockedIncrement(void)
+{
+    LONG dest, res;
+
+    dest = -2;
+    res = InterlockedIncrement( &dest );
+    ok( res == -1 && dest == -1,
+        "Expected -1 and -1, got %ld and %ld", res, dest );
+
+    dest = -1;
+    res = InterlockedIncrement( &dest );
+    ok( res == 0 && dest == 0,
+        "Expected 0 and 0, got %ld and %ld", res, dest );
+
+    dest = 0;
+    res = InterlockedIncrement( &dest );
+    ok( res == 1 && dest == 1,
+        "Expected 1 and 1, got %ld and %ld", res, dest );
+}
+
+START_TEST(interlck)
+{
+    test_InterlockedCompareExchange();
+    test_InterlockedDecrement();
+    test_InterlockedExchange();
+    test_InterlockedExchangeAdd();
+    test_InterlockedIncrement();
+}

Propchange: trunk/reactos/regtests/winetests/kernel32/interlck.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/regtests/winetests/kernel32/kernel32.rbuild
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/regtests/winetests/kernel32/kernel32.rbuild?rev=22306&r1=22305&r2=22306&view=diff
==============================================================================
--- trunk/reactos/regtests/winetests/kernel32/kernel32.rbuild (original)
+++ trunk/reactos/regtests/winetests/kernel32/kernel32.rbuild Sun Jun 11 16:02:04 2006
@@ -15,6 +15,7 @@
     <file>file.c</file>
     <file>format_msg.c</file>
     <file>heap.c</file>
+    <file>interlck.c</file>
     <file>locale.c</file>
     <file>mailslot.c</file>
     <file>module.c</file>

Modified: trunk/reactos/regtests/winetests/kernel32/testlist.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/regtests/winetests/kernel32/testlist.c?rev=22306&r1=22305&r2=22306&view=diff
==============================================================================
--- trunk/reactos/regtests/winetests/kernel32/testlist.c (original)
+++ trunk/reactos/regtests/winetests/kernel32/testlist.c Sun Jun 11 16:02:04 2006
@@ -22,6 +22,7 @@
 extern void func_file(void);
 extern void func_format_msg(void);
 extern void func_heap(void);
+extern void func_interlck(void);
 extern void func_locale(void);
 extern void func_module(void);
 extern void func_mailslot(void);
@@ -49,6 +50,7 @@
     { "file", func_file },
     { "format_msg", func_format_msg },
     { "heap", func_heap },
+    { "interlck", func_interlck },
     { "locale", func_locale },
     { "module", func_module },
     { "mailslot", func_mailslot },




More information about the Ros-diffs mailing list