From: John W. <joe...@us...> - 2005-05-21 08:47:42
|
Update of /cvsroot/javabdd/JavaBDD_tests/bdd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5489/bdd Modified Files: IteratorTests.java Log Message: Moved iterator2() into the test case class. Index: IteratorTests.java =================================================================== RCS file: /cvsroot/javabdd/JavaBDD_tests/bdd/IteratorTests.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** IteratorTests.java 21 May 2005 02:03:31 -0000 1.2 --- IteratorTests.java 21 May 2005 08:47:33 -0000 1.3 *************** *** 6,9 **** --- 6,10 ---- import java.util.HashSet; import java.util.Iterator; + import java.util.NoSuchElementException; import java.util.Random; import java.util.Set; *************** *** 32,40 **** int domainSize = 1024; bdd.extDomain(new int[] { domainSize, domainSize }); ! BDDDomain d = bdd.getDomain(0); ! BDDDomain d2 = bdd.getDomain(1); Random r = new Random(); int times = 1000; int combine = 400; for (int i = 0; i < times; ++i) { int count = r.nextInt(combine); --- 33,43 ---- int domainSize = 1024; bdd.extDomain(new int[] { domainSize, domainSize }); ! BDDDomain d = bdd.getDomain(0); d.setName("D0"); ! BDDDomain d2 = bdd.getDomain(1); d2.setName("D1"); ! bdd.setVarOrder(bdd.makeVarOrdering(true, "D1xD0")); Random r = new Random(); int times = 1000; int combine = 400; + boolean dual = true; for (int i = 0; i < times; ++i) { int count = r.nextInt(combine); *************** *** 42,56 **** for (int j = 0; j < count; ++j) { int varNum = r.nextInt(domainSize); ! BDD c = d.ithVar(varNum); //.andWith(d2.ithVar(domainSize - varNum - 1)); b.orWith(c); } BDD var = d.set(); Iterator i1 = b.iterator(var); ! Iterator i2 = b.iterator2(var); ! Iterator i3 = b.iterator3(var); b.free(); Set s1 = new HashSet(); Set s2 = new HashSet(); - Set s3 = new HashSet(); while (i1.hasNext()) { BDD b1 = (BDD) i1.next(); --- 45,59 ---- for (int j = 0; j < count; ++j) { int varNum = r.nextInt(domainSize); ! BDD c = d.ithVar(varNum); ! if (dual) c.andWith(d2.ithVar(r.nextInt(domainSize))); b.orWith(c); } BDD var = d.set(); + if (dual) var.andWith(d2.set()); Iterator i1 = b.iterator(var); ! Iterator i2 = new MyBDDIterator(b, var); b.free(); Set s1 = new HashSet(); Set s2 = new HashSet(); while (i1.hasNext()) { BDD b1 = (BDD) i1.next(); *************** *** 65,74 **** s2.add(b2); } - while (i3.hasNext()) { - BDD b3 = (BDD) i3.next(); - double sc = b3.satCount(var); - Assert.assertEquals(1., sc, 0.0000001); - s3.add(b3); - } var.free(); if (!s1.equals(s2)) { --- 68,71 ---- *************** *** 80,91 **** "iterator2() contains these extras: "+s2_minus_s1); } - if (!s1.equals(s3)) { - Set s1_minus_s3 = new HashSet(s1); - s1_minus_s3.removeAll(s3); - Set s3_minus_s1 = new HashSet(s3); - s3_minus_s1.removeAll(s1); - Assert.fail("iterator() contains these extras: "+s1_minus_s3+"\n"+ - "iterator3() contains these extras: "+s3_minus_s1); - } for (Iterator k = s1.iterator(); k.hasNext(); ) { BDD q = (BDD) k.next(); --- 77,80 ---- *************** *** 96,105 **** q.free(); } - for (Iterator k = s3.iterator(); k.hasNext(); ) { - BDD q = (BDD) k.next(); - q.free(); - } } } } } --- 85,148 ---- q.free(); } } } } + + /** + * <p>This is another version of iterator() that exists for testing purposes. + * It is much slower than the other one.</p> + * + * @return an iteration of minterms + */ + static class MyBDDIterator implements Iterator { + + BDD orig; + BDD b = null; + BDD myVar; + BDD last = null; + + MyBDDIterator(BDD dis, BDD var) { + orig = dis; + if (!dis.isZero()) { + b = dis.id(); + myVar = var.id(); + } + } + + /* (non-Javadoc) + * @see java.util.Iterator#remove() + */ + public void remove() { + if (last != null) { + orig.applyWith(last.id(), BDDFactory.diff); + last = null; + } else { + throw new IllegalStateException(); + } + } + + /* (non-Javadoc) + * @see java.util.Iterator#hasNext() + */ + public boolean hasNext() { + return b != null; + } + + /* (non-Javadoc) + * @see java.util.Iterator#next() + */ + public Object next() { + if (b == null) + throw new NoSuchElementException(); + BDD c = b.satOne(myVar, false); + b.applyWith(c.id(), BDDFactory.diff); + if (b.isZero()) { + myVar.free(); myVar = null; + b.free(); b = null; + } + return last = c; + } + + } + } |