Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d0767b

Browse files
author
Olivier Deheurles
committed
volatile long array added
1 parent 3efa936 commit 3d0767b

File tree

5 files changed

+356
-7
lines changed

5 files changed

+356
-7
lines changed

Atomic.Tests/Atomic.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
<Reference Include="System.Xml" />
4545
</ItemGroup>
4646
<ItemGroup>
47+
<Compile Include="Support\ClassStub.cs" />
48+
<Compile Include="VolatileLongArrayTests.cs" />
4749
<Compile Include="VolatileIntegerArrayTests.cs" />
4850
<Compile Include="VolatileBooleanTests.cs" />
4951
<Compile Include="VolatileLongTests.cs" />

Atomic.Tests/Support/ClassStub.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace Atomic.Tests.Support
2+
{
3+
public class ClassStub{}
4+
}
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
using System.Threading;
2+
using NUnit.Framework;
3+
4+
namespace Atomic.Tests
5+
{
6+
[TestFixture]
7+
public class VolatileLongArrayTests
8+
{
9+
private Volatile.LongArray _volatile;
10+
private static readonly long[] InitialValues = new[] {0L, 1L, 2L, 3L};
11+
private const long InitialValue = 0L;
12+
private const long NewValue = 1L;
13+
14+
[SetUp]
15+
public void SetUp()
16+
{
17+
_volatile = new Volatile.LongArray(InitialValues);
18+
}
19+
20+
[Test]
21+
public void ConstructorWithLengthSetExpectedLength()
22+
{
23+
const int length = 2;
24+
_volatile = new Volatile.LongArray(length);
25+
26+
Assert.AreEqual(length, _volatile.Length);
27+
}
28+
29+
[Test]
30+
public void ConstructorWithArraySetExpectedLength()
31+
{
32+
Assert.AreEqual(InitialValues.Length, _volatile.Length);
33+
}
34+
35+
[Test]
36+
public void ReadFullFenceReturnsInitialValue()
37+
{
38+
Assert.AreEqual(InitialValue, _volatile.ReadFullFence(0));
39+
}
40+
41+
[Test]
42+
public void ReadCompilerOnlyFenceReturnsInitialValue()
43+
{
44+
Assert.AreEqual(InitialValue, _volatile.ReadCompilerOnlyFence(0));
45+
}
46+
47+
[Test]
48+
public void ReadUnfencedReturnsInitialValue()
49+
{
50+
Assert.AreEqual(InitialValue, _volatile.ReadUnfenced(0));
51+
}
52+
53+
[Test]
54+
public void WriteReleaseFenceChangesInitialValue()
55+
{
56+
_volatile.WriteReleaseFence(0, NewValue);
57+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
58+
}
59+
60+
[Test]
61+
public void WriteFullFenceChangesInitialValue()
62+
{
63+
_volatile.WriteFullFence(0, NewValue);
64+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
65+
}
66+
67+
[Test]
68+
public void WriteCompilerOnlyFenceChangesInitialValue()
69+
{
70+
_volatile.WriteCompilerOnlyFence(0, NewValue);
71+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
72+
}
73+
74+
[Test]
75+
public void WriteUnfencedInitialValue()
76+
{
77+
_volatile.WriteUnfenced(0, NewValue);
78+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
79+
}
80+
81+
[Test]
82+
public void AtomicCompareExchangeReturnsTrueIfComparandEqualsCurrentValue()
83+
{
84+
Assert.IsTrue(_volatile.AtomicCompareExchange(0, NewValue, InitialValue));
85+
}
86+
87+
[Test]
88+
public void AtomicCompareExchangeMutatesValueIfComparandEqualsCurrentValue()
89+
{
90+
_volatile.AtomicCompareExchange(0, NewValue, InitialValue);
91+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
92+
}
93+
94+
[Test]
95+
public void AtomicCompareExchangeReturnsFalseIfComparandDifferentFromCurrentValue()
96+
{
97+
Assert.IsFalse(_volatile.AtomicCompareExchange(0, NewValue, InitialValue + 1));
98+
}
99+
100+
[Test]
101+
public void AtomicExchangeReturnsInitialValue()
102+
{
103+
Assert.AreEqual(InitialValue, _volatile.AtomicExchange(0, NewValue));
104+
}
105+
106+
[Test]
107+
public void AtomicExchangeMutatesValue()
108+
{
109+
_volatile.AtomicExchange(0, NewValue);
110+
Assert.AreEqual(NewValue, _volatile.ReadUnfenced(0));
111+
}
112+
113+
[Test]
114+
public void AtomicAddAndGetReturnsNewValue()
115+
{
116+
const int delta = 5;
117+
Assert.AreEqual(InitialValue + delta, _volatile.AtomicAddAndGet(0, delta));
118+
}
119+
120+
[Test]
121+
public void AtomicAddAndGetMutatesValue()
122+
{
123+
const int delta = 5;
124+
_volatile.AtomicAddAndGet(0, delta);
125+
Assert.AreEqual(InitialValue + delta, _volatile.ReadUnfenced(0));
126+
}
127+
128+
[Test]
129+
public void AtomicIncrementAndGetReturnsNewValue()
130+
{
131+
Assert.AreEqual(InitialValue + 1, _volatile.AtomicIncrementAndGet(0));
132+
}
133+
134+
[Test]
135+
public void AtomicIncrementAndGetMutatesValue()
136+
{
137+
_volatile.AtomicIncrementAndGet(0);
138+
Assert.AreEqual(InitialValue + 1, _volatile.ReadUnfenced(0));
139+
}
140+
141+
[Test]
142+
public void AtomicDecrementAndGetReturnsNewValue()
143+
{
144+
Assert.AreEqual(InitialValue - 1, _volatile.AtomicDecrementAndGet(0));
145+
}
146+
147+
[Test]
148+
public void AtomicDecrementAndGetMutatesValue()
149+
{
150+
_volatile.AtomicDecrementAndGet(0);
151+
Assert.AreEqual(InitialValue - 1, _volatile.ReadUnfenced(0));
152+
}
153+
}
154+
}

Atomic.Tests/VolatileReferenceTests.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
using System.Threading;
2+
using Atomic.Tests.Support;
23
using NUnit.Framework;
34

45
namespace Atomic.Tests
56
{
67
[TestFixture]
78
public class VolatileReferenceTests
89
{
9-
private Volatile.Reference<RefStub> _volatile;
10-
private readonly RefStub _initialValue = new RefStub();
11-
private readonly RefStub _newValue = new RefStub();
10+
private Volatile.Reference<ClassStub> _volatile;
11+
private readonly ClassStub _initialValue = new ClassStub();
12+
private readonly ClassStub _newValue = new ClassStub();
1213

1314
[SetUp]
1415
public void SetUp()
1516
{
16-
_volatile = new Volatile.Reference<RefStub>(_initialValue);
17+
_volatile = new Volatile.Reference<ClassStub>(_initialValue);
1718
}
1819

1920
[Test]
@@ -106,6 +107,4 @@ public void ToStringReturnsInitialValueAsString()
106107
Assert.AreEqual(_initialValue.ToString(), _volatile.ToString());
107108
}
108109
}
109-
110-
public class RefStub{}
111110
}

0 commit comments

Comments
 (0)