001 /*
002 * $Id: PolyUtilAppTest.java 3368 2010-10-24 13:53:32Z kredel $
003 */
004
005 package edu.jas.application;
006
007
008 import junit.framework.Test;
009 import junit.framework.TestCase;
010 import junit.framework.TestSuite;
011
012 import org.apache.log4j.BasicConfigurator;
013
014 import edu.jas.arith.BigRational;
015 import edu.jas.arith.Product;
016 import edu.jas.arith.ProductRing;
017 import edu.jas.poly.AlgebraicNumber;
018 import edu.jas.poly.AlgebraicNumberRing;
019 import edu.jas.poly.GenPolynomial;
020 import edu.jas.poly.GenPolynomialRing;
021 import edu.jas.poly.PolyUtil;
022 import edu.jas.poly.TermOrder;
023
024
025 /**
026 * PolyUtilApp tests with JUnit.
027 * @author Heinz Kredel.
028 */
029
030 public class PolyUtilAppTest extends TestCase {
031
032
033 /**
034 * main.
035 */
036 public static void main(String[] args) {
037 BasicConfigurator.configure();
038 junit.textui.TestRunner.run(suite());
039 }
040
041
042 /**
043 * Constructs a <CODE>PolyUtilAppTest</CODE> object.
044 * @param name String.
045 */
046 public PolyUtilAppTest(String name) {
047 super(name);
048 }
049
050
051 /**
052 */
053 public static Test suite() {
054 TestSuite suite = new TestSuite(PolyUtilAppTest.class);
055 return suite;
056 }
057
058
059 //private final static int bitlen = 100;
060
061 TermOrder to = new TermOrder(TermOrder.INVLEX);
062
063
064 GenPolynomialRing<BigRational> dfac;
065
066
067 GenPolynomialRing<BigRational> cfac;
068
069
070 GenPolynomialRing<GenPolynomial<BigRational>> rfac;
071
072
073 BigRational ai;
074
075
076 BigRational bi;
077
078
079 BigRational ci;
080
081
082 BigRational di;
083
084
085 BigRational ei;
086
087
088 GenPolynomial<BigRational> a;
089
090
091 GenPolynomial<BigRational> b;
092
093
094 GenPolynomial<BigRational> c;
095
096
097 GenPolynomial<BigRational> d;
098
099
100 GenPolynomial<BigRational> e;
101
102
103 GenPolynomial<GenPolynomial<BigRational>> ar;
104
105
106 GenPolynomial<GenPolynomial<BigRational>> br;
107
108
109 GenPolynomial<GenPolynomial<BigRational>> cr;
110
111
112 GenPolynomial<GenPolynomial<BigRational>> dr;
113
114
115 GenPolynomial<GenPolynomial<BigRational>> er;
116
117
118 int rl = 5;
119
120
121 int kl = 5;
122
123
124 int ll = 5;
125
126
127 int el = 5;
128
129
130 float q = 0.6f;
131
132
133 @Override
134 protected void setUp() {
135 a = b = c = d = e = null;
136 ai = bi = ci = di = ei = null;
137 ar = br = cr = dr = er = null;
138 dfac = new GenPolynomialRing<BigRational>(new BigRational(1), rl, to);
139 cfac = null; //new GenPolynomialRing<BigRational>(new BigRational(1),rl-1,to);
140 rfac = null; //new GenPolynomialRing<GenPolynomial<BigRational>>(cfac,1,to);
141 }
142
143
144 @Override
145 protected void tearDown() {
146 a = b = c = d = e = null;
147 ai = bi = ci = di = ei = null;
148 ar = br = cr = dr = er = null;
149 dfac = null;
150 cfac = null;
151 rfac = null;
152 }
153
154
155 /**
156 * Test primitive element.
157 *
158 */
159 public void testPrimitiveElement() {
160 String[] va = new String[] { "alpha" };
161 String[] vb = new String[] { "beta" };
162 GenPolynomialRing<BigRational> aufac, bufac;
163
164 // x^3 - 2
165 aufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, va);
166 GenPolynomial<BigRational> m;
167 m = aufac.univariate(0, 3);
168 m = m.subtract(aufac.fromInteger(2));
169 //System.out.println("m = " + m);
170
171 // x^2 - 3
172 bufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, vb);
173 GenPolynomial<BigRational> n;
174 n = bufac.univariate(0, 2);
175 n = n.subtract(bufac.fromInteger(3));
176 //System.out.println("n = " + n);
177
178 AlgebraicNumberRing<BigRational> afac = new AlgebraicNumberRing<BigRational>(m);
179 //System.out.println("afac = " + afac);
180
181 AlgebraicNumberRing<BigRational> bfac = new AlgebraicNumberRing<BigRational>(n);
182 //System.out.println("bfac = " + bfac);
183
184 PrimitiveElement<BigRational> pe;
185 pe = PolyUtilApp.<BigRational> primitiveElement(afac, bfac);
186 //System.out.println("pe = " + pe);
187 AlgebraicNumberRing<BigRational> cfac = pe.primitiveElem;
188
189 AlgebraicNumber<BigRational> a = afac.getGenerator();
190 AlgebraicNumber<BigRational> b = bfac.getGenerator();
191
192 // convert to primitive element field
193 AlgebraicNumber<BigRational> as = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, a);
194 AlgebraicNumber<BigRational> bs = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.B, b);
195
196 // test alpha+(t)beta == gamma
197 AlgebraicNumber<BigRational> cs = as.sum(bs);
198 //System.out.println("cs = " + cs);
199 assertEquals("alpha+beta == gamma", cs, cfac.getGenerator());
200 }
201
202
203 /**
204 * Test primitive element of extension tower.
205 *
206 */
207 public void testPrimitiveElementTower() {
208 String[] va = new String[] { "alpha" };
209 String[] vb = new String[] { "beta" };
210 GenPolynomialRing<BigRational> ufac;
211 ufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, va);
212
213 GenPolynomial<BigRational> m;
214 m = ufac.univariate(0, 3);
215 m = m.subtract(ufac.fromInteger(2));
216 //System.out.println("m = " + m);
217
218 AlgebraicNumberRing<BigRational> afac;
219 afac = new AlgebraicNumberRing<BigRational>(m);
220 //System.out.println("afac = " + afac);
221
222 GenPolynomialRing<AlgebraicNumber<BigRational>> aufac;
223 aufac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(afac, 1, vb);
224
225 GenPolynomial<AlgebraicNumber<BigRational>> n;
226 n = aufac.univariate(0, 2);
227 n = n.subtract(aufac.getONE().multiply(afac.getGenerator()));
228 //System.out.println("n = " + n);
229
230 AlgebraicNumberRing<AlgebraicNumber<BigRational>> bfac;
231 bfac = new AlgebraicNumberRing<AlgebraicNumber<BigRational>>(n);
232 //System.out.println("bfac = " + bfac);
233
234 PrimitiveElement<BigRational> pe;
235 pe = PolyUtilApp.<BigRational> primitiveElement(bfac);
236 //System.out.println("pe = " + pe);
237 AlgebraicNumberRing<BigRational> cfac = pe.primitiveElem;
238
239 AlgebraicNumber<BigRational> a = afac.getGenerator();
240 AlgebraicNumber<AlgebraicNumber<BigRational>> b = bfac.getGenerator();
241
242 // convert to primitive element ring
243 AlgebraicNumber<BigRational> as = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, a);
244 AlgebraicNumber<BigRational> bs = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, pe.B,
245 b);
246
247 // test alpha+(t)beta == gamma
248 AlgebraicNumber<BigRational> cs = as.sum(bs);
249 //System.out.println("cs = " + cs);
250 assertEquals("alpha+beta == gamma", cs, cfac.getGenerator());
251
252 // test for polynomials, too simple
253 String[] vx = new String[] { "x" };
254 GenPolynomialRing<AlgebraicNumber<BigRational>> rafac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(
255 afac, 1, vx);
256 GenPolynomialRing<AlgebraicNumber<AlgebraicNumber<BigRational>>> rbfac = new GenPolynomialRing<AlgebraicNumber<AlgebraicNumber<BigRational>>>(
257 bfac, 1, vx);
258 GenPolynomial<AlgebraicNumber<BigRational>> ap = rafac.getGenerators().get(0).multiply(a);
259 GenPolynomial<AlgebraicNumber<AlgebraicNumber<BigRational>>> bp = rbfac.getGenerators().get(0)
260 .multiply(b);
261
262 GenPolynomial<AlgebraicNumber<BigRational>> asp = PolyUtilApp.<BigRational> convertToPrimitiveElem(
263 cfac, pe.A, ap);
264 GenPolynomial<AlgebraicNumber<BigRational>> bsp = PolyUtilApp.<BigRational> convertToPrimitiveElem(
265 cfac, pe.A, pe.B, bp);
266 //System.out.println("asp = " + asp);
267 //System.out.println("bsp = " + bsp);
268
269 // test alpha+(t)beta == gamma
270 GenPolynomial<AlgebraicNumber<BigRational>> csp = asp.sum(bsp);
271 //System.out.println("csp = " + csp);
272 assertEquals("alpha+beta == gamma", csp.leadingBaseCoefficient(), cfac.getGenerator());
273 }
274
275 }