Skip to content

Commit 24a79aa

Browse files
author
Alex Peck
committed
stricter
1 parent 67bb85d commit 24a79aa

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

BitFaster.Caching.UnitTests/Atomic/AtomicFactoryTests.cs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@ public void WhenArgObjectValuesAreSameEqualsTrue()
119119
[Fact]
120120
public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
121121
{
122-
var enter = new ManualResetEvent(false);
122+
var enter1 = new ManualResetEvent(false);
123+
var enter2 = new ManualResetEvent(false);
124+
var factory = new ManualResetEvent(false);
123125
var resume = new ManualResetEvent(false);
124126

125127
var atomicFactory = new AtomicFactory<int, int>();
@@ -128,9 +130,10 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
128130

129131
Task<int> first = Task.Run(() =>
130132
{
133+
enter1.Set();
131134
return atomicFactory.GetValue(1, k =>
132135
{
133-
enter.Set();
136+
factory.Set();
134137
resume.WaitOne();
135138

136139
result = 1;
@@ -141,9 +144,10 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
141144

142145
Task<int> second = Task.Run(() =>
143146
{
147+
enter2.Set();
144148
return atomicFactory.GetValue(1, k =>
145149
{
146-
enter.Set();
150+
factory.Set();
147151
resume.WaitOne();
148152

149153
result = 2;
@@ -152,7 +156,9 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
152156
});
153157
});
154158

155-
enter.WaitOne();
159+
enter1.WaitOne();
160+
enter2.WaitOne();
161+
factory.WaitOne();
156162
resume.Set();
157163

158164
(await first).Should().Be(result);
@@ -164,17 +170,20 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
164170
[Fact]
165171
public async Task WhenCallersRunConcurrentlyAndFailExceptionIsPropogated()
166172
{
167-
var enter = new ManualResetEvent(false);
173+
var enter1 = new ManualResetEvent(false);
174+
var enter2 = new ManualResetEvent(false);
175+
var factory = new ManualResetEvent(false);
168176
var resume = new ManualResetEvent(false);
169177

170178
var atomicFactory = new AtomicFactory<int, int>();
171179
var throwCount = 0;
172180

173181
Task<int> first = Task.Run(() =>
174182
{
183+
enter1.Set();
175184
return atomicFactory.GetValue(1, k =>
176185
{
177-
enter.Set();
186+
factory.Set();
178187
resume.WaitOne();
179188

180189
Interlocked.Increment(ref throwCount);
@@ -184,17 +193,20 @@ public async Task WhenCallersRunConcurrentlyAndFailExceptionIsPropogated()
184193

185194
Task<int> second = Task.Run(() =>
186195
{
196+
enter2.Set();
187197
return atomicFactory.GetValue(1, k =>
188198
{
189-
enter.Set();
199+
factory.Set();
190200
resume.WaitOne();
191201

192202
Interlocked.Increment(ref throwCount);
193203
throw new Exception();
194204
});
195205
});
196206

197-
enter.WaitOne();
207+
enter1.WaitOne();
208+
enter2.WaitOne();
209+
factory.WaitOne();
198210
resume.Set();
199211

200212
Func<Task> act1 = () => first;
@@ -210,32 +222,38 @@ public async Task WhenCallersRunConcurrentlyAndFailExceptionIsPropogated()
210222
[Fact]
211223
public async Task WhenCallersRunConcurrentlyAndFailNewCallerStartsClean()
212224
{
213-
var enter = new ManualResetEvent(false);
225+
var enter1 = new ManualResetEvent(false);
226+
var enter2 = new ManualResetEvent(false);
227+
var factory = new ManualResetEvent(false);
214228
var resume = new ManualResetEvent(false);
215229

216230
var atomicFactory = new AtomicFactory<int, int>();
217231

218232
Task<int> first = Task.Run(() =>
219233
{
234+
enter1.Set();
220235
return atomicFactory.GetValue(1, k =>
221236
{
222-
enter.Set();
237+
factory.Set();
223238
resume.WaitOne();
224239
throw new Exception();
225240
});
226241
});
227242

228243
Task<int> second = Task.Run(() =>
229244
{
245+
enter2.Set();
230246
return atomicFactory.GetValue(1, k =>
231247
{
232-
enter.Set();
248+
factory.Set();
233249
resume.WaitOne();
234250
throw new Exception();
235251
});
236252
});
237253

238-
enter.WaitOne();
254+
enter1.WaitOne();
255+
enter2.WaitOne();
256+
factory.WaitOne();
239257
resume.Set();
240258

241259
Func<Task> act1 = () => first;

0 commit comments

Comments
 (0)