001    /*
002     * $Id: ExpVectorTest.java 3344 2010-10-10 11:03:58Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    
008    import java.util.Arrays;
009    import java.util.List;
010    import java.util.ArrayList;
011    
012    import junit.framework.Test;
013    import junit.framework.TestCase;
014    import junit.framework.TestSuite;
015    
016    import org.apache.log4j.BasicConfigurator;
017    
018    import edu.jas.arith.BigInteger;
019    
020    
021    /**
022     * ExpVector tests with JUnit.
023     * Tests arithmetic operations, for comparison tests @see TermOrderTest.java 
024     * @author Heinz Kredel.
025     */
026    
027    public class ExpVectorTest extends TestCase {
028    
029        /**
030         * main
031         */
032        public static void main (String[] args) {
033            BasicConfigurator.configure();
034            junit.textui.TestRunner.run( suite() );
035        }
036    
037        /**
038         * Constructs a <CODE>ExpVectorTest</CODE> object.
039         * @param name String.
040         */
041        public ExpVectorTest(String name) {
042            super(name);
043        }
044    
045        /**
046         */ 
047        public static Test suite() {
048            TestSuite suite= new TestSuite(ExpVectorTest.class);
049            return suite;
050        }
051    
052        //private final static int bitlen = 100;
053    
054        ExpVector a;
055        ExpVector b;
056        ExpVector c;
057        ExpVector d;
058    
059        protected void setUp() {
060            a = b = c = d = null;
061        }
062    
063        protected void tearDown() {
064            a = b = c = d = null;
065        }
066    
067    
068        /**
069         * Test constructor and toString.
070         * 
071         */
072        public void testConstructor() {
073            a = ExpVector.create( 0 );
074            b = ExpVector.create( 0 );
075            assertEquals("() = ()",a,b);
076            assertEquals("length( () ) = 0",a.length(),0);
077            assertTrue("isZERO( () )",a.isZERO());
078    
079            a = ExpVector.create( 10 );
080            b = ExpVector.create( 10 );
081            assertEquals("10e = 10e",a,b);
082            assertEquals("length( 10e ) = 10",a.length(),10);
083            assertTrue("isZERO( ( 10e ) )",a.isZERO());
084    
085            String s = "(0,0,0,0,0,0,0,0,0,0)";
086            a = ExpVector.create( s );
087            String t = a.toString().substring(0,s.length());
088    
089            assertEquals("stringConstr = toString",s,t);
090            assertTrue("isZERO( ( 10e ) )",a.isZERO());
091        }
092    
093    
094        /**
095         * Test random integer.
096         * 
097         */
098        public void testRandom() {
099            float q = (float) 0.2;
100    
101            a = ExpVector.EVRAND(5,10,q);
102            String s = a.toString();
103            if ( s.indexOf(":") >= 0 ) {
104                s = s.substring(0,s.indexOf(":"));
105            }
106            b = ExpVector.create( s );
107    
108            assertEquals("a == b", true, a.equals(b) );
109    
110            c = ExpVector.EVDIF(b,a);
111    
112            assertTrue("a-b = 0",c.isZERO());
113        }
114    
115    
116        /**
117         * Test addition.
118         * 
119         */
120        public void testAddition() {
121            float q = (float) 0.2;
122    
123            a = ExpVector.EVRAND(5,10,q);
124    
125            b = ExpVector.EVSUM(a,a);
126            c = ExpVector.EVDIF(b,a);
127    
128            assertEquals("a+a-a = a",c,a);
129            assertTrue("a+a-a = a", c.equals(a) );
130    
131            boolean t;
132            t = ExpVector.EVMT(b,a);
133            assertTrue("a | a+a", t );
134    
135            a = ExpVector.EVRAND(5,10,q);
136            b = ExpVector.EVRAND(5,10,q);
137    
138            c = ExpVector.EVSUM(a,b);
139            d = ExpVector.EVSUM(b,a);
140            assertTrue("a+b = b+a", c.equals(d) );
141        }
142    
143    
144        /**
145         * Test lcm.
146         * 
147         */
148        public void testLcm() {
149            float q = (float) 0.2;
150    
151            a = ExpVector.EVRAND(5,10,q);
152            b = ExpVector.EVRAND(5,10,q);
153            c = ExpVector.EVLCM(a,b);
154            d = ExpVector.EVLCM(b,a);
155    
156            assertTrue("lcm(a,b) = lcm(b,a)", c.equals(d) );
157    
158            assertTrue("a | lcm(a,b)", ExpVector.EVMT(c,a) );
159            assertTrue("b | lcm(a,b)", ExpVector.EVMT(c,b) );
160    
161            d = ExpVector.EVDIF(c,a);
162            assertTrue("sign(lcm(a,b)-a) >= 0", ExpVector.EVSIGN(d) >= 0 );
163            d = ExpVector.EVDIF(c,b);
164            assertTrue("sign(lcm(a,b)-b) >= 0", ExpVector.EVSIGN(d) >= 0 );
165        }
166    
167        /**
168         * Test tdeg.
169         * 
170         */
171        public void testTdeg() {
172            a = ExpVector.create( 100 );
173            assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0 );
174    
175            float q = (float) 0.2;
176    
177            a = ExpVector.EVRAND(5,10,q);
178            b = ExpVector.EVRAND(5,10,q);
179    
180            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
181            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
182    
183            c = ExpVector.EVSUM(a,b);
184            assertTrue("tdeg(a+b) >= tdeg(a)", 
185                       ExpVector.EVTDEG(c) >=
186                       ExpVector.EVTDEG(a) );
187            assertTrue("tdeg(a+b) >= tdeg(b)", 
188                       ExpVector.EVTDEG(c) >=
189                       ExpVector.EVTDEG(b) );
190    
191            c = ExpVector.EVLCM(a,b);
192            assertTrue("tdeg(lcm(a,b)) >= tdeg(a)", 
193                       ExpVector.EVTDEG(c) >=
194                       ExpVector.EVTDEG(a) );
195            assertTrue("tdeg(lcm(a,b)) >= tdeg(b)", 
196                       ExpVector.EVTDEG(c) >=
197                       ExpVector.EVTDEG(b) );
198        }
199    
200        /**
201         * Test weighted.
202         * 
203         */
204        public void testWeightdeg() {
205            a = ExpVector.create( 100 );
206            assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0 );
207            assertTrue("wdeg(a) = 0", ExpVector.EVWDEG(null,a) == 0 );
208    
209            float q = (float) 0.2;
210    
211            a = ExpVector.EVRAND(5,10,q);
212            b = ExpVector.EVRAND(5,10,q);
213            long [][] w = new long [][] { new long[] { 1l, 1l, 1l, 1l, 1l } };
214    
215            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
216            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
217    
218            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
219            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
220    
221            assertEquals("tdeg(a) == wdeg(a)", ExpVector.EVTDEG(a), ExpVector.EVWDEG(w,a) );
222            assertEquals("tdeg(b) == wdeg(b)", ExpVector.EVTDEG(b), ExpVector.EVWDEG(w,b) );
223    
224            c = ExpVector.EVSUM(a,b);
225            assertTrue("wdeg(a+b) >= wdeg(a)", 
226                       ExpVector.EVWDEG(w,c) >=
227                       ExpVector.EVWDEG(w,a) );
228            assertTrue("wdeg(a+b) >= wdeg(b)", 
229                       ExpVector.EVWDEG(w,c) >=
230                       ExpVector.EVWDEG(w,b) );
231    
232            c = ExpVector.EVLCM(a,b);
233            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
234                       ExpVector.EVWDEG(w,c) >=
235                       ExpVector.EVWDEG(w,a) );
236            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
237                       ExpVector.EVWDEG(w,c) >=
238                       ExpVector.EVWDEG(w,b) );
239    
240    
241            w = new long [][] { new long[] { 10l, 1l, 3l, 9l, 100l } };
242    
243            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
244            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
245    
246            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
247            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
248    
249            assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w,a) );
250            assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w,b) );
251    
252            c = ExpVector.EVSUM(a,b);
253            assertTrue("wdeg(a+b) >= wdeg(a)", 
254                       ExpVector.EVWDEG(w,c) >=
255                       ExpVector.EVWDEG(w,a) );
256            assertTrue("wdeg(a+b) >= wdeg(b)", 
257                       ExpVector.EVWDEG(w,c) >=
258                       ExpVector.EVWDEG(w,b) );
259    
260            c = ExpVector.EVLCM(a,b);
261            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
262                       ExpVector.EVWDEG(w,c) >=
263                       ExpVector.EVWDEG(w,a) );
264            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
265                       ExpVector.EVWDEG(w,c) >=
266                       ExpVector.EVWDEG(w,b) );
267    
268    
269            w = new long [][] { new long[] { 10l, 1l, 3l, 9l, 100l },
270                                new long[] { 1l,  1l, 1l, 1l,   1l }  };
271    
272            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
273            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
274    
275            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
276            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
277    
278            assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w,a) );
279            assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w,b) );
280    
281            c = ExpVector.EVSUM(a,b);
282            assertTrue("wdeg(a+b) >= wdeg(a)", 
283                       ExpVector.EVWDEG(w,c) >=
284                       ExpVector.EVWDEG(w,a) );
285            assertTrue("wdeg(a+b) >= wdeg(b)", 
286                       ExpVector.EVWDEG(w,c) >=
287                       ExpVector.EVWDEG(w,b) );
288    
289            c = ExpVector.EVLCM(a,b);
290            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
291                       ExpVector.EVWDEG(w,c) >=
292                       ExpVector.EVWDEG(w,a) );
293            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
294                       ExpVector.EVWDEG(w,c) >=
295                       ExpVector.EVWDEG(w,b) );
296    
297        }
298    
299    
300        /**
301         * Test dependency on variables.
302         * 
303         */
304        public void testDependency() {
305            int[] exp;
306            int[] dep;
307    
308            a = ExpVector.create(10,5,2l);
309            exp = new int[] { 5 };
310            dep = ExpVector.EVDOV(a);
311            assertTrue("[5] = [5]",Arrays.equals(exp,dep));
312    
313            b = ExpVector.create(10,3,9l);
314            exp = new int[] { 3 };
315            dep = ExpVector.EVDOV(b);
316            assertTrue("[3] = [3]",Arrays.equals(exp,dep));
317    
318            c = ExpVector.EVSUM(a,b);
319            exp = new int[] { 3, 5 };
320            dep = ExpVector.EVDOV(c);
321            assertTrue("[3,5] = [3,5] "+Arrays.toString(exp)+","+Arrays.toString(dep),Arrays.equals(exp,dep));
322    
323            b = ExpVector.create(10);
324            exp = new int[] { };
325            dep = ExpVector.EVDOV(b);
326            assertTrue("[] = []",Arrays.equals(exp,dep));
327    
328            b = ExpVector.create(0);
329            exp = new int[] { };
330            dep = ExpVector.EVDOV(b);
331            assertTrue("[] = []",Arrays.equals(exp,dep));
332    
333            b = ExpVector.create(1,0,1l);
334            exp = new int[] { 0 };
335            dep = ExpVector.EVDOV(b);
336            assertTrue("[0] = [0]",Arrays.equals(exp,dep));
337        }
338    
339    
340        /**
341         * Test random exp vector 2.
342         * 
343         */
344        public void testRandom2() {
345            float q = (float) 0.2;
346    
347            a = ExpVector.EVRAND(5,10,q);
348            b = ExpVector.create( "" + a );
349    
350            assertEquals("a == b", true, a.equals(b) );
351    
352            c = b.subtract(a);
353    
354            assertTrue("a-b = 0",c.isZERO());
355        }
356    
357    
358        /**
359         * Test addition.
360         * 
361         */
362        public void testAddition2() {
363            float q = (float) 0.2;
364    
365            a = ExpVector.EVRAND(5,10,q);
366    
367            b = a.sum(a);
368            c = b.subtract(a);
369    
370            assertEquals("a+a-a = a",c,a);
371            assertTrue("a+a-a = a", c.equals(a) );
372    
373            boolean t;
374            t = b.multipleOf(a);
375            assertTrue("a | a+a", t );
376    
377            a = ExpVector.EVRAND(5,10,q);
378            b = ExpVector.EVRAND(5,10,q);
379    
380            c = a.sum(b);
381            d = b.sum(a);
382            assertTrue("a+b = b+a", c.equals(d) );
383        }
384    
385    
386        /**
387         * Test lcm.
388         * 
389         */
390        public void testLcm2() {
391            float q = (float) 0.2;
392    
393            a = ExpVector.EVRAND(5,10,q);
394            b = ExpVector.EVRAND(5,10,q);
395            c = a.lcm(b);
396            d = b.lcm(a);
397    
398            assertTrue("lcm(a,b) = lcm(b,a)", c.equals(d) );
399    
400            assertTrue("a | lcm(a,b)", c.multipleOf(a) );
401            assertTrue("b | lcm(a,b)", c.multipleOf(b) );
402    
403            d = c.subtract(a);
404            assertTrue("sign(lcm(a,b)-a) >= 0", d.signum() >= 0 );
405            d = c.subtract(b);
406            assertTrue("sign(lcm(a,b)-b) >= 0", d.signum() >= 0 );
407        }
408    
409        /**
410         * Test tdeg.
411         * 
412         */
413        public void testTdeg2() {
414            a = ExpVector.create( 100 );
415            assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0 );
416    
417            float q = (float) 0.2;
418    
419            a = ExpVector.EVRAND(5,10,q);
420            b = ExpVector.EVRAND(5,10,q);
421    
422            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
423            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
424    
425            c = a.sum(b);
426            assertTrue("tdeg(a+b) >= tdeg(a)", 
427                       ExpVector.EVTDEG(c) >=
428                       ExpVector.EVTDEG(a) );
429            assertTrue("tdeg(a+b) >= tdeg(b)", 
430                       ExpVector.EVTDEG(c) >=
431                       ExpVector.EVTDEG(b) );
432    
433            c = a.lcm(b);
434            assertTrue("tdeg(lcm(a,b)) >= tdeg(a)", 
435                       ExpVector.EVTDEG(c) >=
436                       ExpVector.EVTDEG(a) );
437            assertTrue("tdeg(lcm(a,b)) >= tdeg(b)", 
438                       ExpVector.EVTDEG(c) >=
439                       ExpVector.EVTDEG(b) );
440        }
441    
442        /**
443         * Test weighted.
444         * 
445         */
446        public void testWeightdeg2() {
447            a = ExpVector.create( 100 );
448            assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0 );
449            assertTrue("wdeg(a) = 0", ExpVector.EVWDEG(null,a) == 0 );
450    
451            float q = (float) 0.2;
452    
453            a = ExpVector.EVRAND(5,10,q);
454            b = ExpVector.EVRAND(5,10,q);
455            long [][] w = new long [][] { new long[] { 1l, 1l, 1l, 1l, 1l } };
456    
457            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
458            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
459    
460            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
461            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
462    
463            assertEquals("tdeg(a) == wdeg(a)", ExpVector.EVTDEG(a), ExpVector.EVWDEG(w,a) );
464            assertEquals("tdeg(b) == wdeg(b)", ExpVector.EVTDEG(b), ExpVector.EVWDEG(w,b) );
465    
466            c = a.sum(b);
467            assertTrue("wdeg(a+b) >= wdeg(a)", 
468                       ExpVector.EVWDEG(w,c) >=
469                       ExpVector.EVWDEG(w,a) );
470            assertTrue("wdeg(a+b) >= wdeg(b)", 
471                       ExpVector.EVWDEG(w,c) >=
472                       ExpVector.EVWDEG(w,b) );
473    
474            c = a.lcm(b);
475            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
476                       ExpVector.EVWDEG(w,c) >=
477                       ExpVector.EVWDEG(w,a) );
478            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
479                       ExpVector.EVWDEG(w,c) >=
480                       ExpVector.EVWDEG(w,b) );
481    
482    
483            w = new long [][] { new long[] { 10l, 1l, 3l, 9l, 100l } };
484    
485            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
486            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
487    
488            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
489            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
490    
491            assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w,a) );
492            assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w,b) );
493    
494            c = a.sum(b);
495            assertTrue("wdeg(a+b) >= wdeg(a)", 
496                       ExpVector.EVWDEG(w,c) >=
497                       ExpVector.EVWDEG(w,a) );
498            assertTrue("wdeg(a+b) >= wdeg(b)", 
499                       ExpVector.EVWDEG(w,c) >=
500                       ExpVector.EVWDEG(w,b) );
501    
502            c = a.lcm(b);
503            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
504                       ExpVector.EVWDEG(w,c) >=
505                       ExpVector.EVWDEG(w,a) );
506            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
507                       ExpVector.EVWDEG(w,c) >=
508                       ExpVector.EVWDEG(w,b) );
509    
510    
511            w = new long [][] { new long[] { 10l, 1l, 3l, 9l, 100l },
512                                new long[] { 1l,  1l, 1l, 1l,   1l }  };
513    
514            assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0 );
515            assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0 );
516    
517            assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w,a) >= 0 );
518            assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w,b) >= 0 );
519    
520            assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w,a) );
521            assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w,b) );
522    
523            c = a.sum(b);
524            assertTrue("wdeg(a+b) >= wdeg(a)", 
525                       ExpVector.EVWDEG(w,c) >=
526                       ExpVector.EVWDEG(w,a) );
527            assertTrue("wdeg(a+b) >= wdeg(b)", 
528                       ExpVector.EVWDEG(w,c) >=
529                       ExpVector.EVWDEG(w,b) );
530    
531            c = a.lcm(b);
532            assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", 
533                       ExpVector.EVWDEG(w,c) >=
534                       ExpVector.EVWDEG(w,a) );
535            assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", 
536                       ExpVector.EVWDEG(w,c) >=
537                       ExpVector.EVWDEG(w,b) );
538    
539        }
540    
541    
542        /**
543         * Test dependency on variables.
544         * 
545         */
546        public void testDependency2() {
547            int[] exp;
548            int[] dep;
549    
550            a = ExpVector.create(10,5,2l);
551            exp = new int[] { 5 };
552            dep = a.dependencyOnVariables();
553            assertTrue("[5] = [5]",Arrays.equals(exp,dep));
554    
555            b = ExpVector.create(10,3,9l);
556            exp = new int[] { 3 };
557            dep = b.dependencyOnVariables();
558            assertTrue("[3] = [3]",Arrays.equals(exp,dep));
559    
560            c = a.sum(b);
561            exp = new int[] { 3, 5 };
562            dep = c.dependencyOnVariables();
563            assertTrue("[3,5] = [3,5] "+Arrays.toString(exp)+","+Arrays.toString(dep),Arrays.equals(exp,dep));
564    
565            b = ExpVector.create(10);
566            exp = new int[] { };
567            dep = b.dependencyOnVariables();
568            assertTrue("[] = []",Arrays.equals(exp,dep));
569    
570            b = ExpVector.create(0);
571            exp = new int[] { };
572            dep = b.dependencyOnVariables();
573            assertTrue("[] = []",Arrays.equals(exp,dep));
574    
575            b = ExpVector.create(1,0,1l);
576            exp = new int[] { 0 };
577            dep = b.dependencyOnVariables();
578            assertTrue("[0] = [0]",Arrays.equals(exp,dep));
579        }
580    
581    
582        /**
583         * Test evaluation.
584         * 
585         */
586        public void testEvaluation() {
587            float q = (float) 0.2;
588            int rl = 5;
589    
590            a = ExpVector.EVRAND(rl,10,q);
591            b = ExpVector.EVRAND(rl,10,q);
592            BigInteger fv = new BigInteger(0);
593            List<BigInteger> v = new ArrayList<BigInteger>(a.length());
594            for ( int i = 0; i < a.length(); i++ ) {
595                v.add( fv.random(4) );
596            }
597    
598            BigInteger av = a.evaluate(fv,v);
599            BigInteger bv = b.evaluate(fv,v);
600    
601            c = a.sum(b);
602            BigInteger cv = c.evaluate(fv,v);
603            BigInteger dv = av.multiply(bv);
604    
605            assertEquals("a(v)*b(v) = (a+b)(v) ", cv, dv);
606    
607            c = ExpVector.create(rl);
608            cv = c.evaluate(fv,v);
609            dv = fv.getONE();
610            assertEquals("0(v) = 1 ", cv, dv);
611    
612            v.clear();
613            for ( int i = 0; i < a.length(); i++ ) {
614                v.add( fv.getZERO() );
615            }
616            cv = c.evaluate(fv,v);
617            dv = fv.getONE();
618            assertEquals("0(0) = 1 ", cv, dv);
619    
620            av = a.evaluate(fv,v);
621            if ( a.isZERO() ) {
622                dv = fv.getONE();
623                assertEquals("0(0) = 1 ", av, dv);
624            } else {
625                dv = fv.getZERO();
626                assertEquals("a(0) = 0 ", av, dv);
627            } 
628        }
629    
630    }