-
Notifications
You must be signed in to change notification settings - Fork 0
/
UseCases_Scenarios.java
41 lines (34 loc) · 1.24 KB
/
UseCases_Scenarios.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package pl.amazingcode.threadscollider.multi;
import static org.assertj.core.api.BDDAssertions.then;
import static pl.amazingcode.threadscollider.ThreadsCollider.ThreadsColliderBuilder.threadsCollider;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.RepeatedTest;
import pl.amazingcode.threadscollider.Processors;
import pl.amazingcode.threadscollider.ThreadsCollider;
import pl.amazingcode.threadscollider.fixtures.Counter;
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
final class UseCases_Scenarios {
@RepeatedTest(10)
void Thread_safe_counter() {
// Given
Counter counter = new Counter();
List<Exception> exceptions = new ArrayList<>();
// When
try (ThreadsCollider threadsCollider =
threadsCollider()
.withAction(counter::increment)
.times(Processors.HALF)
.withAction(counter::decrement)
.times(Processors.HALF)
.withThreadsExceptionsConsumer(exceptions::add)
.build()) {
threadsCollider.collide();
}
// Then
then(counter.value()).isZero();
then(exceptions).isEmpty();
}
}