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