001 /* 002 * $Id: PowerSetTest.java 3295 2010-08-26 17:01:10Z kredel $ 003 */ 004 005 package edu.jas.util; 006 007 008 import java.util.ArrayList; 009 import java.util.List; 010 011 import junit.framework.Test; 012 import junit.framework.TestCase; 013 import junit.framework.TestSuite; 014 015 import edu.jas.arith.BigInteger; 016 import edu.jas.arith.Combinatoric; 017 018 019 /** 020 * PowerSet tests with JUnit. 021 * @author Heinz Kredel. 022 */ 023 024 public class PowerSetTest extends TestCase { 025 026 027 /** 028 * main. 029 */ 030 public static void main(String[] args) { 031 junit.textui.TestRunner.run(suite()); 032 } 033 034 035 /** 036 * Constructs a <CODE>ListUtilTest</CODE> object. 037 * @param name String. 038 */ 039 public PowerSetTest(String name) { 040 super(name); 041 } 042 043 044 /** 045 */ 046 public static Test suite() { 047 TestSuite suite = new TestSuite(PowerSetTest.class); 048 return suite; 049 } 050 051 052 BigInteger ai; 053 054 055 @Override 056 protected void setUp() { 057 ai = null; 058 } 059 060 061 @Override 062 protected void tearDown() { 063 ai = null; 064 } 065 066 067 /** 068 * Test iterator. 069 * 070 */ 071 public void testIterator() { 072 final int N = 10; 073 ai = new BigInteger(); 074 List<BigInteger> list = new ArrayList<BigInteger>(); 075 for (int i = 0; i < N; i++) { 076 list.add(ai.random(7)); 077 } 078 //System.out.println("list = " + list); 079 080 PowerSet<BigInteger> ps = new PowerSet<BigInteger>(list); 081 long i = 0; 082 for (List<BigInteger> subs : ps) { 083 if (i < 0) { 084 System.out.println("subs = " + subs); 085 } 086 if (subs != null) { 087 assertTrue("size(subs) >= 0 ", subs.size() >= 0); 088 i++; 089 } 090 } 091 long j = 1; 092 for (int k = 0; k < N; k++) { 093 j *= 2; 094 } 095 assertEquals("size(ps) == 2**N ", i, j); 096 } 097 098 099 /** 100 * Test k-subset iterator. 101 * 102 */ 103 public void noTestKSubsetIterator() { 104 final int N = 10; 105 ai = new BigInteger(); 106 List<BigInteger> list = new ArrayList<BigInteger>(); 107 for (int i = 0; i < N; i++) { 108 list.add(ai.random(7)); 109 } 110 System.out.println("list = " + list); 111 112 KsubSet<BigInteger> ks = new KsubSet<BigInteger>(list, 0); 113 long i = 0; 114 for (List<BigInteger> subs : ks) { 115 if (i >= 0) { 116 System.out.println("subs = " + subs); 117 } 118 if (subs != null) { 119 assertTrue("size(subs) >= 0 ", subs.size() == 0); 120 i++; 121 } 122 } 123 long s = Combinatoric.binCoeff(N, 0).getVal().longValue(); 124 assertEquals("size(ks) == " + s + " ", i, s); 125 126 ks = new KsubSet<BigInteger>(list, 1); 127 i = 0; 128 for (List<BigInteger> subs : ks) { 129 if (i >= 0) { 130 System.out.println("subs = " + subs); 131 } 132 if (subs != null) { 133 assertTrue("size(subs) >= 0 ", subs.size() == 1); 134 i++; 135 } 136 } 137 s = Combinatoric.binCoeff(N, 1).getVal().longValue(); 138 assertEquals("size(ks) == " + s + " ", i, s); 139 140 ks = new KsubSet<BigInteger>(list, 2); 141 i = 0; 142 for (List<BigInteger> subs : ks) { 143 if (i >= 0) { 144 System.out.println("subs = " + subs); 145 } 146 if (subs != null) { 147 assertTrue("size(subs) >= 0 ", subs.size() == 2); 148 i++; 149 } 150 } 151 s = Combinatoric.binCoeff(N, 2).getVal().longValue(); 152 assertEquals("size(ks) == " + s + " ", i, s); 153 154 ks = new KsubSet<BigInteger>(list, 3); 155 i = 0; 156 for (List<BigInteger> subs : ks) { 157 if (i >= 0) { 158 System.out.println("subs = " + subs); 159 } 160 if (subs != null) { 161 assertTrue("size(subs) >= 0 ", subs.size() == 3); 162 i++; 163 } 164 } 165 s = Combinatoric.binCoeff(N, 3).getVal().longValue(); 166 assertEquals("size(ks) == " + s + " ", i, s); 167 } 168 169 170 /** 171 * Test any k-subset iterator. 172 * 173 */ 174 public void testAnyKSubsetIterator() { 175 final int N = 10; 176 ai = new BigInteger(); 177 List<BigInteger> list = new ArrayList<BigInteger>(); 178 for (int i = 0; i < N; i++) { 179 list.add(ai.random(7)); 180 } 181 //System.out.println("list = " + list); 182 183 for (int k = 0; k <= N; k++) { 184 KsubSet<BigInteger> ks = new KsubSet<BigInteger>(list, k); 185 long i = 0; 186 for (List<BigInteger> subs : ks) { 187 if (i < 0) { 188 System.out.println("subs = " + subs); 189 } 190 if (subs != null) { 191 assertTrue("size(subs) >= 0 ", subs.size() == k); 192 i++; 193 } 194 } 195 long s = Combinatoric.binCoeff(N, k).getVal().longValue(); 196 assertEquals("size(ks) == " + s + " ", i, s); 197 } 198 } 199 200 }