@@ -23,8 +23,8 @@ import org.junit.Assert.assertTrue
23
23
import org.junit.Test
24
24
import org.junit.runner.RunWith
25
25
import org.junit.runners.Parameterized
26
- import java.util.concurrent.ConcurrentHashMap
27
26
import java.util.concurrent.atomic.AtomicInteger
27
+ import java.util.concurrent.atomic.AtomicIntegerArray
28
28
29
29
@RunWith(Parameterized ::class )
30
30
class ChannelSendReceiveStressTest (
@@ -50,7 +50,8 @@ class ChannelSendReceiveStressTest(
50
50
val sendersCompleted = AtomicInteger ()
51
51
val receiversCompleted = AtomicInteger ()
52
52
val dupes = AtomicInteger ()
53
- val received = ConcurrentHashMap <Int ,Int >()
53
+ val received = AtomicIntegerArray (nEvents)
54
+ val receivedTotal = AtomicInteger ()
54
55
val receivedBy = IntArray (nReceivers)
55
56
56
57
@Test
@@ -89,15 +90,15 @@ class ChannelSendReceiveStressTest(
89
90
println (" Tested $kind with nSenders=$nSenders , nReceivers=$nReceivers " )
90
91
println (" Completed successfully ${sendersCompleted.get()} sender coroutines" )
91
92
println (" Completed successfully ${receiversCompleted.get()} receiver coroutines" )
92
- println (" Received ${received.size } events" )
93
+ println (" Received ${receivedTotal.get() } events" )
93
94
println (" Received dupes ${dupes.get()} " )
94
95
repeat(nReceivers) { receiveIndex ->
95
96
println (" Received by #$receiveIndex ${receivedBy[receiveIndex]} " )
96
97
}
97
98
assertEquals(nSenders, sendersCompleted.get())
98
99
assertEquals(nReceivers, receiversCompleted.get())
99
100
assertEquals(0 , dupes.get())
100
- assertEquals(nEvents, received.size )
101
+ assertEquals(nEvents, receivedTotal.get() )
101
102
repeat(nReceivers) { receiveIndex ->
102
103
assertTrue(" Each receiver should have received something" , receivedBy[receiveIndex] > 0 )
103
104
}
@@ -114,10 +115,11 @@ class ChannelSendReceiveStressTest(
114
115
}
115
116
116
117
private fun doReceived (receiverIndex : Int , event : Int ) {
117
- if (received.put (event, event) != null ) {
118
+ if (! received.compareAndSet (event, 0 , 1 ) ) {
118
119
println (" Duplicate event $event at $receiverIndex " )
119
120
dupes.incrementAndGet()
120
121
}
122
+ receivedTotal.incrementAndGet()
121
123
receivedBy[receiverIndex]++
122
124
}
123
125
0 commit comments