e67fb5fc20aadeeaf10f58da98af7009f95bef68
2 * Unit test suite for interlocked functions.
4 * Copyright 2006 Hervé Poussineau
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "wine/test.h"
28 static void test_InterlockedCompareExchange(void)
33 res
= InterlockedCompareExchange( &dest
, 1, 0 );
34 ok( res
== 0 && dest
== 1,
35 "Expected 0 and 1, got %ld and %ld", res
, dest
);
38 res
= InterlockedCompareExchange( &dest
, 2, 0 );
39 ok( res
== 1 && dest
== 1,
40 "Expected 1 and 1, got %ld and %ld", res
, dest
);
43 static void test_InterlockedDecrement(void)
48 res
= InterlockedDecrement( &dest
);
49 ok( res
== 0 && dest
== 0,
50 "Expected 0 and 0, got %ld and %ld", res
, dest
);
53 res
= InterlockedDecrement( &dest
);
54 ok( res
== -1 && dest
== -1,
55 "Expected -1 and -1, got %ld and %ld", res
, dest
);
58 res
= InterlockedDecrement( &dest
);
59 ok( res
== -2 && dest
== -2,
60 "Expected -2 and -2, got %ld and %ld", res
, dest
);
63 static void test_InterlockedExchange(void)
68 res
= InterlockedExchange( &dest
, 1 );
69 ok( res
== 0 && dest
== 1,
70 "Expected 0 and 1, got %ld and %ld", res
, dest
);
73 res
= InterlockedExchange( &dest
, 2 );
74 ok( res
== 1 && dest
== 2,
75 "Expected 1 and 2, got %ld and %ld", res
, dest
);
78 res
= InterlockedExchange( &dest
, -1 );
79 ok( res
== 1 && dest
== -1,
80 "Expected 1 and -1, got %ld and %ld", res
, dest
);
83 static void test_InterlockedExchangeAdd(void)
88 res
= InterlockedExchangeAdd( &dest
, 1 );
89 ok( res
== 0 && dest
== 1,
90 "Expected 0 and 1, got %ld and %ld", res
, dest
);
93 res
= InterlockedExchangeAdd( &dest
, 2 );
94 ok( res
== 1 && dest
== 3,
95 "Expected 1 and 3, got %ld and %ld", res
, dest
);
98 res
= InterlockedExchangeAdd( &dest
, -1 );
99 ok( res
== 1 && dest
== 0,
100 "Expected 1 and 0, got %ld and %ld", res
, dest
);
103 static void test_InterlockedIncrement(void)
108 res
= InterlockedIncrement( &dest
);
109 ok( res
== -1 && dest
== -1,
110 "Expected -1 and -1, got %ld and %ld", res
, dest
);
113 res
= InterlockedIncrement( &dest
);
114 ok( res
== 0 && dest
== 0,
115 "Expected 0 and 0, got %ld and %ld", res
, dest
);
118 res
= InterlockedIncrement( &dest
);
119 ok( res
== 1 && dest
== 1,
120 "Expected 1 and 1, got %ld and %ld", res
, dest
);
125 test_InterlockedCompareExchange();
126 test_InterlockedDecrement();
127 test_InterlockedExchange();
128 test_InterlockedExchangeAdd();
129 test_InterlockedIncrement();