3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-11-17 05:20:14 +01:00
Dieser Commit ist enthalten in:
Andrew Steinborn 2020-06-30 22:54:49 -04:00
Ursprung 47560442ca
Commit 07da606abd

Datei anzeigen

@ -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"));
}
}