test[protocol]: map test

This commit is contained in:
godotg
2023-09-10 17:19:57 +08:00
parent 610489766c
commit 98854ea38e
@@ -66,147 +66,156 @@ public class ConcurrentTesting {
Assert.assertTrue(map.isEmpty());
}
public static final int num = 100_0000;
public static final int maxCount = 10;
@Test
public void concurrentPrimitiveTest() throws InterruptedException {
var map = new ConcurrentHashMapLongObject<Integer>();
var num = 1_000_0000;
var map = new ConcurrentHashMapLongObject<Integer>(128);
var startTime = System.currentTimeMillis();
var countDownLatch = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put(j, j);
for (int count = 0; count < maxCount; count++) {
var countDownLatch = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put(j, j);
}
map.forEachPrimitive(it -> it.value());
countDownLatch.countDown();
}
map.forEachPrimitive(it -> it.value());
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
Assert.assertEquals(map.size(), num);
}).start();
}
countDownLatch.await();
Assert.assertEquals(map.size(), num);
var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
var value = (int) map.get((long) j);
Assert.assertEquals(value, j);
}
map.forEachPrimitive(it -> it.value());
countDownLatch2.countDown();
}
map.forEachPrimitive(it -> it.value());
countDownLatch2.countDown();
}
}).start();
}
countDownLatch2.await();
Assert.assertTrue(map.isEmpty());
}).start();
}
countDownLatch2.await();
var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put(j, j);
var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put(j, j);
}
map.forEachPrimitive(it -> it.value());
countDownLatch3.countDown();
}
map.forEachPrimitive(it -> it.value());
countDownLatch3.countDown();
}
}).start();
}
countDownLatch3.await();
Assert.assertEquals(map.size(), num);
}).start();
}
countDownLatch3.await();
var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
}
map.forEachPrimitive(it -> it.value());
countDownLatch4.countDown();
}
map.forEachPrimitive(it -> it.value());
countDownLatch4.countDown();
}
}).start();
}).start();
}
countDownLatch4.await();
Assert.assertTrue(map.isEmpty());
}
countDownLatch4.await();
Assert.assertTrue(map.isEmpty());
System.out.println(System.currentTimeMillis() - startTime);
}
@Test
public void concurrentTest() throws InterruptedException {
var map = new ConcurrentHashMap<Long, Integer>();
var num = 1_000_0000;
var startTime = System.currentTimeMillis();
var countDownLatch = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put((long) j, j);
for (int count = 0; count < maxCount; count++) {
var countDownLatch = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put((long) j, j);
}
map.forEach((key, value) -> {
});
countDownLatch.countDown();
}
map.forEach((key, value) -> {});
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
Assert.assertEquals(map.size(), num);
}).start();
}
countDownLatch.await();
Assert.assertEquals(map.size(), num);
var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
var value = (int) map.get((long) j);
Assert.assertEquals(value, j);
}
map.forEach((key, value) -> {
});
countDownLatch2.countDown();
}
map.forEach((key, value) -> {});
countDownLatch2.countDown();
}
}).start();
}
countDownLatch2.await();
Assert.assertTrue(map.isEmpty());
}).start();
}
countDownLatch2.await();
var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put((long) j, j);
var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.put((long) j, j);
}
map.forEach((key, value) -> {
});
countDownLatch3.countDown();
}
map.forEach((key, value) -> {});
countDownLatch3.countDown();
}
}).start();
}
countDownLatch3.await();
Assert.assertEquals(map.size(), num);
}).start();
}
countDownLatch3.await();
var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE);
for (var i = 0; i < EXECUTOR_SIZE; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < num; j++) {
map.remove((long) j);
}
map.forEach((key, value) -> {
});
countDownLatch4.countDown();
}
map.forEach((key, value) -> {});
countDownLatch4.countDown();
}
}).start();
}).start();
}
countDownLatch4.await();
Assert.assertTrue(map.isEmpty());
}
countDownLatch4.await();
Assert.assertTrue(map.isEmpty());
System.out.println(System.currentTimeMillis() - startTime);
}
}