001
002 /*
003 * $Id: QuotientIntTest.java 3356 2010-10-23 16:41:01Z kredel $
004 */
005
006 package edu.jas.ufd;
007
008
009 import junit.framework.Test;
010 import junit.framework.TestCase;
011 import junit.framework.TestSuite;
012
013 import org.apache.log4j.BasicConfigurator;
014 //import org.apache.log4j.Logger;
015
016 //import edu.jas.arith.BigRational;
017 import edu.jas.arith.BigInteger;
018
019 import edu.jas.kern.PrettyPrint;
020 import edu.jas.kern.ComputerThreads;
021
022 import edu.jas.poly.GenPolynomialRing;
023 import edu.jas.poly.TermOrder;
024
025
026 /**
027 * Quotient over BigInteger GenPolynomial tests with JUnit.
028 * @author Heinz Kredel.
029 */
030
031 public class QuotientIntTest extends TestCase {
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 * Constructs a <CODE>QuotientIntTest</CODE> object.
043 * @param name String.
044 */
045 public QuotientIntTest(String name) {
046 super(name);
047 }
048
049 /**
050 * suite.
051 */
052 public static Test suite() {
053 TestSuite suite= new TestSuite(QuotientIntTest.class);
054 return suite;
055 }
056
057 //private final static int bitlen = 100;
058
059 QuotientRing<BigInteger> efac;
060 GenPolynomialRing<BigInteger> mfac;
061
062 Quotient< BigInteger > a;
063 Quotient< BigInteger > b;
064 Quotient< BigInteger > c;
065 Quotient< BigInteger > d;
066 Quotient< BigInteger > e;
067
068 int rl = 3;
069 int kl = 5;
070 int ll = 4; //6;
071 int el = 2;
072 float q = 0.4f;
073
074 protected void setUp() {
075 a = b = c = d = e = null;
076 BigInteger cfac = new BigInteger(1);
077 TermOrder to = new TermOrder( TermOrder.INVLEX );
078 mfac = new GenPolynomialRing<BigInteger>( cfac, rl, to );
079 efac = new QuotientRing<BigInteger>( mfac );
080 }
081
082 protected void tearDown() {
083 a = b = c = d = e = null;
084 //efac.terminate();
085 efac = null;
086 ComputerThreads.terminate();
087 }
088
089
090 /**
091 * Test constructor and toString.
092 *
093 */
094 public void testConstruction() {
095 c = efac.getONE();
096 //System.out.println("c = " + c);
097 //System.out.println("c.val = " + c.val);
098 assertTrue("length( c ) = 1", c.num.length() == 1);
099 assertTrue("isZERO( c )", !c.isZERO() );
100 assertTrue("isONE( c )", c.isONE() );
101
102 d = efac.getZERO();
103 //System.out.println("d = " + d);
104 //System.out.println("d.val = " + d.val);
105 assertTrue("length( d ) = 0", d.num.length() == 0);
106 assertTrue("isZERO( d )", d.isZERO() );
107 assertTrue("isONE( d )", !d.isONE() );
108 }
109
110
111 /**
112 * Test random polynomial.
113 *
114 */
115 public void testRandom() {
116 for (int i = 0; i < 7; i++) {
117 //a = efac.random(ll+i);
118 a = efac.random(kl*(i+1), ll+2+2*i, el, q );
119 //System.out.println("a = " + a);
120 if ( a.isZERO() || a.isONE() ) {
121 continue;
122 }
123 assertTrue("length( a"+i+" ) <> 0", a.num.length() >= 0);
124 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() );
125 assertTrue(" not isONE( a"+i+" )", !a.isONE() );
126 }
127 }
128
129
130 /**
131 * Test addition.
132 *
133 */
134 public void testAddition() {
135
136 a = efac.random(kl,ll,el,q);
137 b = efac.random(kl,ll,el,q);
138 //System.out.println("a = " + a);
139 //System.out.println("b = " + b);
140
141 c = a.sum(b);
142 d = c.subtract(b);
143 assertEquals("a+b-b = a",a,d);
144
145 c = a.sum(b);
146 d = b.sum(a);
147 //System.out.println("c = " + c);
148 //System.out.println("d = " + d);
149
150 assertEquals("a+b = b+a",c,d);
151
152 c = efac.random(kl,ll,el,q);
153 d = c.sum( a.sum(b) );
154 e = c.sum( a ).sum(b);
155 assertEquals("c+(a+b) = (c+a)+b",d,e);
156
157
158 c = a.sum( efac.getZERO() );
159 d = a.subtract( efac.getZERO() );
160 assertEquals("a+0 = a-0",c,d);
161
162 c = efac.getZERO().sum( a );
163 d = efac.getZERO().subtract( a.negate() );
164 assertEquals("0+a = 0+(-a)",c,d);
165
166 }
167
168
169 /**
170 * Test object multiplication.
171 *
172 */
173 public void testMultiplication() {
174
175 a = efac.random(kl,ll,el,q);
176 //assertTrue("not isZERO( a )", !a.isZERO() );
177
178 b = efac.random(kl,ll,el,q);
179 //assertTrue("not isZERO( b )", !b.isZERO() );
180
181 c = b.multiply(a);
182 d = a.multiply(b);
183 if ( !a.isZERO() && !b.isZERO() ) {
184 assertTrue("not isZERO( c )", !c.isZERO() );
185 assertTrue("not isZERO( d )", !d.isZERO() );
186 }
187
188 //System.out.println("a = " + a);
189 //System.out.println("b = " + b);
190 e = d.subtract(c);
191 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() );
192
193 assertTrue("a*b = b*a", c.equals(d) );
194 assertEquals("a*b = b*a",c,d);
195
196 c = efac.random(kl,ll,el,q);
197 //System.out.println("c = " + c);
198 d = a.multiply( b.multiply(c) );
199 e = (a.multiply(b)).multiply(c);
200
201 //System.out.println("d = " + d);
202 //System.out.println("e = " + e);
203
204 //System.out.println("d-e = " + d.subtract(c) );
205
206 assertEquals("a(bc) = (ab)c",d,e);
207 assertTrue("a(bc) = (ab)c", d.equals(e) );
208
209 c = a.multiply( efac.getONE() );
210 d = efac.getONE().multiply( a );
211 assertEquals("a*1 = 1*a",c,d);
212
213 if ( a.isUnit() ) {
214 c = a.inverse();
215 d = c.multiply(a);
216 //System.out.println("a = " + a);
217 //System.out.println("c = " + c);
218 //System.out.println("d = " + d);
219 assertTrue("a*1/a = 1",d.isONE());
220 }
221 }
222
223
224 /**
225 * Test parse().
226 *
227 */
228 public void testParse() {
229 a = efac.random(kl*2,ll*2,el*2,q*2);
230 //assertTrue("not isZERO( a )", !a.isZERO() );
231
232 //PrettyPrint.setInternal();
233 //System.out.println("a = " + a);
234 PrettyPrint.setPretty();
235 //System.out.println("a = " + a);
236 String p = a.toString();
237 //System.out.println("p = " + p);
238 b = efac.parse(p);
239 //System.out.println("b = " + b);
240
241 //c = a.subtract(b);
242 //System.out.println("c = " + c);
243 assertEquals("parse(a.toSting()) = a",a,b);
244 }
245
246 }