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