Author: hpoussin
Date: Sun Jun 11 16:15:43 2006
New Revision: 22307
URL: http://svn.reactos.ru/svn/reactos?rev=22307&view=rev
Log:
[AUDIT]
According to Fireball, this file is clean because it contains only well-known interlocked operations taking up a few asm instructions
Modified:
trunk/reactos/lib/intrlck/intrlck.c (props changed)
Propchange: trunk/reactos/lib/intrlck/intrlck.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*
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…
==============================================================================
--- 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…
==============================================================================
--- 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…
==============================================================================
--- 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 },