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