001 /*
002 * $Id: LISTTest.java 1899 2008-07-12 14:04:08Z kredel $
003 */
004
005 package edu.mas.kern;
006
007
008 import edu.jas.arith.BigRational;
009
010 import static edu.mas.kern.LIST.*;
011
012 import java.util.List;
013 import java.util.ArrayList;
014
015 import junit.framework.Test;
016 import junit.framework.TestCase;
017 import junit.framework.TestSuite;
018
019
020 /**
021 * Basic list processing tests with JUnit.
022 * @author Heinz Kredel.
023 */
024
025 public class LISTTest extends TestCase {
026
027 /**
028 * main.
029 */
030 public static void main (String[] args) {
031 junit.textui.TestRunner.run( suite() );
032 }
033
034 /**
035 * Constructs a <CODE>LISTTest</CODE> object.
036 * @param name String.
037 */
038 public LISTTest(String name) {
039 super(name);
040 }
041
042 /**
043 * suite.
044 */
045 public static Test suite() {
046 TestSuite suite= new TestSuite(LISTTest.class);
047 return suite;
048 }
049
050
051 boolean timing =false;
052
053 protected void setUp() {
054 //a = b = c = d = e = null;
055 }
056
057 protected void tearDown() {
058 //a = b = c = d = e = null;
059 }
060
061
062 /**
063 * Test static initialization LIST.
064 */
065 public void testLISTinit() {
066 LIST<Object> a = null;
067 assertTrue("a == () ", isEmpty(a) );
068 assertEquals("len(a) == 0 ", LENGTH(a), 0 );
069 a = new LIST<Object>();
070 assertTrue("a == () ", isEmpty(a) );
071 assertEquals("len(a) == 0 ", LENGTH(a), 0 );
072 //System.out.println("a = " + a);
073 a = new LIST<Object>( a.list );
074 assertTrue("a == () ", isEmpty(a) );
075 assertEquals("len(a) == 0 ", LENGTH(a), 0 );
076 }
077
078
079 /**
080 * Test static LIST creation.
081 */
082 public void testLISTcreate() {
083 Object five = 5;
084 LIST<Object> a = null;
085 assertTrue("a == () ", isEmpty(a) );
086 assertEquals("len(a) == 0 ", LENGTH(a), 0 );
087 //System.out.println("a = " + a);
088 a = LIST1( five );
089 assertFalse("a != () ", isEmpty(a) );
090 assertEquals("len(a) == 1 ", LENGTH(a), 1 );
091 //System.out.println("a = " + a);
092 a = COMP( five, a );
093 assertFalse("a != () ", isEmpty(a) );
094 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
095 //System.out.println("a = " + a);
096
097 LIST<Object> b = LIST2(five,five);
098 assertFalse("b != () ", isEmpty(b) );
099 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
100 assertTrue("a == b ", EQUAL(a,b) );
101 }
102
103
104 /**
105 * Test static LIST operations.
106 */
107 public void testLISToper() {
108 Object five = 5;
109 LIST<Object> a = LIST1( five );
110 assertFalse("a != () ", isEmpty(a) );
111 assertEquals("len(a) == 1 ", LENGTH(a), 1 );
112 a = COMP( five, a );
113 assertFalse("a != () ", isEmpty(a) );
114 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
115
116 LIST<Object> b = CINV(a);
117 assertFalse("b != () ", isEmpty(b) );
118 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
119 assertTrue("a == b ", EQUAL(a,b) );
120
121 LIST<Object> c = INV(a);
122 assertFalse("c != () ", isEmpty(c) );
123 assertEquals("len(c) == 2 ", LENGTH(c), 2 );
124 assertTrue("a == c ", EQUAL(a,c) );
125 //System.out.println("a = " + a);
126 //System.out.println("c = " + c);
127 }
128
129
130 /**
131 * Test static LIST many elements.
132 */
133 public void testLISTelems() {
134 int max = 100;
135 Object n;
136 LIST<Object> a = null;
137 for ( int i = 0; i < max; i++ ) {
138 n = i;
139 a = COMP( n, a );
140 }
141 assertFalse("a != () ", isEmpty(a) );
142 assertEquals("len(a) == "+max+" ", LENGTH(a), max );
143 //System.out.println("a = " + a);
144
145 LIST<Object> b = CINV(a);
146 assertFalse("b != () ", isEmpty(b) );
147 assertEquals("len(b) == "+max+" ", LENGTH(b), max );
148 //System.out.println("b = " + b);
149
150 b = INV( b );
151 assertFalse("b != () ", isEmpty(b) );
152 assertEquals("len(b) == "+max+" ", LENGTH(b), max );
153 //System.out.println("b = " + b);
154 assertTrue("a == INV(CINV(a)) ", EQUAL(a,b) );
155 }
156
157
158 /**
159 * Test static LIST destructive operations.
160 */
161 public void testLISTdestruct() {
162 Object n = 5;
163 LIST<Object> a = LIST1( n );
164 LIST<Object> b = LIST1( n );
165 assertEquals("len(a) == 1 ", LENGTH(a), 1 );
166 assertEquals("len(b) == 1 ", LENGTH(b), 1 );
167 SRED(a,b);
168 assertFalse("a != () ", isEmpty(a) );
169 assertFalse("b != () ", isEmpty(b) );
170 assertEquals("len(b) == 1 ", LENGTH(b), 1 );
171 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
172 //System.out.println("a = " + a);
173
174 n = 7;
175 SFIRST(a,n);
176 //System.out.println("a = " + a);
177 assertEquals("len(a) == 2 ", LENGTH(a), 2 );
178 LIST<Object> c = COMP( n, b );
179 assertEquals("len(c) == 2 ", LENGTH(c), 2 );
180 assertTrue("a == c ", EQUAL(a,c) );
181 }
182
183
184 /**
185 * Test static LIST recursive structures.
186 */
187 public void testLISTrecursive() {
188 Object n = 5;
189 LIST<Object> a = LIST1( n );
190 LIST<LIST<Object>> b = LIST2( a, a );
191 LIST<LIST<LIST<Object>>> c = LIST3( b, b, b );
192 //System.out.println("a = " + a);
193 //System.out.println("b = " + b);
194 //System.out.println("c = " + c);
195 assertEquals("len(a) == 1 ", LENGTH(a), 1 );
196 assertEquals("len(b) == 2 ", LENGTH(b), 2 );
197 assertEquals("len(c) == 3 ", LENGTH(c), 3 );
198
199 //System.out.println("EXTENT(a) = " + EXTENT(a));
200 //System.out.println("EXTENT(b) = " + EXTENT(b));
201 //System.out.println("EXTENT(c) = " + EXTENT(c));
202 assertEquals("EXTENT(a) == 1 ", EXTENT(a), 1 );
203 assertEquals("EXTENT(b) == 2 ", EXTENT(b), 2 );
204 assertEquals("EXTENT(c) == 6 ", EXTENT(c), 6 );
205
206 //System.out.println("ORDER(a) = " + ORDER(a));
207 //System.out.println("ORDER(b) = " + ORDER(b));
208 //System.out.println("ORDER(c) = " + ORDER(c));
209 assertEquals("ORDER(a) == 1 ", ORDER(a), 1 );
210 assertEquals("ORDER(b) == 2 ", ORDER(b), 2 );
211 assertEquals("ORDER(c) == 3 ", ORDER(c), 3 );
212 }
213
214
215 /**
216 * Test static LIST rational content.
217 */
218 public void testLISTcontent() {
219 int max = 5000;
220 long t0, t1;
221 BigRational cf = new BigRational(2,3);
222 BigRational n;
223 LIST<BigRational> a = null;
224 t0 = System.currentTimeMillis();
225 for ( int i = 0; i < max; i++ ) {
226 n = cf.random(5);
227 a = COMP( n, a );
228 }
229 t1 = System.currentTimeMillis();
230 if ( timing ) System.out.println("t.comp = " + (t1-t0));
231 //System.out.println("a = " + LENGTH(a));
232 assertEquals("len(a) == "+max+" ", LENGTH(a), max );
233
234 List<BigRational> b = new ArrayList<BigRational>();
235 /* is/was inefficient */
236 LIST<BigRational> ap = a;
237 t0 = System.currentTimeMillis();
238 while ( ! isEmpty( ap ) ) {
239 n = FIRST(ap); ap = RED(ap);
240 b.add( n );
241 //System.out.println("n = " + n);
242 }
243 t1 = System.currentTimeMillis();
244 if ( timing ) System.out.println("t.red = " + (t1-t0));
245 //System.out.println("b = " + b.size());
246 assertEquals("size(b) == "+max+" ", b.size(), max );
247
248 b = new ArrayList<BigRational>();
249 int len = LENGTH( a );
250 t0 = System.currentTimeMillis();
251 for ( int i = 0; i < len; i++ ) {
252 n = LELT(a,i);
253 b.add( n );
254 }
255 t1 = System.currentTimeMillis();
256 if ( timing ) System.out.println("t.lelt = " + (t1-t0));
257 //System.out.println("b = " + b.size());
258
259 LIST<BigRational> c = new LIST<BigRational>( b );
260 //System.out.println("c = " + LENGTH(c));
261 assertEquals("len(c) == "+max+" ", LENGTH(c), max );
262 assertTrue("a == c ", EQUAL(a,c) );
263 }
264
265 }