001 /*
002 * $Id: PolyUfdUtilTest.java 3295 2010-08-26 17:01:10Z kredel $
003 */
004
005 package edu.jas.ufd;
006
007
008 import junit.framework.Test;
009 import junit.framework.TestCase;
010 import junit.framework.TestSuite;
011
012 import edu.jas.arith.BigInteger;
013 import edu.jas.kern.ComputerThreads;
014 import edu.jas.poly.GenPolynomial;
015 import edu.jas.poly.GenPolynomialRing;
016 import edu.jas.poly.TermOrder;
017
018
019 /**
020 * PolyUfdUtil tests with JUnit.
021 * @author Heinz Kredel.
022 */
023
024 public class PolyUfdUtilTest extends TestCase {
025
026
027 /**
028 * main.
029 */
030 public static void main(String[] args) {
031 //BasicConfigurator.configure();
032 junit.textui.TestRunner.run(suite());
033 ComputerThreads.terminate();
034 }
035
036
037 /**
038 * Constructs a <CODE>PolyUtilTest</CODE> object.
039 * @param name String.
040 */
041 public PolyUfdUtilTest(String name) {
042 super(name);
043 }
044
045
046 /**
047 */
048 public static Test suite() {
049 TestSuite suite = new TestSuite(PolyUfdUtilTest.class);
050 return suite;
051 }
052
053
054 //private final static int bitlen = 100;
055
056 TermOrder to = new TermOrder(TermOrder.INVLEX);
057
058
059 GenPolynomialRing<BigInteger> dfac;
060
061
062 GenPolynomialRing<BigInteger> cfac;
063
064
065 GenPolynomialRing<GenPolynomial<BigInteger>> rfac;
066
067
068 BigInteger ai;
069
070
071 BigInteger bi;
072
073
074 BigInteger ci;
075
076
077 BigInteger di;
078
079
080 BigInteger ei;
081
082
083 GenPolynomial<BigInteger> a;
084
085
086 GenPolynomial<BigInteger> b;
087
088
089 GenPolynomial<BigInteger> c;
090
091
092 GenPolynomial<BigInteger> d;
093
094
095 GenPolynomial<BigInteger> e;
096
097
098 int rl = 5;
099
100
101 int kl = 5;
102
103
104 int ll = 5;
105
106
107 int el = 3;
108
109
110 float q = 0.3f;
111
112
113 @Override
114 protected void setUp() {
115 a = b = c = d = e = null;
116 ai = bi = ci = di = ei = null;
117 dfac = new GenPolynomialRing<BigInteger>(new BigInteger(1), rl, to);
118 cfac = new GenPolynomialRing<BigInteger>(new BigInteger(1), rl - 1, to);
119 rfac = new GenPolynomialRing<GenPolynomial<BigInteger>>(cfac, 1, to);
120 }
121
122
123 @Override
124 protected void tearDown() {
125 a = b = c = d = e = null;
126 ai = bi = ci = di = ei = null;
127 dfac = null;
128 cfac = null;
129 rfac = null;
130 }
131
132
133 protected static java.math.BigInteger getPrime1() {
134 long prime = 2; //2^60-93; // 2^30-35; //19; knuth (2,390)
135 for (int i = 1; i < 60; i++) {
136 prime *= 2;
137 }
138 prime -= 93;
139 //prime = 37;
140 //System.out.println("p1 = " + prime);
141 return new java.math.BigInteger("" + prime);
142 }
143
144
145 protected static java.math.BigInteger getPrime2() {
146 long prime = 2; //2^60-93; // 2^30-35; //19; knuth (2,390)
147 for (int i = 1; i < 30; i++) {
148 prime *= 2;
149 }
150 prime -= 35;
151 //prime = 19;
152 //System.out.println("p1 = " + prime);
153 return new java.math.BigInteger("" + prime);
154 }
155
156
157 /**
158 * Test Kronecker substitution.
159 *
160 */
161 public void testKroneckerSubstitution() {
162
163 for (int i = 0; i < 10; i++) {
164 a = dfac.random(kl, ll * 2, el * 5, q);
165 long d = a.degree() + 1L;
166 //System.out.println("\na = " + a);
167 //System.out.println("deg(a)+1 = " + d);
168
169 b = PolyUfdUtil.<BigInteger> substituteKronecker(a, d);
170 //System.out.println("b = " + b);
171
172 c = PolyUfdUtil.<BigInteger> backSubstituteKronecker(dfac, b, d);
173 //System.out.println("c = " + c);
174 e = a.subtract(c);
175 //System.out.println("e = " + e);
176 assertTrue("back(subst(a)) = a", e.isZERO());
177 }
178 }
179
180 }