Dreamine.FullKit.Tests 1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
로딩중...
검색중...
일치하는것 없음
HybridStateStoreTests.cs
이 파일의 문서화 페이지로 가기
1using Dreamine.Hybrid.State;
2using System.Threading;
3
5
14public sealed class HybridStateStoreTests
15{
24 [Fact]
26 {
27 var store = new HybridStateStore<int>(0);
28 var received = new List<int>();
29 store.StateChanged += (_, e) => received.Add(e.State);
30
31 store.SetState(1);
32 store.SetState(2);
33
34 Assert.Equal(2, store.State);
35 Assert.Equal(new[] { 1, 2 }, received);
36 }
37
46 [Fact]
48 {
49 var store = new HybridStateStore<int>(10);
50 var received = new List<int>();
51 store.StateChanged += (_, e) => received.Add(e.State);
52
53 store.Update(x => x + 5);
54
55 Assert.Equal(15, store.State);
56 Assert.Single(received);
57 Assert.Equal(15, received[0]);
58 }
59
68 [Fact]
70 {
71 var store = new HybridStateStore<int>(0);
72 var count = 0;
73 var sub = store.Subscribe((_, _) => count++);
74
75 store.SetState(1);
76 sub.Dispose();
77 store.SetState(2);
78
79 Assert.Equal(1, count);
80 }
81
90 [Fact]
92 {
93 var store = new HybridStateStore<int>(0);
94 var count = 0;
95 var sub = store.Subscribe((_, _) => count++);
96
97 sub.Dispose();
98 sub.Dispose(); // second dispose must not throw or re-unsubscribe
99
100 store.SetState(1);
101 Assert.Equal(0, count);
102 }
103
120 [Fact]
122 {
123 const int iterations = 200;
124 var store = new HybridStateStore<int>(0);
125 var eventCount = 0;
126
127 store.StateChanged += (_, _) => Interlocked.Increment(ref eventCount);
128
129 var tasks = Enumerable.Range(1, iterations)
130 .Select(i => Task.Run(() => store.SetState(i)));
131
132 await Task.WhenAll(tasks);
133
134 // Every SetState must fire exactly one event — no event may be lost.
135 Assert.Equal(iterations, eventCount);
136 }
137
154 [Fact]
156 {
157 var store = new HybridStateStore<int>(0);
158
159 var tasks = Enumerable.Range(0, 100)
160 .Select(_ => Task.Run(() => store.Update(x => x + 1)));
161
162 await Task.WhenAll(tasks);
163
164 Assert.Equal(100, store.State);
165 }
166}