[Javabdd-checkins] SF.net SVN: javabdd: [471] trunk/JavaBDD_tests/bdd
Brought to you by:
joewhaley
|
From: <joe...@us...> - 2006-11-30 09:23:44
|
Revision: 471
http://svn.sourceforge.net/javabdd/?rev=471&view=rev
Author: joewhaley
Date: 2006-11-30 01:23:43 -0800 (Thu, 30 Nov 2006)
Log Message:
-----------
Added allsat() iterator test.
Modified Paths:
--------------
trunk/JavaBDD_tests/bdd/IteratorTests.java
Added Paths:
-----------
trunk/JavaBDD_tests/bdd/IOTests.java
Added: trunk/JavaBDD_tests/bdd/IOTests.java
===================================================================
--- trunk/JavaBDD_tests/bdd/IOTests.java (rev 0)
+++ trunk/JavaBDD_tests/bdd/IOTests.java 2006-11-30 09:23:43 UTC (rev 471)
@@ -0,0 +1,55 @@
+// IOTests.java, created Nov 20, 2006 4:55:28 PM by jwhaley
+// Copyright (C) 2006 jwhaley
+// Licensed under the terms of the GNU LGPL; see COPYING for details.
+package bdd;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import junit.framework.Assert;
+import net.sf.javabdd.BDD;
+import net.sf.javabdd.BDDFactory;
+
+/**
+ * IOTests
+ *
+ * @author jwhaley
+ * @version $Id$
+ */
+public class IOTests extends BDDTestCase {
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(IOTests.class);
+ }
+
+ public void testLoad() {
+ reset();
+ Assert.assertTrue(hasNext());
+ while (hasNext()) {
+ BDDFactory bdd = nextFactory();
+ File tmp = null;
+ Exception error = null;
+ try {
+ tmp = File.createTempFile("loadtest", "bdd");
+ tmp.deleteOnExit();
+ PrintWriter out = new PrintWriter(tmp);
+ out.println("2 3");
+ out.println("0 1 2");
+ out.println("222 1 1 0");
+ out.println("333 2 1 222");
+ out.close();
+ BDD x = bdd.load(tmp.getAbsolutePath());
+ tmp.delete();
+ //x.printDot();
+ Assert.assertEquals(6.0, x.satCount(), 0.001);
+ x.free();
+ } catch (IOException x) {
+ error = x;
+ } finally {
+ if (tmp != null) tmp.delete();
+ }
+ if (error != null)
+ Assert.fail(error.toString());
+ }
+ }
+
+}
Modified: trunk/JavaBDD_tests/bdd/IteratorTests.java
===================================================================
--- trunk/JavaBDD_tests/bdd/IteratorTests.java 2006-11-30 09:22:42 UTC (rev 470)
+++ trunk/JavaBDD_tests/bdd/IteratorTests.java 2006-11-30 09:23:43 UTC (rev 471)
@@ -84,6 +84,75 @@
}
}
+ static Random random = new Random(1234);
+
+ static BDD randomBDD(BDDFactory f) {
+ BDD result = f.zero();
+ for (int i = 0; i < f.varNum(); ++i) {
+ BDD b = f.universe();
+ for (int j = 0; j < f.varNum(); ++j) {
+ int k = random.nextInt(3);
+ if (k == 0) b.andWith(f.nithVar(j));
+ else if (k == 1) b.andWith(f.ithVar(j));
+ }
+ result.orWith(b);
+ }
+ return result;
+ }
+
+ static BDD betterRandomBDD(BDDFactory f) {
+ // Use a random truth table.
+ byte[] bytes = new byte[(1 << f.varNum()) / 8 + 1];
+ random.nextBytes(bytes);
+ BDD result = f.zero();
+ for (int i = 0; i < (1 << f.varNum()); ++i) {
+ if ((bytes[i / 8] & (1<<(i%8))) != 0) {
+ BDD b = f.universe();
+ for (int j = 0; j < f.varNum(); ++j) {
+ if ((i & (1<<j)) != 0)
+ b.andWith(f.ithVar(j));
+ else
+ b.andWith(f.nithVar(j));
+ }
+ result.orWith(b);
+ }
+ }
+ return result;
+ }
+
+ public void testAllsatIterator() {
+ reset();
+ Assert.assertTrue(hasNext());
+ while (hasNext()) {
+ BDDFactory f = nextFactory();
+ f.setVarNum(5);
+ for (int kk = 0; kk < 10; ++kk) {
+ BDD bdd1 = ((kk&1)==0)?randomBDD(f):betterRandomBDD(f);
+ BDD bdd2 = f.zero();
+ BDD.AllSatIterator i = bdd1.allsat();
+ while (i.hasNext()) {
+ byte[] b = i.nextSat();
+ BDD t = f.universe();
+ for (int k = 0; k < b.length; ++k) {
+ if (b[k] == 0)
+ t.andWith(f.nithVar(k));
+ else if (b[k] == 1)
+ t.andWith(f.ithVar(k));
+ }
+
+ BDD overlap = bdd2.and(t);
+ Assert.assertTrue(overlap.isZero());
+ overlap.free();
+
+ bdd2.orWith(t);
+ }
+ Assert.assertEquals(bdd1, bdd2);
+ bdd2.free();
+ bdd1.free();
+ }
+ }
+ }
+
public void testRandomIterator() {
reset();
Assert.assertTrue(hasNext());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|