001/*
002 * $Id: ExpVectorTest.java 4678 2013-10-27 12:39:44Z kredel $
003 */
004
005package edu.jas.poly;
006
007
008import java.util.Arrays;
009import java.util.List;
010import java.util.ArrayList;
011
012import junit.framework.Test;
013import junit.framework.TestCase;
014import junit.framework.TestSuite;
015
016import org.apache.log4j.BasicConfigurator;
017
018import edu.jas.arith.BigInteger;
019
020
021/**
022 * ExpVector tests with JUnit.
023 * Tests arithmetic operations, for comparison tests see TermOrderTest. 
024 * @author Heinz Kredel.
025 */
026
027public 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}