package de.ph87.electro.circuit; import de.ph87.electro.circuit.part.impl.PartBattery; import de.ph87.electro.circuit.part.impl.PartLight; import de.ph87.electro.circuit.part.impl.PartSwitch1x2; import de.ph87.electro.circuit.part.impl.PartSwitchCross; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; public class BatterySwitcherCrossTest { private static final double VOLTAGE = 3; private static final Circuit circuit = new Circuit(); private static final PartBattery battery = circuit.addBattery("Batterie", 0, 0, 0, VOLTAGE); private static final PartSwitch1x2 switcher0 = circuit.addSwitch1x2("Wechselschalter 0", 0, 1, 0, false); private static final PartSwitchCross switcherX = circuit.addSwitchCross("Kreuzschalter", 1, 1, 0, false); private static final PartSwitch1x2 switcher1 = circuit.addSwitch1x2("Wechselschalter 1", 2, 1, 0, false); private static final PartLight light = circuit.addLight("Licht", 2, 0, 0, VOLTAGE); @BeforeAll public static void setUp() { circuit.connect(battery.getPlus(), switcher0.getCommon()); circuit.connect(switcher0.getOutput0(), switcherX.getCommon0()); circuit.connect(switcher0.getOutput1(), switcherX.getCommon1()); circuit.connect(switcherX.getOutput0(), switcher1.getOutput0()); circuit.connect(switcherX.getOutput1(), switcher1.getOutput1()); circuit.connect(switcher1.getCommon(), light.getPin1()); circuit.connect(light.getPin0(), battery.getMinus()); } @Test public void test000() { test(false, false, false); } @Test public void test100() { test(true, false, false); } @Test public void test010() { test(false, true, false); } @Test public void test110() { test(true, true, false); } @Test public void test001() { test(false, false, true); } @Test public void test101() { test(true, false, true); } @Test public void test011() { test(false, true, true); } @Test public void test111() { test(true, true, true); } private void test(final boolean state0, final boolean stateX, final boolean state1) { final double voltage00 = state0 ? Double.NaN : VOLTAGE; final double voltage01 = state0 ? VOLTAGE : Double.NaN; final double voltageX0 = stateX ? voltage01 : voltage00; final double voltageX1 = stateX ? voltage00 : voltage01; final double voltage = state1 ? voltageX1 : voltageX0; switcher0.setState(state0); switcherX.setState(stateX); switcher1.setState(state1); circuit.evaluate(); assertEquals(state0, switcher0.isState()); assertEquals(stateX, switcherX.isState()); assertEquals(state1, switcher1.isState()); assertEquals(VOLTAGE, battery.getPlus().getVoltage()); assertEquals(VOLTAGE, switcher0.getCommon().getVoltage()); assertEquals(voltage00, switcher0.getOutput0().getVoltage()); assertEquals(voltage00, switcherX.getCommon0().getVoltage()); assertEquals(voltage01, switcher0.getOutput1().getVoltage()); assertEquals(voltage01, switcherX.getCommon1().getVoltage()); assertEquals(voltageX0, switcherX.getOutput0().getVoltage()); assertEquals(voltageX0, switcher1.getOutput0().getVoltage()); assertEquals(voltageX1, switcherX.getOutput1().getVoltage()); assertEquals(voltageX1, switcher1.getOutput1().getVoltage()); assertEquals(voltage, switcher1.getCommon().getVoltage()); assertEquals(voltage, light.getPin1().getVoltage()); assertEquals(voltage, light.getVoltage()); assertEquals(0, light.getPin0().getVoltage()); assertEquals(0, battery.getMinus().getVoltage()); assertFalse(light.isDefect()); } }