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}