import junit.framework.TestCase; /** * A JUnit test case class for the sequentialLogic package. */ public class CircuitTest01 extends TestCase { /** * Test InTerminal */ public void test01a() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01a"); circuit.addNode("in01", "inTerminal"); circuit.setValue("in01", true); assert( circuit.getValue("in01") ); } /** * Test OutTerminal */ public void test01b() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01b"); circuit.addNode("out01", "outTerminal"); circuit.setValue("out01", true); assert( circuit.getValue("out01") ); } /** * Test 0-input AndGate */ public void test01c() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01c"); circuit.addNode("and01", "and"); circuit.setValue("and01", true); assert( circuit.getValue("and01") ); } /** * Test 0-input OrGate */ public void test01d() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01d"); circuit.addNode("or01", "or"); circuit.setValue("or01", true); assert( circuit.getValue("or01") ); } /** * Test Invertor */ public void test01e() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01e"); circuit.addNode("invertor01", "invertor"); circuit.setValue("invertor01", true); assert( circuit.getValue("invertor01") ); } /** * Test FlipFlop */ public void test01f() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01f"); circuit.addNode("FF01", "FF"); circuit.setValue("FF01", true); assert( circuit.getValue("FF01") ); } /** * Test connection from inTerminal to and */ public void test01g() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01g"); circuit.addNode("in01", "inTerminal"); circuit.addNode("and01", "and"); circuit.connect("in01", "and01"); circuit.setValue("in01", true); circuit.update("and01"); assert( circuit.getValue("and01") ); } /** * Test connection from an or to outTerminal */ public void test01h() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01h"); circuit.addNode("or01", "or"); circuit.addNode("out01", "outTerminal"); circuit.connect("or01", "out01"); circuit.setValue("or01", true); circuit.update("out01"); assert( circuit.getValue("out01") ); } /** * Test invertor truth table */ public void test01i() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01i"); circuit.addNode("in01", "inTerminal"); circuit.addNode("inv01", "invertor"); circuit.addNode("out01", "outTerminal"); circuit.connect("in01", "inv01"); circuit.connect("inv01", "out01"); circuit.setValue("in01", false); circuit.update("inv01"); circuit.update("out01"); assert( circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.update("inv01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); } /** * Test 2-ary and truth table */ public void test01j() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01j"); circuit.addNode("in01", "inTerminal"); circuit.addNode("in02", "inTerminal"); circuit.addNode("and01", "and"); circuit.addNode("out01", "outTerminal"); circuit.connect("in01", "and01"); circuit.connect("in02", "and01"); circuit.connect("and01", "out01"); circuit.setValue("in01", false); circuit.setValue("in02", false); circuit.update("and01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", false); circuit.setValue("in02", true); circuit.update("and01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.setValue("in02", false); circuit.update("and01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.setValue("in02", true); circuit.update("and01"); circuit.update("out01"); assert( circuit.getValue("out01") ); } /** * Test 2-ary or truth table */ public void test01k() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01k"); circuit.addNode("in01", "inTerminal"); circuit.addNode("in02", "inTerminal"); circuit.addNode("or01", "or"); circuit.addNode("out01", "outTerminal"); circuit.connect("in01", "or01"); circuit.connect("in02", "or01"); circuit.connect("or01", "out01"); circuit.setValue("in01", false); circuit.setValue("in02", false); circuit.update("or01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", false); circuit.setValue("in02", true); circuit.update("or01"); circuit.update("out01"); assert( circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.setValue("in02", false); circuit.update("or01"); circuit.update("out01"); assert( circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.setValue("in02", true); circuit.update("or01"); circuit.update("out01"); assert( circuit.getValue("out01") ); } /** * Test sequential circuit that remembers whether input was ever true */ public void test01l() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01l"); circuit.addNode("in01", "inTerminal"); circuit.addNode("or01", "or"); circuit.addNode("FF01", "FF"); circuit.addNode("out01", "outTerminal"); circuit.connect("in01", "or01"); circuit.connect("or01", "FF01"); circuit.connect("FF01", "or01"); circuit.connect("FF01", "out01"); circuit.setValue("in01", false); circuit.update("or01"); circuit.update("FF01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", false); circuit.update("or01"); circuit.update("FF01"); circuit.update("out01"); assert( !circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.update("or01"); circuit.update("FF01"); circuit.update("out01"); assert( circuit.getValue("out01") ); circuit.setValue("in01", false); circuit.update("or01"); circuit.update("FF01"); circuit.update("out01"); assert( circuit.getValue("out01") ); } /** * Test sequential circuit that indicates parity * Note that we start using update() for the entire circuit * rather than for individual nodes. */ public void test01m() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01m"); circuit.addNode("in01", "inTerminal"); circuit.addNode("xor01", "xor"); circuit.addNode("FF01", "FF"); circuit.addNode("out01", "outTerminal"); circuit.connect("in01", "xor01"); circuit.connect("xor01", "FF01"); circuit.connect("FF01", "xor01"); circuit.connect("FF01", "out01"); circuit.setValue("in01", false); circuit.update(); assert( !circuit.getValue("out01") ); circuit.setValue("in01", false); circuit.update(); assert( !circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.update(); assert( circuit.getValue("out01") ); circuit.setValue("in01", true); circuit.update(); assert( !circuit.getValue("out01") ); } /** * Test sequential circuit that cycles 00-01-10-11 forever * with no input. */ public void test01n() { sequentialLogic.Circuit circuit = new sequentialLogic.Circuit("test01n"); circuit.addNode("inv01", "invertor"); circuit.addNode("xor01", "xor"); circuit.addNode("FF01", "FF"); circuit.addNode("FF02", "FF"); circuit.addNode("out01", "outTerminal"); circuit.addNode("out02", "outTerminal"); circuit.connect("inv01", "FF02"); circuit.connect("xor01", "FF01"); circuit.connect("FF02", "inv01"); circuit.connect("FF02", "xor01"); circuit.connect("FF01", "xor01"); circuit.connect("FF01", "out01"); circuit.connect("FF02", "out02"); assert( !circuit.getValue("out01") && !circuit.getValue("out02")); circuit.update(); assert( !circuit.getValue("out01") && circuit.getValue("out02")); circuit.update(); assert( circuit.getValue("out01") && !circuit.getValue("out02")); circuit.update(); assert( circuit.getValue("out01") && circuit.getValue("out02")); circuit.update(); assert( !circuit.getValue("out01") && !circuit.getValue("out02")); circuit.update(); assert( !circuit.getValue("out01") && circuit.getValue("out02")); circuit.update(); assert( circuit.getValue("out01") && !circuit.getValue("out02")); circuit.update(); assert( circuit.getValue("out01") && circuit.getValue("out02")); circuit.update(); assert( !circuit.getValue("out01") && !circuit.getValue("out02")); } }