Don't treat inner classes as test classes with ant.
[fits.git] / src / nom / tam / fits / test / ImageTest.java
1 package nom.tam.fits.test;
2
3 import org.junit.Test;
4 import static org.junit.Assert.assertEquals;
5 import junit.framework.JUnit4TestAdapter;
6
7 import nom.tam.image.*;
8 import nom.tam.util.*;
9 import nom.tam.fits.*;
10
11 import java.io.File;
12
13 /** Test the ImageHDU, ImageData and ImageTiler classes.
14  *    - multiple HDU's in a single file
15  *    - deferred input of HDUs
16  *    - creating and reading arrays of all permitted types.
17  *    - Tiles of 1, 2 and 3 dimensions
18  *        - from a file
19  *        - from internal data
20  *    - Multiple tiles extracted from an image.
21  */
22 public class ImageTest {
23
24     @Test
25     public void test() throws Exception {
26
27         Fits f = new Fits();
28
29         byte[][] bimg = new byte[40][40];
30         for (int i = 10; i < 30; i += 1) {
31             for (int j = 10; j < 30; j += 1) {
32                 bimg[i][j] = (byte) (i + j);
33             }
34         }
35
36         short[][] simg = (short[][]) ArrayFuncs.convertArray(bimg, short.class);
37         int[][] iimg = (int[][]) ArrayFuncs.convertArray(bimg, int.class);
38         long[][] limg = (long[][]) ArrayFuncs.convertArray(bimg, long.class);
39         float[][] fimg = (float[][]) ArrayFuncs.convertArray(bimg, float.class);
40         double[][] dimg = (double[][]) ArrayFuncs.convertArray(bimg, double.class);
41         int[][][] img3 = new int[10][20][30];
42         for (int i = 0; i < 10; i += 1) {
43             for (int j = 0; j < 20; j += 1) {
44                 for (int k = 0; k < 30; k += 1) {
45                     img3[i][j][k] = i + j + k;
46                 }
47             }
48         }
49
50         double[] img1 = (double[]) ArrayFuncs.flatten(dimg);
51
52         // Make HDUs of various types.
53         f.addHDU(Fits.makeHDU(bimg));
54         f.addHDU(Fits.makeHDU(simg));
55         f.addHDU(Fits.makeHDU(iimg));
56         f.addHDU(Fits.makeHDU(limg));
57         f.addHDU(Fits.makeHDU(fimg));
58         f.addHDU(Fits.makeHDU(dimg));
59         f.addHDU(Fits.makeHDU(img3));
60         f.addHDU(Fits.makeHDU(img1));
61
62         assertEquals("HDU count before", f.getNumberOfHDUs(), 8);
63
64
65         // Write a FITS file.
66
67         BufferedFile bf = new BufferedFile("image1.fits", "rw");
68         f.write(bf);
69         bf.flush();
70         bf.close();
71         bf = null;
72
73
74         f = null;
75
76         bf = new BufferedFile("image1.fits");
77
78         // Read a FITS file
79         f = new Fits("image1.fits");
80         BasicHDU[] hdus = f.read();
81
82         assertEquals("HDU count after", f.getNumberOfHDUs(), 8);
83         assertEquals("byte image", true, ArrayFuncs.arrayEquals(bimg, hdus[0].getData().getKernel()));
84         assertEquals("short image", true, ArrayFuncs.arrayEquals(simg, hdus[1].getData().getKernel()));
85         assertEquals("int image", true, ArrayFuncs.arrayEquals(iimg, hdus[2].getData().getKernel()));
86         assertEquals("long image", true, ArrayFuncs.arrayEquals(limg, hdus[3].getData().getKernel()));
87         assertEquals("float image", true, ArrayFuncs.arrayEquals(fimg, hdus[4].getData().getKernel()));
88         assertEquals("double image", true, ArrayFuncs.arrayEquals(dimg, hdus[5].getData().getKernel()));
89         assertEquals("int3 image", true, ArrayFuncs.arrayEquals(img3, hdus[6].getData().getKernel()));
90         assertEquals("double1 image", true, ArrayFuncs.arrayEquals(img1, hdus[7].getData().getKernel()));
91     }
92
93     @Test
94     public void fileTest() throws Exception {
95
96         byte[][] bimg = new byte[40][40];
97         for (int i = 10; i < 30; i += 1) {
98             for (int j = 10; j < 30; j += 1) {
99                 bimg[i][j] = (byte) (i + j);
100             }
101         }
102
103         short[][] simg = (short[][]) ArrayFuncs.convertArray(bimg, short.class);
104         int[][] iimg = (int[][]) ArrayFuncs.convertArray(bimg, int.class);
105         long[][] limg = (long[][]) ArrayFuncs.convertArray(bimg, long.class);
106         float[][] fimg = (float[][]) ArrayFuncs.convertArray(bimg, float.class);
107         double[][] dimg = (double[][]) ArrayFuncs.convertArray(bimg, double.class);
108         int[][][] img3 = new int[10][20][30];
109         for (int i = 0; i < 10; i += 1) {
110             for (int j = 0; j < 20; j += 1) {
111                 for (int k = 0; k < 30; k += 1) {
112                     img3[i][j][k] = i + j + k;
113                 }
114             }
115         }
116         double[] img1 = (double[]) ArrayFuncs.flatten(dimg);
117
118         Fits f = new Fits(new File("image1.fits"));
119         BasicHDU[] hdus = f.read();
120
121         assertEquals("fbyte image", true, ArrayFuncs.arrayEquals(bimg, hdus[0].getData().getKernel()));
122         assertEquals("fshort image", true, ArrayFuncs.arrayEquals(simg, hdus[1].getData().getKernel()));
123         assertEquals("fint image", true, ArrayFuncs.arrayEquals(iimg, hdus[2].getData().getKernel()));
124         assertEquals("flong image", true, ArrayFuncs.arrayEquals(limg, hdus[3].getData().getKernel()));
125         assertEquals("ffloat image", true, ArrayFuncs.arrayEquals(fimg, hdus[4].getData().getKernel()));
126         assertEquals("fdouble image", true, ArrayFuncs.arrayEquals(dimg, hdus[5].getData().getKernel()));
127         assertEquals("fint3 image", true, ArrayFuncs.arrayEquals(img3, hdus[6].getData().getKernel()));
128         assertEquals("fdouble1 image", true, ArrayFuncs.arrayEquals(img1, hdus[7].getData().getKernel()));
129     }
130 }