my changes
[IRC.git] / Robust / src / Benchmarks / Scheduling / GC / NON_BAMBOO / lcss / TestRunner.p
1 package lcss;
2
3 public class TestRunner extends Thread {
4
5   int[] testargs;
6
7   public TestRunner(int[] args) {
8     this.testargs = args;
9   }
10
11   private Vector algb2(int x,
12       int p,
13       int q,
14       Vector ys,
15       Vector yst,
16       Vector yst1) {
17     Vector result = null;
18     if(ys.size() == 0) {
19       // algb2 _ _ [] = []
20       result = new Vector();
21     } else {
22       // algb2 k0j1 k1j1 ((y,k0j):ys)
23       int y = ((Integer)ys.elementAt(0)).intValue();
24       int yt = ((Integer)yst.elementAt(0)).intValue();
25       Vector ys2 = new Vector();
26       for(int i = 1; i < ys.size(); i++) {
27         ys2.addElement(ys.elementAt(i));
28       }
29       Vector yst2 = new Vector();
30       for(int i = 1; i < yst.size(); i++) {
31         yst2.addElement(yst.elementAt(i));
32       }
33
34       // = let kjcurr = if x == y then k0j1+1 else max k1j1 k0j
35       // in (y,kjcurr) : algb2 k0j kjcurr ys
36       int k = 0;
37       if(x == y) {
38         k = p + 1;
39       } else {
40         k = (q > yt) ? q : yt;
41       }
42       result = this.algb2(x, yt, k, ys2, yst2, yst1);
43       result.insertElementAt(new Integer(y), 0);
44       yst1.insertElementAt(new Integer(k), 0);
45     }
46     return result;
47   }
48
49   private Vector algb1(Vector xs,
50       Vector ys,
51       Vector yst) {
52     Vector result = null;
53     if(xs.size() == 0) {
54       // algb1 [] ys' = map snd ys'
55       result = yst;
56     } else {
57       // algb1 (x:xs) ys'
58       // = algb1 xs (algb2 0 0 ys')
59       int x = ((Integer)xs.elementAt(0)).intValue();
60       Vector xs1 = new Vector();
61       for(int i = 1; i < xs.size(); i++) {
62         xs1.addElement(xs.elementAt(i));
63       }
64
65       Vector yst1 = new Vector();
66       Vector ys1 = this.algb2(x, 0, 0, ys, yst, yst1);
67
68       result = this.algb1(xs1, ys1, yst1);
69     }
70     return result;
71   }
72
73   private Vector algb(Vector xs,
74       Vector ys) {
75     // algb xs ys
76     // = 0 : algb1 xs [ (y,0) | y <- ys ]
77     Vector yst = new Vector();
78     for(int i = 0; i < ys.size(); i++) {
79       yst.addElement(new Integer(0));
80     }
81     Vector result = this.algb1(xs, ys, yst);
82     result.insertElementAt(new Integer(0), 0);
83     return result;
84   }
85
86   private int findk(int k,
87       int km,
88       int m,
89       Vector v,
90       Vector vt) {
91     int result = 0;
92     if(v.size() == 0) {
93       // findk k km m [] = km
94       result = km;
95     } else {
96       // findk k km m ((x,y):xys)
97       int x = ((Integer)v.elementAt(0)).intValue();
98       int y = ((Integer)vt.elementAt(0)).intValue();
99       Vector v1 = new Vector();
100       for(int i = 1; i < v.size(); i++) {
101         v1.addElement(v.elementAt(i));
102       }
103       Vector vt1 = new Vector();
104       for(int i = 1; i < vt.size(); i++) {
105         vt1.addElement(vt.elementAt(i));
106       }
107
108       if(x + y >= m) {
109         // | x+y >= m  = findk (k+1) k  (x+y) xys
110         result = this.findk(k+1, k, x+y, v1, vt1);
111       } else {
112         // | otherwise = findk (k+1) km m     xys
113         result = this.findk(k+1, km, m, v1, vt1);
114       }
115     }
116     return result;
117   }
118
119   private Vector algc(int m,
120       int n,
121       Vector xs,
122       Vector ys,
123       Vector r) {
124     Vector result = null;
125     if(ys.size() == 0) {
126       // algc m n xs []  = id
127       result = r;
128     } else if(xs.size() == 1) {
129       // algc m n [x] ys = if x `elem` ys then (x:) else id
130       result = r;
131
132       int x = ((Integer)xs.elementAt(0)).intValue();
133       // if x `elem` ys
134       boolean iscontains = false;
135       for(int i = 0; i < ys.size(); i++) {
136         if(((Integer)ys.elementAt(i)).intValue() == x) {
137           iscontains = true;
138           i = ys.size();  // break;
139         }
140       }
141       if(iscontains) {
142         // then (x:)
143         r.insertElementAt(new Integer(x), 0);
144       }
145     } else {
146       // algc m n xs ys
147       // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
148       // where
149       // m2 = m `div` 2
150       int m2 = m/2;
151
152       // xs1 = take m2 xs
153       Vector xs1 = new Vector();
154       int i = 0;
155       for(i = 0; i < m2; i++) {
156         xs1.addElement(xs.elementAt(i));
157       }
158
159       // xs2 = drop m2 xs
160       Vector xs2 = new Vector();
161       for(; i < xs.size(); i++) {
162         xs2.addElement(xs.elementAt(i));
163       }
164
165       // l1 = algb xs1 ys
166       Vector l1 = this.algb(xs1, ys);
167
168       // l2 = reverse (algb (reverse xs2) (reverse ys))
169       Vector rxs2 = new Vector();
170       for(i = xs2.size(); i > 0; i--) {
171         rxs2.addElement(xs2.elementAt(i - 1));
172       }
173       Vector rys = new Vector();
174       for(i = ys.size(); i > 0; i--) {
175         rys.addElement(ys.elementAt(i - 1));
176       }
177       Vector rl2 = algb(rxs2, rys);
178       Vector l2 = new Vector();
179       for(i = rl2.size(); i > 0; i--) {
180         l2.addElement(rl2.elementAt(i - 1));
181       }
182
183       // k = findk 0 0 (-1) (zip l1 l2)
184       int k = this.findk(0, 0, (-1), l1, l2);
185
186       // algc m n xs ys
187       // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
188       Vector ysk = new Vector();
189       // (take k ys)
190       for(i = 0; i < k; i++) {
191         ysk.addElement(ys.elementAt(i));
192       }
193       Vector ysd = new Vector();
194       // (drop k ys)
195       for(; i < ys.size(); i++) {
196         ysd.addElement(ys.elementAt(i));
197       }
198       Vector interresult = this.algc(m-m2, n-k, xs2, ysd, r);
199       result = this.algc(m2, k, xs1, ysk, interresult);
200     }
201     return result;
202   }
203
204   public void run() {
205     Vector xs = new Vector();
206     Vector ys = new Vector();
207
208     int x1 = this.testargs[0];
209     int x2 = this.testargs[1];
210     int xfinal = this.testargs[2];
211     int xdelta = x2-x1;
212     int y1 = this.testargs[3];
213     int y2 = this.testargs[4];
214     int yfinal = this.testargs[5];
215     int ydelta = y2-y1;
216     xs.addElement(new Integer(x1));
217     for(int i = x2; i <= xfinal; ) {
218       xs.addElement(new Integer(i));
219       i += xdelta;
220     }
221     ys.addElement(new Integer(y1));
222     for(int i = y2; i <= yfinal; ) {
223       ys.addElement(new Integer(i));
224       i += ydelta;
225     }
226
227     Vector r = new Vector();
228
229     Vector result = this.algc(xs.size(), ys.size(), xs, ys, r);
230     for(int i = 0; i < result.size(); i++) {
231       int tmp = ((Integer)result.elementAt(i)).intValue();
232     }
233   }
234   public static void main(String argv[]){
235     int threadnum = THREADNUM;
236     int[] args = new int[6];
237     args[0] = 1;
238     args[1] = 2;
239     args[2] = 160;
240     args[3] = 80;
241     args[4] = 81;
242     args[5] = 240;
243     System.setgcprofileflag();
244     for(int i = 0; i < threadnum; ++i) {
245       TestRunner tr = new TestRunner(args);
246       tr.start();
247     }
248   }
249 }