1 /* Copyright: Thomas McGlynn 1999.
\r
2 * This code may be used for any purpose, non-commercial
\r
3 * or commercial so long as this copyright notice is retained
\r
4 * in the source code or included in or referred to in any
\r
7 package nom.tam.util.test;
\r
9 import org.junit.Test;
\r
10 import static org.junit.Assert.assertEquals;
\r
11 import junit.framework.JUnit4TestAdapter;
\r
13 import nom.tam.util.*;
\r
14 import nom.tam.util.ArrayFuncs;
\r
17 /** This class provides runs tests of the
\r
18 * BufferedI/O classes: BufferedFile, BufferedDataInputStream
\r
19 * and BufferedDataOutputStream. A limited comparison
\r
20 * to the standard I/O classes can also be made.
\r
22 * Input and output of all primitive scalar and array types is
\r
23 * tested, however input and output of String data is not.
\r
24 * Users may choose to test the BufferedFile class, the
\r
25 * BufferedDataXPUT classes array methods, the BufferedDataXPUT
\r
26 * classes using the methods of DataXput, the traditional
\r
27 * I/O classes, or any combination thereof.
\r
29 public class BufferedFileTester {
\r
31 /** Usage: java nom.tam.util.test.BufferedFileTester file [dim [iter [flags]]]
\r
33 * file is the file to be read and written.
\r
34 * dim is the dimension of the arrays to be written.
\r
35 * iter is the number of times each array is written.
\r
36 * flags a string indicating what I/O to test
\r
37 * O -- test old I/O (RandomAccessFile and standard streams)
\r
38 * R -- BufferedFile (i.e., random access)
\r
39 * S -- BufferedDataXPutStream
\r
40 * X -- BufferedDataXPutStream using standard methods
\r
42 public static void main(String[] args) throws Exception {
\r
44 String filename = args[0];
\r
46 if (args.length > 1) {
\r
47 dim = Integer.parseInt(args[1]);
\r
50 if (args.length > 2) {
\r
51 iter = Integer.parseInt(args[2]);
\r
54 System.out.println("Allocating arrays.");
\r
55 double[] db = new double[dim];
\r
56 float[] fl = new float[dim];
\r
57 int[] in = new int[dim];
\r
58 long[] ln = new long[dim];
\r
59 short[] sh = new short[dim];
\r
60 byte[] by = new byte[dim];
\r
61 char[] ch = new char[dim];
\r
62 boolean[] bl = new boolean[dim];
\r
64 System.out.println("Initializing arrays -- may take a while");
\r
66 for (int i = 0; i < dim; i += 1) {
\r
69 double x = sign * Math.pow(10., 20 * Math.random() - 10);
\r
73 if (Math.abs(x) < 1) {
\r
87 // Ensure special values are tested.
\r
89 by[0] = Byte.MIN_VALUE;
\r
90 by[1] = Byte.MAX_VALUE;
\r
92 ch[0] = Character.MIN_VALUE;
\r
93 ch[1] = Character.MAX_VALUE;
\r
95 sh[0] = Short.MAX_VALUE;
\r
96 sh[1] = Short.MIN_VALUE;
\r
98 in[0] = Integer.MAX_VALUE;
\r
99 in[1] = Integer.MIN_VALUE;
\r
101 ln[0] = Long.MIN_VALUE;
\r
102 ln[1] = Long.MAX_VALUE;
\r
104 fl[0] = Float.MIN_VALUE;
\r
105 fl[1] = Float.MAX_VALUE;
\r
106 fl[2] = Float.POSITIVE_INFINITY;
\r
107 fl[3] = Float.NEGATIVE_INFINITY;
\r
110 db[0] = Double.MIN_VALUE;
\r
111 db[1] = Double.MAX_VALUE;
\r
112 db[2] = Double.POSITIVE_INFINITY;
\r
113 db[3] = Double.NEGATIVE_INFINITY;
\r
114 db[4] = Double.NaN;
\r
117 double[] db2 = new double[dim];
\r
118 float[] fl2 = new float[dim];
\r
119 int[] in2 = new int[dim];
\r
120 long[] ln2 = new long[dim];
\r
121 short[] sh2 = new short[dim];
\r
122 byte[] by2 = new byte[dim];
\r
123 char[] ch2 = new char[dim];
\r
124 boolean[] bl2 = new boolean[dim];
\r
126 int[][][][] multi = new int[10][10][10][10];
\r
127 int[][][][] multi2 = new int[10][10][10][10];
\r
128 for (int i = 0; i < 10; i += 1) {
\r
129 multi[i][i][i][i] = i;
\r
132 if (args.length < 4 || args[3].indexOf('O') >= 0) {
\r
133 standardFileTest(filename, iter, in, in2);
\r
134 standardStreamTest(filename, iter, in, in2);
\r
137 if (args.length < 4 || args[3].indexOf('X') >= 0) {
\r
138 buffStreamSimpleTest(filename, iter, in, in2);
\r
141 if (args.length < 4 || args[3].indexOf('R') >= 0) {
\r
142 bufferedFileTest(filename, iter, db, db2, fl, fl2, ln, ln2, in, in2, sh, sh2,
\r
143 ch, ch2, by, by2, bl, bl2, multi, multi2);
\r
147 if (args.length < 4 || args[3].indexOf('S') >= 0) {
\r
148 bufferedStreamTest(filename, iter, db, db2, fl, fl2, ln, ln2, in, in2, sh, sh2,
\r
149 ch, ch2, by, by2, bl, bl2, multi, multi2);
\r
153 public static void standardFileTest(String filename, int iter, int[] in, int[] in2)
\r
155 System.out.println("Standard I/O library: java.io.RandomAccessFile");
\r
157 RandomAccessFile f = new RandomAccessFile(filename, "rw");
\r
158 int dim = in.length;
\r
161 for (int j = 0; j < iter; j += 1) {
\r
162 for (int i = 0; i < dim; i += 1) {
\r
166 System.out.println(" RAF Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
169 for (int j = 0; j < iter; j += 1) {
\r
170 for (int i = 0; i < dim; i += 1) {
\r
171 in2[i] = f.readInt();
\r
174 System.out.println(" RAF Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
179 for (int j = 0; j < iter; j += 1) {
\r
180 for (int i = 0; i < dim; i += 1) {
\r
184 System.out.println(" SyncRAF Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
187 for (int j = 0; j < iter; j += 1) {
\r
188 for (int i = 0; i < dim; i += 1) {
\r
189 in2[i] = f.readInt();
\r
193 System.out.println(" SyncRAF Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
196 public static void standardStreamTest(String filename, int iter, int[] in, int[] in2)
\r
198 System.out.println("Standard I/O library: java.io.DataXXputStream");
\r
199 System.out.println(" layered atop a BufferedXXputStream");
\r
201 DataOutputStream f = new DataOutputStream(new BufferedOutputStream(
\r
202 new FileOutputStream(filename), 32768));
\r
204 int dim = in.length;
\r
205 for (int j = 0; j < iter; j += 1) {
\r
206 for (int i = 0; i < dim; i += 1) {
\r
212 System.out.println(" DIS Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
214 DataInputStream is = new DataInputStream(new BufferedInputStream(
\r
215 new FileInputStream(filename), 32768));
\r
217 for (int j = 0; j < iter; j += 1) {
\r
218 for (int i = 0; i < dim; i += 1) {
\r
219 in2[i] = is.readInt();
\r
222 System.out.println(" DIS Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
225 f = new DataOutputStream(new BufferedOutputStream(
\r
226 new FileOutputStream(filename), 32768));
\r
230 for (int j = 0; j < iter; j += 1) {
\r
231 for (int i = 0; i < dim; i += 1) {
\r
237 System.out.println(" DIS Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
239 is = new DataInputStream(new BufferedInputStream(
\r
240 new FileInputStream(filename), 32768));
\r
242 for (int j = 0; j < iter; j += 1) {
\r
243 for (int i = 0; i < dim; i += 1) {
\r
244 in2[i] = is.readInt();
\r
248 System.out.println(" DIS Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
251 public static void buffStreamSimpleTest(String filename, int iter, int[] in, int[] in2)
\r
254 System.out.println("New libraries: nom.tam.BufferedDataXXputStream");
\r
255 System.out.println(" Using non-array I/O");
\r
256 BufferedDataOutputStream f = new BufferedDataOutputStream(
\r
257 new FileOutputStream(filename), 32768);
\r
259 int dim = in.length;
\r
260 for (int j = 0; j < iter; j += 1) {
\r
261 for (int i = 0; i < dim; i += 1) {
\r
267 System.out.println(" BDS Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
269 BufferedDataInputStream is = new BufferedDataInputStream(new BufferedInputStream(
\r
270 new FileInputStream(filename), 32768));
\r
272 for (int j = 0; j < iter; j += 1) {
\r
273 for (int i = 0; i < dim; i += 1) {
\r
274 in2[i] = is.readInt();
\r
277 System.out.println(" BDS Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
280 public static void bufferedStreamTest(String filename, int iter, double[] db, double[] db2,
\r
281 float[] fl, float[] fl2, long[] ln, long[] ln2,
\r
282 int[] in, int[] in2, short[] sh, short[] sh2,
\r
283 char[] ch, char[] ch2, byte[] by, byte[] by2,
\r
284 boolean[] bl, boolean[] bl2,
\r
285 int[][][][] multi, int[][][][] multi2) throws Exception {
\r
287 int dim = db.length;
\r
289 double ds = Math.random() - 0.5;
\r
291 float fs = (float) (Math.random() - 0.5);
\r
293 int is = (int) (1000000 * (Math.random() - 500000));
\r
295 long ls = (long) (100000000000L * (Math.random() - 50000000000L));
\r
297 short ss = (short) (60000 * (Math.random() - 30000));
\r
299 char cs = (char) (60000 * Math.random());
\r
301 byte bs = (byte) (256 * Math.random() - 128);
\r
303 boolean bls = (Math.random() > 0.5);
\r
305 System.out.println("New libraries: nom.tam.util.BufferedDataXXputStream");
\r
306 System.out.println(" Using array I/O methods");
\r
309 BufferedDataOutputStream f = new BufferedDataOutputStream(new FileOutputStream(filename));
\r
312 for (int i = 0; i < iter; i += 1) {
\r
315 System.out.println(" BDS Dbl write: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
316 for (int i = 0; i < iter; i += 1) {
\r
319 System.out.println(" BDS Flt write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
320 for (int i = 0; i < iter; i += 1) {
\r
323 System.out.println(" BDS Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
324 for (int i = 0; i < iter; i += 1) {
\r
327 System.out.println(" BDS Lng write: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
328 for (int i = 0; i < iter; i += 1) {
\r
331 System.out.println(" BDS Sht write: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
332 for (int i = 0; i < iter; i += 1) {
\r
335 System.out.println(" BDS Chr write: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
336 for (int i = 0; i < iter; i += 1) {
\r
337 f.writeArray((byte[]) by);
\r
339 System.out.println(" BDS Byt write: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
340 for (int i = 0; i < iter; i += 1) {
\r
343 System.out.println(" BDS Boo write: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
352 f.writeBoolean(bls);
\r
354 f.writeArray(multi);
\r
360 BufferedDataInputStream f = new BufferedDataInputStream(new FileInputStream(filename));
\r
364 for (int i = 0; i < iter; i += 1) {
\r
367 System.out.println(" BDS Dbl read: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
368 for (int i = 0; i < iter; i += 1) {
\r
371 System.out.println(" BDS Flt read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
372 for (int i = 0; i < iter; i += 1) {
\r
375 System.out.println(" BDS Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
376 for (int i = 0; i < iter; i += 1) {
\r
379 System.out.println(" BDS Lng read: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
380 for (int i = 0; i < iter; i += 1) {
\r
383 System.out.println(" BDS Sht read: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
384 for (int i = 0; i < iter; i += 1) {
\r
387 System.out.println(" BDS Chr read: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
388 for (int i = 0; i < iter; i += 1) {
\r
389 f.readLArray((byte[]) by2);
\r
391 System.out.println(" BDS Byt read: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
392 for (int i = 0; i < iter; i += 1) {
\r
395 System.out.println(" BDS Boo read: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
397 bs2 = f.readByte();
\r
398 cs2 = f.readChar();
\r
399 ss2 = f.readShort();
\r
401 ls2 = f.readLong();
\r
402 fs2 = f.readFloat();
\r
403 ds2 = f.readDouble();
\r
404 bls2 = f.readBoolean();
\r
406 for (int i = 0; i < 10; i += 1) {
\r
407 multi2[i][i][i][i] = 0;
\r
410 // Now read only pieces of the multidimensional array.
\r
411 for (int i = 0; i < 5; i += 1) {
\r
412 System.out.println("Multiread:" + i);
\r
413 // Skip the odd initial indices and
\r
416 f.readLArray(multi2[2 * i + 1]);
\r
421 System.out.println("Stream Verification:");
\r
422 System.out.println(" An error should be reported for double and float NaN's");
\r
423 System.out.println(" Arrays:");
\r
425 for (int i = 0; i < dim; i += 1) {
\r
427 if (db[i] != db2[i]) {
\r
428 System.out.println(" Double error at " + i + " " + db[i] + " " + db2[i]);
\r
430 if (fl[i] != fl2[i]) {
\r
431 System.out.println(" Float error at " + i + " " + fl[i] + " " + fl2[i]);
\r
433 if (in[i] != in2[i]) {
\r
434 System.out.println(" Int error at " + i + " " + in[i] + " " + in2[i]);
\r
436 if (ln[i] != ln2[i]) {
\r
437 System.out.println(" Long error at " + i + " " + ln[i] + " " + ln2[i]);
\r
439 if (sh[i] != sh2[i]) {
\r
440 System.out.println(" Short error at " + i + " " + sh[i] + " " + sh2[i]);
\r
442 if (ch[i] != ch2[i]) {
\r
443 System.out.println(" Char error at " + i + " " + (int) ch[i] + " " + (int) ch2[i]);
\r
445 if (by[i] != by2[i]) {
\r
446 System.out.println(" Byte error at " + i + " " + by[i] + " " + by2[i]);
\r
448 if (bl[i] != bl2[i]) {
\r
449 System.out.println(" Bool error at " + i + " " + bl[i] + " " + bl2[i]);
\r
453 System.out.println(" Scalars:");
\r
454 // Check the scalars.
\r
456 System.out.println(" Bool Scalar mismatch:" + bls + " " + bls2);
\r
459 System.out.println(" Byte Scalar mismatch:" + bs + " " + bs2);
\r
462 System.out.println(" Char Scalar mismatch:" + (int) cs + " " + (int) cs2);
\r
465 System.out.println(" Short Scalar mismatch:" + ss + " " + ss2);
\r
468 System.out.println(" Int Scalar mismatch:" + is + " " + is2);
\r
471 System.out.println(" Long Scalar mismatch:" + ls + " " + ls2);
\r
474 System.out.println(" Float Scalar mismatch:" + fs + " " + fs2);
\r
477 System.out.println(" Double Scalar mismatch:" + ds + " " + ds2);
\r
480 System.out.println(" Multi: odd rows should match");
\r
481 for (int i = 0; i < 10; i += 1) {
\r
482 System.out.println(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]);
\r
484 System.out.println("Done BufferedStream Tests");
\r
487 public static void bufferedFileTest(String filename, int iter, double[] db, double[] db2,
\r
488 float[] fl, float[] fl2, long[] ln, long[] ln2,
\r
489 int[] in, int[] in2, short[] sh, short[] sh2,
\r
490 char[] ch, char[] ch2, byte[] by, byte[] by2,
\r
491 boolean[] bl, boolean[] bl2,
\r
492 int[][][][] multi, int[][][][] multi2) throws Exception {
\r
495 int dim = db.length;
\r
497 double ds = Math.random() - 0.5;
\r
499 float fs = (float) (Math.random() - 0.5);
\r
501 int is = (int) (1000000 * (Math.random() - 500000));
\r
503 long ls = (long) (100000000000L * (Math.random() - 50000000000L));
\r
505 short ss = (short) (60000 * (Math.random() - 30000));
\r
507 char cs = (char) (60000 * Math.random());
\r
509 byte bs = (byte) (256 * Math.random() - 128);
\r
511 boolean bls = (Math.random() > 0.5);
\r
514 System.out.println("New libraries: nom.tam.util.BufferedFile");
\r
515 System.out.println(" Using array I/O methods.");
\r
517 BufferedFile f = new BufferedFile(filename, "rw");
\r
520 for (int i = 0; i < iter; i += 1) {
\r
523 System.out.println(" BF Dbl write: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
524 for (int i = 0; i < iter; i += 1) {
\r
527 System.out.println(" BF Flt write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
528 for (int i = 0; i < iter; i += 1) {
\r
531 System.out.println(" BF Int write: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
532 for (int i = 0; i < iter; i += 1) {
\r
535 System.out.println(" BF Lng write: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
536 for (int i = 0; i < iter; i += 1) {
\r
539 System.out.println(" BF Sht write: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
540 for (int i = 0; i < iter; i += 1) {
\r
543 System.out.println(" BF Chr write: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
544 for (int i = 0; i < iter; i += 1) {
\r
547 System.out.println(" BF Byt write: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
548 for (int i = 0; i < iter; i += 1) {
\r
551 System.out.println(" BF Boo write: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
560 f.writeBoolean(bls);
\r
562 f.writeArray(multi);
\r
567 for (int i = 0; i < iter; i += 1) {
\r
570 System.out.println(" BF Dbl read: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
571 for (int i = 0; i < iter; i += 1) {
\r
574 System.out.println(" BF Flt read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
575 for (int i = 0; i < iter; i += 1) {
\r
578 System.out.println(" BF Int read: " + (4 * dim * iter) / (1000 * deltaTime()));
\r
579 for (int i = 0; i < iter; i += 1) {
\r
582 System.out.println(" BF Lng read: " + (8 * dim * iter) / (1000 * deltaTime()));
\r
583 for (int i = 0; i < iter; i += 1) {
\r
586 System.out.println(" BF Sht read: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
587 for (int i = 0; i < iter; i += 1) {
\r
590 System.out.println(" BF Chr read: " + (2 * dim * iter) / (1000 * deltaTime()));
\r
591 for (int i = 0; i < iter; i += 1) {
\r
594 System.out.println(" BF Byt read: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
595 for (int i = 0; i < iter; i += 1) {
\r
598 System.out.println(" BF Boo read: " + (1 * dim * iter) / (1000 * deltaTime()));
\r
600 bs2 = f.readByte();
\r
601 cs2 = f.readChar();
\r
602 ss2 = f.readShort();
\r
604 ls2 = f.readLong();
\r
605 fs2 = f.readFloat();
\r
606 ds2 = f.readDouble();
\r
607 bls2 = f.readBoolean();
\r
609 // Now read only pieces of the multidimensional array.
\r
610 for (int i = 0; i < 5; i += 1) {
\r
611 // Skip the odd initial indices and
\r
614 f.readLArray(multi2[2 * i + 1]);
\r
617 System.out.println("BufferedFile Verification:");
\r
618 System.out.println(" An error should be reported for double and float NaN's");
\r
619 System.out.println(" Arrays:");
\r
621 for (int i = 0; i < dim; i += 1) {
\r
623 if (db[i] != db2[i]) {
\r
624 System.out.println(" Double error at " + i + " " + db[i] + " " + db2[i]);
\r
626 if (fl[i] != fl2[i]) {
\r
627 System.out.println(" Float error at " + i + " " + fl[i] + " " + fl2[i]);
\r
629 if (in[i] != in2[i]) {
\r
630 System.out.println(" Int error at " + i + " " + in[i] + " " + in2[i]);
\r
632 if (ln[i] != ln2[i]) {
\r
633 System.out.println(" Long error at " + i + " " + ln[i] + " " + ln2[i]);
\r
635 if (sh[i] != sh2[i]) {
\r
636 System.out.println(" Short error at " + i + " " + sh[i] + " " + sh2[i]);
\r
638 if (ch[i] != ch2[i]) {
\r
639 System.out.println(" Char error at " + i + " " + (int) ch[i] + " " + (int) ch2[i]);
\r
641 if (by[i] != by2[i]) {
\r
642 System.out.println(" Byte error at " + i + " " + by[i] + " " + by2[i]);
\r
644 if (bl[i] != bl2[i]) {
\r
645 System.out.println(" Bool error at " + i + " " + bl[i] + " " + bl2[i]);
\r
649 System.out.println(" Scalars:");
\r
650 // Check the scalars.
\r
652 System.out.println(" Bool Scalar mismatch:" + bls + " " + bls2);
\r
655 System.out.println(" Byte Scalar mismatch:" + bs + " " + bs2);
\r
658 System.out.println(" Char Scalar mismatch:" + (int) cs + " " + (int) cs2);
\r
661 System.out.println(" Short Scalar mismatch:" + ss + " " + ss2);
\r
664 System.out.println(" Int Scalar mismatch:" + is + " " + is2);
\r
667 System.out.println(" Long Scalar mismatch:" + ls + " " + ls2);
\r
670 System.out.println(" Float Scalar mismatch:" + fs + " " + fs2);
\r
673 System.out.println(" Double Scalar mismatch:" + ds + " " + ds2);
\r
676 System.out.println(" Multi: odd rows should match");
\r
677 for (int i = 0; i < 10; i += 1) {
\r
678 System.out.println(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]);
\r
680 System.out.println("Done BufferedFile Tests");
\r
682 static long lastTime;
\r
684 static void resetTime() {
\r
685 lastTime = new java.util.Date().getTime();
\r
688 static double deltaTime() {
\r
689 long time = lastTime;
\r
690 lastTime = new java.util.Date().getTime();
\r
691 return (lastTime - time) / 1000.;
\r
695 public void testBufferedFile() throws Exception {
\r
697 double[][] td = new double[100][600];
\r
698 for (int i = 0; i < 100; i += 1) {
\r
699 for (int j = 0; j < 600; j += 1) {
\r
700 td[i][j] = i + 2 * j;
\r
703 int[][][] ti = new int[5][4][3];
\r
704 for (int i = 0; i < 5; i += 1) {
\r
705 for (int j = 0; j < 4; j += 1) {
\r
706 for (int k = 0; k < 3; k += 1) {
\r
707 ti[i][j][k] = i * j * k;
\r
712 float[][] tf = new float[10][];
\r
713 for (int i = 0; i < 10; i += 1) {
\r
714 tf[i] = new float[i];
\r
715 for (int j = 0; j < i; j += 1) {
\r
716 tf[i][j] = (float) Math.sin(i * j);
\r
720 boolean[] tb = new boolean[100];
\r
721 for (int i = 2; i < 100; i += 1) {
\r
722 tb[i] = !tb[i - 1];
\r
725 short[][] ts = new short[5][5];
\r
728 byte[] tbyte = new byte[1024];
\r
729 for (int i = 0; i < tbyte.length; i += 1) {
\r
730 tbyte[i] = (byte) i;
\r
733 char[] tc = new char[10];
\r
736 long[][][] tl0 = new long[1][1][1];
\r
737 long[][][] tl1 = new long[1][1][0];
\r
739 BufferedFile bf = new BufferedFile("jtest.fil", "rw");
\r
746 bf.writeArray(tbyte);
\r
748 bf.writeArray(tl0);
\r
749 bf.writeArray(tl1);
\r
754 bf = new BufferedFile("jtest.fil", "r");
\r
756 boolean thrown = false;
\r
760 } catch (Exception e) {
\r
763 assertEquals("BufferedFile protections", true, thrown);
\r
766 } catch (Exception e) {
\r
769 bf = new BufferedFile("jtest.fil", "r");
\r
771 testArray(bf, "double", td);
\r
772 testArray(bf, "float", tf);
\r
773 testArray(bf, "int", ti);
\r
774 testArray(bf, "short", ts);
\r
775 testArray(bf, "bool", tb);
\r
776 testArray(bf, "byte", tbyte);
\r
777 testArray(bf, "char", tc);
\r
778 testArray(bf, "long1", tl0);
\r
779 testArray(bf, "longnull", tl1);
\r
780 testArray(bf, "short2", ts);
\r
784 public void testBufferedStreams() throws Exception {
\r
786 double[][] td = new double[100][600];
\r
787 for (int i = 0; i < 100; i += 1) {
\r
788 for (int j = 0; j < 600; j += 1) {
\r
789 td[i][j] = i + 2 * j;
\r
792 int[][][] ti = new int[5][4][3];
\r
793 for (int i = 0; i < 5; i += 1) {
\r
794 for (int j = 0; j < 4; j += 1) {
\r
795 for (int k = 0; k < 3; k += 1) {
\r
796 ti[i][j][k] = i * j * k;
\r
801 float[][] tf = new float[10][];
\r
802 for (int i = 0; i < 10; i += 1) {
\r
803 tf[i] = new float[i];
\r
804 for (int j = 0; j < i; j += 1) {
\r
805 tf[i][j] = (float) Math.sin(i * j);
\r
809 boolean[] tb = new boolean[100];
\r
810 for (int i = 2; i < 100; i += 1) {
\r
811 tb[i] = !tb[i - 1];
\r
814 short[][] ts = new short[5][5];
\r
817 byte[] tbyte = new byte[1024];
\r
818 for (int i = 0; i < tbyte.length; i += 1) {
\r
819 tbyte[i] = (byte) i;
\r
822 char[] tc = new char[10];
\r
825 long[][][] tl0 = new long[1][1][1];
\r
826 long[][][] tl1 = new long[1][1][0];
\r
828 BufferedDataOutputStream bf = new BufferedDataOutputStream(
\r
829 new FileOutputStream("jtest.fil"));
\r
836 bf.writeArray(tbyte);
\r
838 bf.writeArray(tl0);
\r
839 bf.writeArray(tl1);
\r
844 BufferedDataInputStream bi = new BufferedDataInputStream(
\r
845 new FileInputStream("jtest.fil"));
\r
847 testArray(bi, "sdouble", td);
\r
848 testArray(bi, "sfloat", tf);
\r
849 testArray(bi, "sint", ti);
\r
850 testArray(bi, "sshort", ts);
\r
851 testArray(bi, "sbool", tb);
\r
852 testArray(bi, "sbyte", tbyte);
\r
853 testArray(bi, "schar", tc);
\r
854 testArray(bi, "slong1", tl0);
\r
855 testArray(bi, "slongnull", tl1);
\r
856 testArray(bi, "sshort2", ts);
\r
859 void testArray(ArrayDataInput bf, String label, Object array) throws Exception {
\r
860 Object newArray = ArrayFuncs.mimicArray(array, ArrayFuncs.getBaseClass(array));
\r
861 bf.readLArray(newArray);
\r
862 boolean state = ArrayFuncs.arrayEquals(array, newArray);
\r
863 assertEquals(label, true, state);
\r