@@ -23,8 +23,8 @@ import org.junit.Assert.assertTrue
2323import org.junit.Test
2424import org.junit.runner.RunWith
2525import org.junit.runners.Parameterized
26- import java.util.concurrent.ConcurrentHashMap
2726import java.util.concurrent.atomic.AtomicInteger
27+ import java.util.concurrent.atomic.AtomicIntegerArray
2828
2929@RunWith(Parameterized ::class )
3030class ChannelSendReceiveStressTest (
@@ -50,7 +50,8 @@ class ChannelSendReceiveStressTest(
5050 val sendersCompleted = AtomicInteger ()
5151 val receiversCompleted = AtomicInteger ()
5252 val dupes = AtomicInteger ()
53- val received = ConcurrentHashMap <Int ,Int >()
53+ val received = AtomicIntegerArray (nEvents)
54+ val receivedTotal = AtomicInteger ()
5455 val receivedBy = IntArray (nReceivers)
5556
5657 @Test
@@ -89,15 +90,15 @@ class ChannelSendReceiveStressTest(
8990 println (" Tested $kind with nSenders=$nSenders , nReceivers=$nReceivers " )
9091 println (" Completed successfully ${sendersCompleted.get()} sender coroutines" )
9192 println (" Completed successfully ${receiversCompleted.get()} receiver coroutines" )
92- println (" Received ${received.size } events" )
93+ println (" Received ${receivedTotal.get() } events" )
9394 println (" Received dupes ${dupes.get()} " )
9495 repeat(nReceivers) { receiveIndex ->
9596 println (" Received by #$receiveIndex ${receivedBy[receiveIndex]} " )
9697 }
9798 assertEquals(nSenders, sendersCompleted.get())
9899 assertEquals(nReceivers, receiversCompleted.get())
99100 assertEquals(0 , dupes.get())
100- assertEquals(nEvents, received.size )
101+ assertEquals(nEvents, receivedTotal.get() )
101102 repeat(nReceivers) { receiveIndex ->
102103 assertTrue(" Each receiver should have received something" , receivedBy[receiveIndex] > 0 )
103104 }
@@ -114,10 +115,11 @@ class ChannelSendReceiveStressTest(
114115 }
115116
116117 private fun doReceived (receiverIndex : Int , event : Int ) {
117- if (received.put (event, event) != null ) {
118+ if (! received.compareAndSet (event, 0 , 1 ) ) {
118119 println (" Duplicate event $event at $receiverIndex " )
119120 dupes.incrementAndGet()
120121 }
122+ receivedTotal.incrementAndGet()
121123 receivedBy[receiverIndex]++
122124 }
123125
0 commit comments