[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. |