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 }