|
1 | 1 | import org.junit.Test;
|
2 | 2 |
|
3 |
| -import java.util.Map; |
4 | 3 | import java.util.concurrent.locks.ReadWriteLock;
|
5 | 4 | import java.util.concurrent.locks.ReentrantReadWriteLock;
|
| 5 | +import java.util.function.Function; |
| 6 | +import java.util.stream.Collectors; |
| 7 | +import java.util.stream.Stream; |
6 | 8 |
|
7 | 9 | import static org.hamcrest.CoreMatchers.is;
|
8 | 10 | import static org.hamcrest.MatcherAssert.assertThat;
|
|
11 | 13 | * Created by mtumilowicz on 2019-01-25.
|
12 | 14 | */
|
13 | 15 | public class UserMapConcurrencyTest {
|
14 |
| - |
15 |
| - private Map<Integer, User> userMap = Map.of( |
16 |
| - 1, new User(1, 40), |
17 |
| - 2, new User(2, 33) |
18 |
| - ); |
19 |
| - |
20 | 16 | @Test
|
21 | 17 | public void write_transfer() {
|
| 18 | + var userMap = Stream.of( |
| 19 | + new User(1, 40), |
| 20 | + new User(2, 33) |
| 21 | + ).collect(Collectors.toMap(User::getId, Function.identity())); |
| 22 | + |
22 | 23 | ReadWriteLock lock = new ReentrantReadWriteLock();
|
23 | 24 | LockExecutor executor = new LockExecutor(lock);
|
24 | 25 |
|
25 |
| - var transferred = executor.write(() -> { |
| 26 | + executor.write(() -> { |
26 | 27 | var transfer = PositiveInt.of(15);
|
27 |
| - return Map.of(1, userMap.get(1).outcome(transfer), |
28 |
| - 2, userMap.get(2).income(transfer)); |
| 28 | + userMap.replace(1, userMap.get(1).outcome(transfer)); |
| 29 | + userMap.replace(2, userMap.get(2).income(transfer)); |
| 30 | + |
| 31 | + return Void.class; |
29 | 32 | });
|
30 | 33 |
|
31 |
| - assertThat(transferred.get(1).getBalance(), is(25)); |
32 |
| - assertThat(transferred.get(2).getBalance(), is(48)); |
| 34 | + assertThat(userMap.get(1).getBalance(), is(25)); |
| 35 | + assertThat(userMap.get(2).getBalance(), is(48)); |
33 | 36 | }
|
34 | 37 |
|
35 | 38 | @Test
|
36 | 39 | public void read_sum_balance() {
|
| 40 | + var userMap = Stream.of( |
| 41 | + new User(1, 40), |
| 42 | + new User(2, 33) |
| 43 | + ).collect(Collectors.toMap(User::getId, Function.identity())); |
| 44 | + |
37 | 45 | ReadWriteLock lock = new ReentrantReadWriteLock();
|
38 | 46 | LockExecutor executor = new LockExecutor(lock);
|
39 | 47 |
|
|
0 commit comments