Skip to content

Commit 9a5e655

Browse files
authored
atomicfactory (#154)
1 parent f4ff573 commit 9a5e655

File tree

8 files changed

+55
-55
lines changed

8 files changed

+55
-55
lines changed

BitFaster.Caching.UnitTests/Synchronized/AsyncIdempotentTests.cs renamed to BitFaster.Caching.UnitTests/Synchronized/AsyncAtomicFactoryTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
namespace BitFaster.Caching.UnitTests.Synchronized
1212
{
13-
public class AsyncIdempotentTests
13+
public class AsyncAtomicFactoryTests
1414
{
1515
[Fact]
1616
public void DefaultCtorValueIsNotCreated()
1717
{
18-
var a = new AsyncIdempotent<int, int>();
18+
var a = new AsyncAtomicFactory<int, int>();
1919

2020
a.IsValueCreated.Should().BeFalse();
2121
a.ValueIfCreated.Should().Be(0);
@@ -24,7 +24,7 @@ public void DefaultCtorValueIsNotCreated()
2424
[Fact]
2525
public void WhenValuePassedToCtorValueIsStored()
2626
{
27-
var a = new AsyncIdempotent<int, int>(1);
27+
var a = new AsyncAtomicFactory<int, int>(1);
2828

2929
a.ValueIfCreated.Should().Be(1);
3030
a.IsValueCreated.Should().BeTrue();
@@ -33,7 +33,7 @@ public void WhenValuePassedToCtorValueIsStored()
3333
[Fact]
3434
public async Task WhenValueCreatedValueReturned()
3535
{
36-
var a = new AsyncIdempotent<int, int>();
36+
var a = new AsyncAtomicFactory<int, int>();
3737
(await a.GetValueAsync(1, k => Task.FromResult(2))).Should().Be(2);
3838

3939
a.ValueIfCreated.Should().Be(2);
@@ -43,15 +43,15 @@ public async Task WhenValueCreatedValueReturned()
4343
[Fact]
4444
public async Task WhenValueCreatedGetValueReturnsOriginalValue()
4545
{
46-
var a = new AsyncIdempotent<int, int>();
46+
var a = new AsyncAtomicFactory<int, int>();
4747
await a.GetValueAsync(1, k => Task.FromResult(2));
4848
(await a.GetValueAsync(1, k => Task.FromResult(3))).Should().Be(2);
4949
}
5050

5151
[Fact]
5252
public async Task WhenValueCreateThrowsValueIsNotStored()
5353
{
54-
var a = new AsyncIdempotent<int, int>();
54+
var a = new AsyncAtomicFactory<int, int>();
5555

5656
Func<Task> getOrAdd = async () => { await a.GetValueAsync(1, k => throw new ArithmeticException()); };
5757

@@ -66,11 +66,11 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
6666
var enter = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
6767
var resume = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
6868

69-
var idempotent = new AsyncIdempotent<int, int>();
69+
var atomicFactory = new AsyncAtomicFactory<int, int>();
7070
var result = 0;
7171
var winnerCount = 0;
7272

73-
Task<int> first = idempotent.GetValueAsync(1, async k =>
73+
Task<int> first = atomicFactory.GetValueAsync(1, async k =>
7474
{
7575
enter.SetResult(true);
7676
await resume.Task;
@@ -80,7 +80,7 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
8080
return 1;
8181
});
8282

83-
Task<int> second = idempotent.GetValueAsync(1, async k =>
83+
Task<int> second = atomicFactory.GetValueAsync(1, async k =>
8484
{
8585
enter.SetResult(true);
8686
await resume.Task;

BitFaster.Caching.UnitTests/Synchronized/IdempotentTests.cs renamed to BitFaster.Caching.UnitTests/Synchronized/AtomicFactoryTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
namespace BitFaster.Caching.UnitTests.Synchronized
1212
{
13-
public class IdempotentTests
13+
public class AtomicFactoryTests
1414
{
1515
[Fact]
1616
public void DefaultCtorValueIsNotCreated()
1717
{
18-
var a = new Idempotent<int, int>();
18+
var a = new AtomicFactory<int, int>();
1919

2020
a.IsValueCreated.Should().BeFalse();
2121
a.ValueIfCreated.Should().Be(0);
@@ -24,7 +24,7 @@ public void DefaultCtorValueIsNotCreated()
2424
[Fact]
2525
public void WhenValuePassedToCtorValueIsStored()
2626
{
27-
var a = new Idempotent<int, int>(1);
27+
var a = new AtomicFactory<int, int>(1);
2828

2929
a.ValueIfCreated.Should().Be(1);
3030
a.IsValueCreated.Should().BeTrue();
@@ -33,7 +33,7 @@ public void WhenValuePassedToCtorValueIsStored()
3333
[Fact]
3434
public void WhenValueCreatedValueReturned()
3535
{
36-
var a = new Idempotent<int, int>();
36+
var a = new AtomicFactory<int, int>();
3737
a.GetValue(1, k => 2).Should().Be(2);
3838

3939
a.ValueIfCreated.Should().Be(2);
@@ -43,7 +43,7 @@ public void WhenValueCreatedValueReturned()
4343
[Fact]
4444
public void WhenValueCreatedGetValueReturnsOriginalValue()
4545
{
46-
var a = new Idempotent<int, int>();
46+
var a = new AtomicFactory<int, int>();
4747
a.GetValue(1, k => 2);
4848
a.GetValue(1, k => 3).Should().Be(2);
4949
}
@@ -54,13 +54,13 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
5454
var enter = new ManualResetEvent(false);
5555
var resume = new ManualResetEvent(false);
5656

57-
var idempotent = new Idempotent<int, int>();
57+
var atomicFactory = new AtomicFactory<int, int>();
5858
var result = 0;
5959
var winnerCount = 0;
6060

6161
Task<int> first = Task.Run(() =>
6262
{
63-
return idempotent.GetValue(1, k =>
63+
return atomicFactory.GetValue(1, k =>
6464
{
6565
enter.Set();
6666
resume.WaitOne();
@@ -73,7 +73,7 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
7373

7474
Task<int> second = Task.Run(() =>
7575
{
76-
return idempotent.GetValue(1, k =>
76+
return atomicFactory.GetValue(1, k =>
7777
{
7878
enter.Set();
7979
resume.WaitOne();

BitFaster.Caching.UnitTests/Synchronized/ScopedAsyncIdempotentTests.cs renamed to BitFaster.Caching.UnitTests/Synchronized/ScopedAsyncAtomicFactoryTests.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
namespace BitFaster.Caching.UnitTests.Synchronized
1212
{
13-
public class ScopedAsyncIdempotentTests
13+
public class ScopedAsyncAtomicFactoryTests
1414
{
1515
[Fact]
1616
public async Task WhenCreateFromValueLifetimeContainsValue()
1717
{
18-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>(new IntHolder() { actualNumber = 1 });
18+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>(new IntHolder() { actualNumber = 1 });
1919

20-
(bool r, Lifetime<IntHolder> l) result = await idempotent.TryCreateLifetimeAsync(1, k =>
20+
(bool r, Lifetime<IntHolder> l) result = await atomicFactory.TryCreateLifetimeAsync(1, k =>
2121
{
2222
return Task.FromResult(new IntHolder() { actualNumber = 2 });
2323
});
@@ -29,10 +29,10 @@ public async Task WhenCreateFromValueLifetimeContainsValue()
2929
[Fact]
3030
public async Task WhenScopeIsDisposedTryCreateReturnsFalse()
3131
{
32-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>(new IntHolder() { actualNumber = 1 });
33-
idempotent.Dispose();
32+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>(new IntHolder() { actualNumber = 1 });
33+
atomicFactory.Dispose();
3434

35-
(bool r, Lifetime<IntHolder> l) result = await idempotent.TryCreateLifetimeAsync(1, k =>
35+
(bool r, Lifetime<IntHolder> l) result = await atomicFactory.TryCreateLifetimeAsync(1, k =>
3636
{
3737
return Task.FromResult(new IntHolder() { actualNumber = 2 });
3838
});
@@ -45,9 +45,9 @@ public async Task WhenScopeIsDisposedTryCreateReturnsFalse()
4545
public void WhenValueIsCreatedDisposeDisposesValue()
4646
{
4747
var holder = new IntHolder() { actualNumber = 2 };
48-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>(holder);
48+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>(holder);
4949

50-
idempotent.Dispose();
50+
atomicFactory.Dispose();
5151

5252
holder.disposed.Should().BeTrue();
5353
}
@@ -58,11 +58,11 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
5858
var enter = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
5959
var resume = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
6060

61-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>();
61+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>();
6262
var winningNumber = 0;
6363
var winnerCount = 0;
6464

65-
Task<(bool r, Lifetime<IntHolder> l)> first = idempotent.TryCreateLifetimeAsync(1, async k =>
65+
Task<(bool r, Lifetime<IntHolder> l)> first = atomicFactory.TryCreateLifetimeAsync(1, async k =>
6666
{
6767
enter.SetResult(true);
6868
await resume.Task;
@@ -72,7 +72,7 @@ public async Task WhenCallersRunConcurrentlyResultIsFromWinner()
7272
return new IntHolder() { actualNumber = 1 };
7373
});
7474

75-
Task<(bool r, Lifetime<IntHolder> l)> second = idempotent.TryCreateLifetimeAsync(1, async k =>
75+
Task<(bool r, Lifetime<IntHolder> l)> second = atomicFactory.TryCreateLifetimeAsync(1, async k =>
7676
{
7777
enter.SetResult(true);
7878
await resume.Task;
@@ -103,10 +103,10 @@ public async Task WhenDisposedWhileInitResultIsDisposed()
103103
var enter = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
104104
var resume = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
105105

106-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>();
106+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>();
107107
var holder = new IntHolder() { actualNumber = 1 };
108108

109-
Task<(bool r, Lifetime<IntHolder> l)> first = idempotent.TryCreateLifetimeAsync(1, async k =>
109+
Task<(bool r, Lifetime<IntHolder> l)> first = atomicFactory.TryCreateLifetimeAsync(1, async k =>
110110
{
111111
enter.SetResult(true);
112112
await resume.Task;
@@ -115,7 +115,7 @@ public async Task WhenDisposedWhileInitResultIsDisposed()
115115
});
116116

117117
await enter.Task;
118-
idempotent.Dispose();
118+
atomicFactory.Dispose();
119119
resume.SetResult(true);
120120

121121
var result = await first;
@@ -132,10 +132,10 @@ public async Task WhenDisposedWhileThrowingNextInitIsDisposed()
132132
var enter = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
133133
var resume = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
134134

135-
var idempotent = new ScopedAsyncIdempotent<int, IntHolder>();
135+
var atomicFactory = new ScopedAsyncAtomicFactory<int, IntHolder>();
136136
var holder = new IntHolder() { actualNumber = 1 };
137137

138-
Task<(bool r, Lifetime<IntHolder> l)> first = idempotent.TryCreateLifetimeAsync(1, async k =>
138+
Task<(bool r, Lifetime<IntHolder> l)> first = atomicFactory.TryCreateLifetimeAsync(1, async k =>
139139
{
140140
enter.SetResult(true);
141141
await resume.Task;
@@ -144,7 +144,7 @@ public async Task WhenDisposedWhileThrowingNextInitIsDisposed()
144144
});
145145

146146
await enter.Task;
147-
idempotent.Dispose();
147+
atomicFactory.Dispose();
148148
resume.SetResult(true);
149149

150150
// At this point, the scoped value is not created but the initializer is marked
@@ -154,7 +154,7 @@ public async Task WhenDisposedWhileThrowingNextInitIsDisposed()
154154
Func<Task> tryCreateAsync = async () => { await first; };
155155
await tryCreateAsync.Should().ThrowAsync<InvalidOperationException>();
156156

157-
(bool r, Lifetime<IntHolder> l) result = await idempotent.TryCreateLifetimeAsync(1, k =>
157+
(bool r, Lifetime<IntHolder> l) result = await atomicFactory.TryCreateLifetimeAsync(1, k =>
158158
{
159159
return Task.FromResult(holder);
160160
});

BitFaster.Caching.UnitTests/Synchronized/ScopedIdempotentTests.cs renamed to BitFaster.Caching.UnitTests/Synchronized/ScopedAtomicFactoryTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
namespace BitFaster.Caching.UnitTests.Synchronized
1111
{
12-
public class ScopedIdempotentTests
12+
public class ScopedAtomicFactoryTests
1313
{
1414
[Fact]
1515
public void WhenInitializedWithValueTryCreateLifetimeCreatesLifetimeWithValue()
1616
{
1717
var expectedDisposable = new Disposable();
18-
var sa = new ScopedIdempotent<int, Disposable>(expectedDisposable);
18+
var sa = new ScopedAtomicFactory<int, Disposable>(expectedDisposable);
1919

2020
sa.TryCreateLifetime(1, k => new Disposable(), out var lifetime).Should().BeTrue();
2121

@@ -26,7 +26,7 @@ public void WhenInitializedWithValueTryCreateLifetimeCreatesLifetimeWithValue()
2626
public void WhenInitializedWithFactoryTryCreateLifetimeCreatesLifetimeWithValue()
2727
{
2828
var expectedDisposable = new Disposable();
29-
var sa = new ScopedIdempotent<int, Disposable>();
29+
var sa = new ScopedAtomicFactory<int, Disposable>();
3030

3131
sa.TryCreateLifetime(1, k => expectedDisposable, out var lifetime).Should().BeTrue();
3232

@@ -37,7 +37,7 @@ public void WhenInitializedWithFactoryTryCreateLifetimeCreatesLifetimeWithValue(
3737
public void WhenInitializedWithFactoryValueIsCached()
3838
{
3939
var expectedDisposable = new Disposable();
40-
var sa = new ScopedIdempotent<int, Disposable>();
40+
var sa = new ScopedAtomicFactory<int, Disposable>();
4141

4242
sa.TryCreateLifetime(1, k => expectedDisposable, out var lifetime1).Should().BeTrue();
4343
sa.TryCreateLifetime(1, k => new Disposable(), out var lifetime2).Should().BeTrue();
@@ -48,7 +48,7 @@ public void WhenInitializedWithFactoryValueIsCached()
4848
[Fact]
4949
public void WhenInitializedWithValueThenDisposedCreateLifetimeIsFalse()
5050
{
51-
var sa = new ScopedIdempotent<int, Disposable>(new Disposable());
51+
var sa = new ScopedAtomicFactory<int, Disposable>(new Disposable());
5252
sa.Dispose();
5353

5454
sa.TryCreateLifetime(1, k => new Disposable(), out var l).Should().BeFalse();
@@ -57,7 +57,7 @@ public void WhenInitializedWithValueThenDisposedCreateLifetimeIsFalse()
5757
[Fact]
5858
public void WhenCreatedThenDisposedCreateLifetimeIsFalse()
5959
{
60-
var sa = new ScopedIdempotent<int, Disposable>();
60+
var sa = new ScopedAtomicFactory<int, Disposable>();
6161
sa.Dispose();
6262

6363
sa.TryCreateLifetime(1, k => new Disposable(), out var l).Should().BeFalse();
@@ -67,7 +67,7 @@ public void WhenCreatedThenDisposedCreateLifetimeIsFalse()
6767
public void WhenInitializedLifetimeKeepsValueAlive()
6868
{
6969
var disposable = new Disposable();
70-
var sa = new ScopedIdempotent<int, Disposable>();
70+
var sa = new ScopedAtomicFactory<int, Disposable>();
7171

7272
sa.TryCreateLifetime(1, k => disposable, out var lifetime1).Should().BeTrue();
7373
sa.TryCreateLifetime(1, k => null, out var lifetime2).Should().BeTrue();

BitFaster.Caching/Synchronized/AsyncIdempotent.cs renamed to BitFaster.Caching/Synchronized/AsyncAtomicFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99
namespace BitFaster.Caching.Synchronized
1010
{
1111
[DebuggerDisplay("IsValueCreated={IsValueCreated}, Value={ValueIfCreated}")]
12-
public class AsyncIdempotent<K, V>
12+
public class AsyncAtomicFactory<K, V>
1313
{
1414
private Initializer initializer;
1515

1616
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
1717
private V value;
1818

19-
public AsyncIdempotent()
19+
public AsyncAtomicFactory()
2020
{
2121
initializer = new Initializer();
2222
}
2323

24-
public AsyncIdempotent(V value)
24+
public AsyncAtomicFactory(V value)
2525
{
2626
this.value = value;
2727
}

BitFaster.Caching/Synchronized/Idempotent.cs renamed to BitFaster.Caching/Synchronized/AtomicFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99
namespace BitFaster.Caching.Synchronized
1010
{
1111
[DebuggerDisplay("IsValueCreated={IsValueCreated}, Value={ValueIfCreated}")]
12-
public class Idempotent<K, V>
12+
public class AtomicFactory<K, V>
1313
{
1414
private Initializer initializer;
1515

1616
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
1717
private V value;
1818

19-
public Idempotent()
19+
public AtomicFactory()
2020
{
2121
initializer = new Initializer();
2222
}
2323

24-
public Idempotent(V value)
24+
public AtomicFactory(V value)
2525
{
2626
this.value = value;
2727
}

BitFaster.Caching/Synchronized/ScopedAsyncIdempotent.cs renamed to BitFaster.Caching/Synchronized/ScopedAsyncAtomicFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77

88
namespace BitFaster.Caching.Synchronized
99
{
10-
public class ScopedAsyncIdempotent<K, V> : IScoped<V>, IDisposable where V : IDisposable
10+
public class ScopedAsyncAtomicFactory<K, V> : IScoped<V>, IDisposable where V : IDisposable
1111
{
1212
private Scoped<V> scope;
1313
private Initializer initializer;
1414

15-
public ScopedAsyncIdempotent()
15+
public ScopedAsyncAtomicFactory()
1616
{
1717
initializer = new Initializer();
1818
}
1919

20-
public ScopedAsyncIdempotent(V value)
20+
public ScopedAsyncAtomicFactory(V value)
2121
{
2222
scope = new Scoped<V>(value);
2323
}

0 commit comments

Comments
 (0)