001/* 002 * $Id: SolvableResidueTest.java 5338 2015-12-06 13:06:47Z kredel $ 003 */ 004 005package edu.jas.application; 006 007 008import java.util.ArrayList; 009import java.util.List; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015import org.apache.log4j.BasicConfigurator; 016//import org.apache.log4j.Logger; 017 018import edu.jas.arith.BigRational; 019import edu.jas.poly.GenSolvablePolynomial; 020import edu.jas.poly.GenSolvablePolynomialRing; 021import edu.jas.poly.RelationGenerator; 022import edu.jas.poly.WeylRelations; 023import edu.jas.poly.TermOrder; 024import edu.jas.structure.NotInvertibleException; 025 026 027/** 028 * SolvableResidue tests with JUnit. 029 * @author Heinz Kredel. 030 */ 031 032public class SolvableResidueTest extends TestCase { 033 034 /** 035 * main. 036 */ 037 public static void main (String[] args) { 038 BasicConfigurator.configure(); 039 junit.textui.TestRunner.run( suite() ); 040 } 041 042 /** 043 * Constructs a <CODE>SolvableResidueTest</CODE> object. 044 * @param name String. 045 */ 046 public SolvableResidueTest(String name) { 047 super(name); 048 } 049 050 /** 051 * suite. 052 */ 053 public static Test suite() { 054 TestSuite suite= new TestSuite(SolvableResidueTest.class); 055 return suite; 056 } 057 058 SolvableIdeal<BigRational> id; 059 SolvableResidueRing<BigRational> fac; 060 GenSolvablePolynomialRing<BigRational> mfac; 061 List<GenSolvablePolynomial<BigRational>> F; 062 063 SolvableResidue< BigRational > a, b, c, d, e; 064 065 int rl = 4; 066 int kl = 2; 067 int ll = 3; 068 int el = 2; 069 float q = 0.2f; 070 int il = ( rl == 1 ? 1 : 2 ); 071 072 protected void setUp() { 073 a = b = c = d = e = null; 074 TermOrder to = new TermOrder( TermOrder.INVLEX ); 075 String[] vars = new String[] { "w", "x", "y", "z" }; 076 mfac = new GenSolvablePolynomialRing<BigRational>( new BigRational(1), rl, to, vars ); 077 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 078 wl.generate(mfac); 079 if (!mfac.isAssociative() ) { 080 System.out.println("ring not associative: " + mfac); 081 } 082 do { 083 F = new ArrayList<GenSolvablePolynomial<BigRational>>( il ); 084 for ( int i = 0; i < il; i++ ) { 085 GenSolvablePolynomial<BigRational> mo = mfac.random(kl,ll,el,q); 086 while ( mo.isConstant() ) { 087 mo = mfac.random(kl,ll,el,q); 088 } 089 F.add( mo ); 090 } 091 id = new SolvableIdeal<BigRational>(mfac,F); 092 id.doGB(); 093 } while (id.isONE()); 094 //System.out.println("id = " + id); 095 assert !id.isONE() : "id = " + id; 096 fac = new SolvableResidueRing<BigRational>( id ); 097 //System.out.println("fac = " + fac); 098 F = null; 099 } 100 101 protected void tearDown() { 102 a = b = c = d = e = null; 103 fac = null; 104 id = null; 105 mfac = null; 106 } 107 108 109 /** 110 * Test constructor and toString. 111 */ 112 public void testConstruction() { 113 c = fac.getONE(); 114 //System.out.println("c = " + c); 115 //System.out.println("c.val = " + c.val); 116 assertTrue("length( c ) = 1 ", c.val.length() == 1 || id.isONE()); 117 assertTrue("isZERO( c )", !c.isZERO() || id.isONE()); 118 assertTrue("isONE( c )", c.isONE() || id.isONE()); 119 120 d = fac.getZERO(); 121 //System.out.println("d = " + d); 122 //System.out.println("d.val = " + d.val); 123 assertTrue("length( d ) = 0", d.val.length() == 0); 124 assertTrue("isZERO( d )", d.isZERO() ); 125 assertTrue("isONE( d )", !d.isONE() ); 126 127 for (SolvableResidue<BigRational> g : fac.generators() ) { 128 //System.out.println("g = " + g); 129 assertFalse("not isZERO( g )", g.isZERO() ); 130 } 131 } 132 133 134 /** 135 * Test random polynomial. 136 */ 137 public void testRandom() { 138 for (int i = 1; i < 7; i++) { 139 //a = fac.random(ll+i); 140 a = fac.random(kl*(i+1), ll+2*i, el+i, q ); 141 //System.out.println("a = " + a); 142 if ( a.isZERO() || a.isONE() ) { 143 continue; 144 } 145 assertTrue("length( a"+i+" ) <> 0", a.val.length() >= 0); 146 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() ); 147 assertTrue(" not isONE( a"+i+" )", !a.isONE() ); 148 } 149 } 150 151 152 /** 153 * Test addition. 154 */ 155 public void testAddition() { 156 a = fac.random(kl,ll,el,q); 157 b = fac.random(kl,ll,el,q); 158 159 c = a.sum(b); 160 d = c.subtract(b); 161 assertEquals("a+b-b = a",a,d); 162 163 c = a.sum(b); 164 d = b.sum(a); 165 assertEquals("a+b = b+a",c,d); 166 167 c = fac.random(kl,ll,el,q); 168 d = c.sum( a.sum(b) ); 169 e = c.sum( a ).sum(b); 170 assertEquals("c+(a+b) = (c+a)+b",d,e); 171 172 c = a.sum( fac.getZERO() ); 173 d = a.subtract( fac.getZERO() ); 174 assertEquals("a+0 = a-0",c,d); 175 176 c = fac.getZERO().sum( a ); 177 d = fac.getZERO().subtract( a.negate() ); 178 assertEquals("0+a = 0+(-a)",c,d); 179 } 180 181 182 /** 183 * Test object multiplication. 184 */ 185 public void testMultiplication() { 186 List<SolvableResidue<BigRational>> g = fac.generators(); 187 //System.out.println("g = " + g); 188 //a = fac.random(kl,ll,el,q); 189 a = g.get(1); 190 if ( a.isZERO() ) { 191 a = fac.getONE(); //return; 192 } 193 assertTrue("not isZERO( a )", !a.isZERO() ); 194 195 b = fac.random(kl,ll,el,q); 196 //b = g.get(g.size()-1); 197 if ( b.isZERO() ) { 198 b = fac.getONE(); //return; 199 } 200 assertTrue("not isZERO( b )", !b.isZERO() ); 201 202 c = a.multiply( fac.getONE() ); 203 d = fac.getONE().multiply( a ); 204 assertEquals("a*1 = 1*a",c,d); 205 assertEquals("a*1 = 1*a",c,a); 206 207 c = b.multiply(a); 208 d = a.multiply(b); 209 assertTrue("not isZERO( c )", !c.isZERO() ); 210 assertTrue("not isZERO( d )", !d.isZERO() ); 211 212 //System.out.println("a = " + a); 213 //System.out.println("b = " + b); 214 //System.out.println("c = " + c); 215 //System.out.println("d = " + d); 216 //e = d.subtract(c); 217 //non-com: assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() ); 218 //non-com: assertEquals("a*b = b*a",c,d); 219 220 c = fac.random(kl,ll+1,el,q); 221 //System.out.println("c = " + c); 222 d = a.multiply( b.multiply(c) ); 223 e = a.multiply(b).multiply(c); 224 //System.out.println("d = " + d); 225 //System.out.println("e = " + e); 226 //System.out.println("d-e = " + d.subtract(e) ); 227 assertEquals("a(bc) = (ab)c",d,e); 228 //assertTrue("a(bc) = (ab)c", d.equals(e) ); 229 230 if ( !a.isZERO() ) { // !a.isZERO() isUnit() 231 try { 232 c = a.inverse(); 233 //System.out.println("a = " + a); 234 //System.out.println("c = " + c); 235 d = c.multiply(a); 236 //System.out.println("d = " + d); 237 assertTrue("a*1/a = 1: " + fac, d.isONE()); // || true 238 } catch (NotInvertibleException e) { 239 // can happen 240 } 241 } 242 243 // d = c.remainder(a); 244 // //System.out.println("c = " + c); 245 // System.out.println("d = " + d); 246 // if ( d.isZERO() ) { 247 // d = c.divide(a); 248 // System.out.println("c = " + c); 249 // System.out.println("d = " + d); 250 // e = a.multiply(d); 251 // System.out.println("e = " + e); 252 // assertEquals("((b*a)/a)*a = b*a",e,c); 253 // } 254 } 255 256}