001/* 002 * $Id$ 003 */ 004 005package edu.jas.poly; 006 007 008import java.util.ArrayList; 009import java.util.List; 010 011import edu.jas.arith.BigRational; 012 013import junit.framework.Test; 014import junit.framework.TestCase; 015import junit.framework.TestSuite; 016 017 018/** 019 * TermOrderOptimization tests with JUnit. 020 * @author Heinz Kredel 021 */ 022public class TermOrderOptimizationTest extends TestCase { 023 024 025 /** 026 * main. 027 */ 028 public static void main(String[] args) { 029 junit.textui.TestRunner.run(suite()); 030 } 031 032 033 /** 034 * Constructs a <CODE>TermOrderOptimizationTest</CODE> object. 035 * @param name String. 036 */ 037 public TermOrderOptimizationTest(String name) { 038 super(name); 039 } 040 041 042 /** 043 * suite. 044 */ 045 public static Test suite() { 046 TestSuite suite = new TestSuite(TermOrderOptimizationTest.class); 047 return suite; 048 } 049 050 051 int rl = 7; 052 053 054 int kl = 3; 055 056 057 int ll = 10; 058 059 060 int el = 7; 061 062 063 float q = 0.5f; 064 065 066 GenPolynomialRing<BigRational> fac; 067 068 069 GenPolynomial<BigRational> a, b, c, d, e; 070 071 072 GenPolynomialRing<GenPolynomial<BigRational>> rfac; 073 074 075 GenPolynomial<GenPolynomial<BigRational>> ar, br, cr, dr, er; 076 077 078 @Override 079 protected void setUp() { 080 } 081 082 083 @Override 084 protected void tearDown() { 085 } 086 087 088 /** 089 * Test permutations. 090 */ 091 public void testPermutation() { 092 List<Integer> P = new ArrayList<Integer>(); 093 P.add(2); 094 P.add(1); 095 P.add(4); 096 P.add(0); 097 P.add(3); 098 //System.out.println("P = " + P); 099 100 List<Integer> S = TermOrderOptimization.inversePermutation(P); 101 //System.out.println("S = " + S); 102 assertFalse("P != id", TermOrderOptimization.isIdentityPermutation(P)); 103 assertFalse("S != id", TermOrderOptimization.isIdentityPermutation(S)); 104 105 List<Integer> T = TermOrderOptimization.multiplyPermutation(P, S); 106 //System.out.println("T = " + T); 107 List<Integer> U = TermOrderOptimization.multiplyPermutation(S, P); 108 //System.out.println("U = " + U); 109 110 assertTrue("T == id", TermOrderOptimization.isIdentityPermutation(T)); 111 assertTrue("U == id", TermOrderOptimization.isIdentityPermutation(U)); 112 } 113 114 115 /** 116 * Test polynomial optimization. 117 */ 118 public void testPolyOptimization() { 119 BigRational cf = new BigRational(); 120 fac = new GenPolynomialRing<BigRational>(cf, rl); 121 //System.out.println("fac = " + fac); 122 123 a = fac.random(kl, ll, el, q); 124 b = fac.random(kl, ll, el, q); 125 c = fac.random(kl, ll, el, q); 126 d = fac.random(kl, ll, el, q); 127 e = fac.random(kl, ll, el, q); 128 129 List<GenPolynomial<BigRational>> F = new ArrayList<GenPolynomial<BigRational>>(); 130 F.add(a); 131 F.add(b); 132 F.add(c); 133 F.add(d); 134 F.add(e); 135 //System.out.println("F = " + F); 136 long t = F.toString().length(); 137 138 OptimizedPolynomialList<BigRational> Fo, Fo2; 139 Fo = TermOrderOptimization.<BigRational> optimizeTermOrder(fac, F); 140 //System.out.println("Fo = " + Fo.perm); 141 142 Fo2 = TermOrderOptimization.<BigRational> optimizeTermOrder(Fo.ring, Fo.list); 143 //System.out.println("Fo2 = " + Fo2.perm); 144 assertEquals("Fo == Fo2: ", Fo, Fo2); 145 146 List<Integer> S = TermOrderOptimization.inversePermutation(Fo.perm); 147 148 GenPolynomialRing<BigRational> faci = Fo.ring.permutation(S); 149 //System.out.println("faci = " + faci); 150 List<GenPolynomial<BigRational>> Fi = TermOrderOptimization.permutation(S, faci, Fo.list); 151 152 //System.out.println("Fi = " + Fi); 153 //System.out.println("Fi = " + Fi); 154 assertEquals("r == ri: ", fac, faci); 155 assertEquals("F == Fi: ", F, Fi); 156 157 String s = Fo.toString(); 158 //System.out.println("t = " + t + ", #ss = " + s.length()); 159 assertTrue("#s >= t: " + s, s.length() >= t); 160 } 161 162 163 /** 164 * Test polynomial coefficients optimization. 165 */ 166 public void testPolyCoefOptimization() { 167 BigRational cf = new BigRational(); 168 fac = new GenPolynomialRing<BigRational>(cf, rl); 169 //System.out.println("fac = " + fac); 170 171 rfac = new GenPolynomialRing<GenPolynomial<BigRational>>(fac, 3); 172 //System.out.println("rfac = " + rfac); 173 174 ar = rfac.random(kl, ll, el, q); 175 br = rfac.random(kl, ll, el, q); 176 cr = rfac.random(kl, ll, el, q); 177 dr = rfac.random(kl, ll, el, q); 178 er = rfac.random(kl, ll, el, q); 179 180 List<GenPolynomial<GenPolynomial<BigRational>>> F = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>(); 181 F.add(ar); 182 F.add(br); 183 F.add(cr); 184 F.add(dr); 185 F.add(er); 186 //System.out.println("F = " + F); 187 188 OptimizedPolynomialList<GenPolynomial<BigRational>> Fo, Fo2; 189 Fo = TermOrderOptimization.<BigRational> optimizeTermOrderOnCoefficients(rfac, F); 190 //System.out.println("Fo = " + Fo.perm); 191 192 Fo2 = TermOrderOptimization.<BigRational> optimizeTermOrderOnCoefficients(Fo.ring, Fo.list); 193 //System.out.println("Fo2 = " + Fo2.perm); 194 assertEquals("Fo == Fo2: ", Fo, Fo2); 195 196 List<Integer> S = TermOrderOptimization.inversePermutation(Fo.perm); 197 198 GenPolynomialRing<BigRational> cof = (GenPolynomialRing<BigRational>) Fo.ring.coFac; 199 cof = cof.permutation(S); 200 201 GenPolynomialRing<GenPolynomial<BigRational>> faci = new GenPolynomialRing<GenPolynomial<BigRational>>( 202 cof, rfac); 203 //System.out.println("faci = " + faci); 204 List<GenPolynomial<GenPolynomial<BigRational>>> Fi = TermOrderOptimization 205 .permutationOnCoefficients(S, faci, Fo.list); 206 207 //System.out.println("Fi = " + Fi); 208 //System.out.println("Fi = " + Fi); 209 assertEquals("r == ri: ", rfac, faci); 210 assertEquals("F == Fi: ", F, Fi); 211 } 212 213}