package com.juliasoft.beedeedee.factories; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.juliasoft.beedeedee.bdd.BDD; public class BDDTest { private Factory factory; @Before public void setUp() { factory = new Factory(2, 2); } @After public void cleanUp() { factory.done(); } @Test public void test() { } /* @Test public void testOpWithSame() { BDD x1 = factory.makeVar(1); x1.orWith(x1); // 1 L0 H1 factory.printUT(); assertEquals(1, factory.getRefCount(x1.getId())); BDD x2 = factory.makeVar(2); int idBeforeX2 = x2.getId(); x2.impWith(x2); // ONE assertEquals(0, factory.getRefCount(idBeforeX2)); BDD x3 = factory.makeVar(3); x3.andWith(x3); // 3 L0 H1 assertEquals(1, factory.getRefCount(x3.getId())); BDD x4 = factory.makeVar(4); int idBeforeX4 = x4.getId(); factory.printUT(); System.out.println("nand"); x4.nandWith(x4); // 4 L1 H0 factory.printUT(); assertEquals(0, factory.getRefCount(idBeforeX4)); assertEquals(1, factory.getRefCount(x4.getId())); } @Test public void testOpWith() { BDD x1 = factory.makeVar(1); BDD x2 = factory.makeVar(2); int idBeforeX1 = x1.getId(); x1.andWith(x2); // 1 L0 Hx2 assertEquals(-1, x2.getId()); // freed assertEquals(0, factory.getRefCount(idBeforeX1)); assertEquals(1, factory.getRefCount(x1.getId())); BDD x3 = factory.makeVar(3); BDD x4 = factory.makeVar(4); int idBeforeX3 = x3.getId(); x3.orWith(x4); // 3 Lx4 H1 assertEquals(-1, x4.getId()); // freed assertEquals(0, factory.getRefCount(idBeforeX3)); assertEquals(1, factory.getRefCount(x3.getId())); BDD x5 = factory.makeVar(5); BDD x6 = factory.makeVar(6); int idBeforeX5 = x5.getId(); x5.impWith(x6); // 5 L1 Hx6 assertEquals(-1, x6.getId()); // freed assertEquals(0, factory.getRefCount(idBeforeX5)); assertEquals(1, factory.getRefCount(x5.getId())); BDD x7 = factory.makeVar(7); BDD x8 = factory.makeVar(8); int idBeforeX7 = x7.getId(); x7.nandWith(x8); // 7 L1 H!x8 assertEquals(-1, x8.getId()); // freed assertEquals(0, factory.getRefCount(idBeforeX7)); assertEquals(1, factory.getRefCount(x7.getId())); } @Test public void testNegWith() { BDD x = factory.makeVar(1); int idBefore = x.getId(); x.negWith(); assertEquals(0, factory.getRefCount(idBefore)); assertEquals(1, factory.getRefCount(x.getId())); } */ // @Test private void testImpWith() { BDD x1 = factory.makeVar(1); BDD x2 = factory.makeVar(2); factory.printNodeTable(); BDD imp = x1.impWith(x2); factory.printNodeTable(); x2 = factory.makeVar(2); imp.andWith(x2); factory.printNodeTable(); } // @Test private void testBiImpWith() { BDD x1 = factory.makeVar(1); BDD x2 = factory.makeVar(2); BDD x3 = factory.makeVar(3); BDD x4 = factory.makeVar(4); BDD imp13 = x1.imp(x3); BDD imp31 = x3.impWith(x1); BDD imp24 = x2.imp(x4); BDD imp42 = x4.impWith(x2); BDD biimp13 = imp13.andWith(imp31); BDD biimp24 = imp24.andWith(imp42); biimp13.andWith(biimp24); factory.printNodeTable(); } // @Test public void testLowHighEquals() { BDD res = factory.makeVar(1); System.out.println("x1"); factory.printNodeTable(); BDD x2 = factory.makeVar(2); System.out.println("x1 ... x2"); factory.printNodeTable(); res.orWith(x2); System.out.println("x1 Or x2"); factory.printNodeTable(); // ((ResizingUniqueTable)factory.ut).gc(); BDD x3 = factory.makeVar(3); System.out.println("x1 Or x2 ... x3"); factory.printNodeTable(); res.andWith(x3.copy()); System.out.println("(x1 OR x2) AND x3 ... x3"); factory.printNodeTable(); BDD res2 = factory.makeVar(1).notWith(); System.out.println("(x1 OR x2) AND x3 ... x3 ... NOTx1"); factory.printNodeTable(); res2.andWith(x3); System.out.println("(x1 OR x2) AND x3 .... NOTx1 AND x3"); factory.printNodeTable(); res.orWith(res2); System.out.println("((x1 OR x2) AND x3) OR (NOTx1 AND x3)"); factory.printNodeTable(); // now res represents // ( ( 1 OR 2 ) AND 3 ) OR ( Not1 AND 3 ) // which is equivalent to 3, // thus at this point the only (single!) reference must be to variable 3 factory.gc(); factory.printNodeTable(); } }