001/*
002 * $Id$
003 */
004
005package edu.jas.util;
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 edu.jas.arith.BigInteger;
016import edu.jas.structure.RingElem;
017import edu.jas.structure.UnaryFunctor;
018
019
020/**
021 * ListUtil tests with JUnit.
022 * @author Heinz Kredel
023 */
024public class ListUtilTest extends TestCase {
025
026
027    /**
028     * main.
029     */
030    public static void main(String[] args) {
031        junit.textui.TestRunner.run(suite());
032    }
033
034
035    /**
036     * Constructs a <CODE>ListUtilTest</CODE> object.
037     * @param name String.
038     */
039    public ListUtilTest(String name) {
040        super(name);
041    }
042
043
044    /**
045 */
046    public static Test suite() {
047        TestSuite suite = new TestSuite(ListUtilTest.class);
048        return suite;
049    }
050
051
052    BigInteger ai;
053
054
055    BigInteger bi;
056
057
058    BigInteger ci;
059
060
061    BigInteger di;
062
063
064    BigInteger ei;
065
066
067    @Override
068    protected void setUp() {
069        ai = bi = ci = di = ei = null;
070    }
071
072
073    @Override
074    protected void tearDown() {
075        ai = bi = ci = di = ei = null;
076    }
077
078
079    /**
080     * Test list map.
081     * 
082     */
083    public void testListMap() {
084        ai = new BigInteger();
085        List<BigInteger> list = new ArrayList<BigInteger>();
086        for (int i = 0; i < 10; i++) {
087            list.add(ai.random(7));
088        }
089        bi = ai.getONE();
090        List<BigInteger> nl;
091        nl = ListUtil.<BigInteger, BigInteger> map(list, new Multiply<BigInteger>(bi));
092        assertEquals("list == nl ", list, nl);
093    }
094
095
096    /**
097     * Test tuple transpose.
098     * 
099     */
100    public void testTuple() {
101        ai = new BigInteger();
102        List<List<BigInteger>> tlist = new ArrayList<List<BigInteger>>();
103        int s1 = 4;
104        int s2 = 3;
105        int s = 1;
106        for (int i = 0; i < s1; i++) {
107            s *= s2;
108        }
109        //System.out.println("s = " + s);
110        for (int i = 0; i < s1; i++) {
111            List<BigInteger> list = new ArrayList<BigInteger>();
112            for (int j = 0; j < s2; j++) {
113                list.add(ai.random(7));
114            }
115            tlist.add(list);
116        }
117        //System.out.println("tlist = " + tlist);
118
119        List<List<BigInteger>> ltuple = ListUtil.<BigInteger> tupleFromList(tlist);
120        //System.out.println("ltuple = " + ltuple);
121        assertTrue("#ltuple == " + s + " ", ltuple.size() == s);
122
123        for (List<BigInteger> t : ltuple) {
124            assertTrue("#t == " + s1 + " ", t.size() == s1);
125        }
126    }
127
128}
129
130
131/**
132 * Internal scalar multiplication functor.
133 */
134class Multiply<C extends RingElem<C>> implements UnaryFunctor<C, C> {
135
136
137    C x;
138
139
140    public Multiply(C x) {
141        this.x = x;
142    }
143
144
145    public C eval(C c) {
146        return c.multiply(x);
147    }
148}