mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-25 01:41:43 +00:00
93 lines
2.2 KiB
Java
93 lines
2.2 KiB
Java
// Copyright (c) FIRST and other WPILib contributors.
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
// the WPILib BSD license file in the root directory of this project.
|
|
|
|
package org.wpilib.event;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
|
|
import java.util.ConcurrentModificationException;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
class EventLoopTest {
|
|
@Test
|
|
void testConditions() {
|
|
var counterTrue = new AtomicInteger(0);
|
|
var counterFalse = new AtomicInteger(0);
|
|
var loop = new EventLoop();
|
|
new BooleanEvent(loop, () -> true).ifHigh(counterTrue::incrementAndGet);
|
|
new BooleanEvent(loop, () -> false).ifHigh(counterFalse::incrementAndGet);
|
|
|
|
assertEquals(0, counterTrue.get());
|
|
assertEquals(0, counterFalse.get());
|
|
|
|
loop.poll();
|
|
|
|
assertEquals(1, counterTrue.get());
|
|
assertEquals(0, counterFalse.get());
|
|
|
|
loop.poll();
|
|
|
|
assertEquals(2, counterTrue.get());
|
|
assertEquals(0, counterFalse.get());
|
|
}
|
|
|
|
@Test
|
|
void testClear() {
|
|
var condition = new AtomicBoolean(false);
|
|
var counter = new AtomicInteger(0);
|
|
var loop = new EventLoop();
|
|
|
|
// first ensure binding works
|
|
new BooleanEvent(loop, condition::get).ifHigh(counter::incrementAndGet);
|
|
|
|
condition.set(false);
|
|
loop.poll();
|
|
assertEquals(0, counter.get());
|
|
|
|
condition.set(true);
|
|
loop.poll();
|
|
assertEquals(1, counter.get());
|
|
|
|
// clear bindings
|
|
loop.clear();
|
|
|
|
condition.set(true);
|
|
loop.poll();
|
|
// shouldn't change
|
|
assertEquals(1, counter.get());
|
|
}
|
|
|
|
@Test
|
|
void testConcurrentModification() {
|
|
var loop = new EventLoop();
|
|
|
|
loop.bind(
|
|
() -> {
|
|
assertThrows(
|
|
ConcurrentModificationException.class,
|
|
() -> {
|
|
loop.bind(() -> {});
|
|
});
|
|
});
|
|
|
|
loop.poll();
|
|
|
|
loop.clear();
|
|
|
|
loop.bind(
|
|
() -> {
|
|
assertThrows(
|
|
ConcurrentModificationException.class,
|
|
() -> {
|
|
loop.clear();
|
|
});
|
|
});
|
|
|
|
loop.poll();
|
|
}
|
|
}
|