001    /*
002     * $Id: ListUtilTest.java 3443 2010-12-25 16:49:30Z kredel $
003     */
004    
005    package edu.jas.util;
006    
007    
008    import java.util.ArrayList;
009    import java.util.List;
010    
011    import junit.framework.Test;
012    import junit.framework.TestCase;
013    import junit.framework.TestSuite;
014    
015    import edu.jas.arith.BigInteger;
016    import edu.jas.structure.RingElem;
017    import edu.jas.structure.UnaryFunctor;
018    
019    
020    /**
021     * ListUtil tests with JUnit.
022     * @author Heinz Kredel.
023     */
024    public 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     */
134    class 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    }