Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-17 05:20:14 +01:00
Add OnceTest
Dieser Commit ist enthalten in:
Ursprung
47560442ca
Commit
07da606abd
@ -0,0 +1,43 @@
|
||||
package com.velocitypowered.proxy.util.concurrent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class OnceTest {
|
||||
@Test
|
||||
void uncontendedOnce() {
|
||||
AtomicInteger i = new AtomicInteger();
|
||||
Once once = new Once();
|
||||
once.run(i::incrementAndGet);
|
||||
assertEquals(1, i.get(), "Integer didn't increment");
|
||||
}
|
||||
|
||||
@Test
|
||||
void contendedOnce() throws Exception {
|
||||
ExecutorService service = Executors.newFixedThreadPool(10);
|
||||
AtomicInteger i = new AtomicInteger();
|
||||
Once once = new Once();
|
||||
for (int i1 = 0; i1 < 10; i1++) {
|
||||
service.execute(() -> once.run(i::incrementAndGet));
|
||||
}
|
||||
service.shutdown();
|
||||
service.awaitTermination(500, TimeUnit.MILLISECONDS);
|
||||
assertEquals(1, i.get(), "Integer is not equal to one");
|
||||
}
|
||||
|
||||
@Test
|
||||
void handlesException() {
|
||||
Once once = new Once();
|
||||
assertThrows(RuntimeException.class, () -> once.run(() -> {
|
||||
throw new RuntimeException("exception");
|
||||
}));
|
||||
once.run(() -> fail("Once.run() ran twice"));
|
||||
}
|
||||
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren