Initial revision
[cacao.git] / tests / fptest.java
1 /***************************** alpha/ngen.c ************************************
2
3         Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
4
5         See file COPYRIGHT for information on usage and disclaimer of warranties
6
7         Contains the codegenerator for an Alpha processor.
8         This module generates Alpha machine code for a sequence of
9         pseudo commands (ICMDs).
10
11         Authors: Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
12                  Reinhard Grafl      EMAIL: cacao@complang.tuwien.ac.at
13
14         Last Change: 1998/08/10
15
16 *******************************************************************************/
17
18 public class fptest {
19         public static void main(String [] s) {
20
21                 float  fnan  = Float.NaN;
22                 float  fpinf = Float.POSITIVE_INFINITY;
23                 float  fninf = Float.NEGATIVE_INFINITY;
24                 float  fmax  = Float.MAX_VALUE;
25                 float  fmin  = Float.MIN_VALUE;
26                 float  f1    = 0F;
27                 float  f2    = 0F;
28
29                 double dnan  = Double.NaN;
30                 double dpinf = Double.POSITIVE_INFINITY;
31                 double dninf = Double.NEGATIVE_INFINITY;
32                 double dmax  = Double.MAX_VALUE;
33                 double dmin  = Double.MIN_VALUE;
34                 double d1    = 0D;
35                 double d2    = 0D;
36                 
37                 p("---------------------------- tests NaNs and Infs -------------------");
38                 p("------------------- print NaNs and Infs");
39
40                 p("NaNQ ", fnan);
41                 p("+INF ", fpinf);
42                 p("-INF ", fninf);
43
44                 p("NaNQ ", dnan);
45                 p("+INF ", dpinf);
46                 p("-INF ", dninf);
47
48                 p("------------------- test zero division");
49
50                 zerodiv("0 / 0 = NaNQ ",  0F, f1);
51                 zerodiv("+ / 0 = +INF ",  5F, f1);
52                 zerodiv("- / 0 = -INF ", -5F, f1);
53
54                 zerodiv("0 / 0 = NaNQ ",  0D, d1);
55                 zerodiv("+ / 0 = +INF ",  5D, d1);
56                 zerodiv("- / 0 = -INF ", -5D, d1);
57
58                 p("------------------- test conversions");
59                 testfcvt("NaNQ", fnan, dnan);
60                 testfcvt("+INF", fpinf, dpinf);
61                 testfcvt("-INF", fninf, dninf);
62                 testfcvt(" MAX",  fmax, dmax);
63                 testfcvt(" MIN",  fmin, dmin);
64                 testfcvt("MAXINT-1",  2147483646.0F, 2147483646.0D);
65                 testfcvt("MAXINT+0",  2147483647.0F, 2147483647.0D);
66                 testfcvt("MAXINT+1",  2147483648.0F, 2147483648.0D);
67                 testfcvt("-MAXINT+1",  -2147483647.0F, -2147483647.0D);
68                 testfcvt("-MAXINT+0",  -2147483648.0F, -2147483648.0D);
69                 testfcvt("-MAXINT-1",  -2147483649.0F, -2147483649.0D);
70                 testfcvt("MAXLNG-1",  9223372036854775806.0F, 9223372036854775806.0D);
71                 testfcvt("MAXLNG+0",  9223372036854775807.0F, 9223372036854775807.0D);
72                 testfcvt("MAXLNG+1",  9223372036854775808.0F, 9223372036854775808.0D);
73                 testfcvt("-MAXLNG+1",  -9223372036854775807.0F, -9223372036854775807.0D);
74                 testfcvt("-MAXLNG+0",  -9223372036854775808.0F, -9223372036854775808.0D);
75                 testfcvt("-MAXLNG-1",  -9223372036854775809.0F, -9223372036854775809.0D);
76
77                 p("------------------- test NaNQ op value");
78                 testfops("NaNQ", "5.0", fnan, 5F, dnan, 5D);
79                 testfcmp("NaNQ", "5.0", fnan, 5F, dnan, 5D);
80
81                 p("------------------- test value op NaNQ");
82                 testfops("5.0", "NaNQ", 5F, fnan, 5D, dnan);
83                 testfcmp("5.0", "NaNQ", 5F, fnan, 5D, dnan);
84
85                 p("------------------- test +INF op value");
86                 testfops("+INF", "5.0", fpinf, 5F, dpinf, 5D);
87                 testfcmp("+INF", "5.0", fpinf, 5F, dpinf, 5D);
88
89                 p("------------------- test +INF op value");
90                 testfops("5.0", "+INF", 5F, fpinf, 5D, dpinf);
91                 testfcmp("5.0", "+INF", 5F, fpinf, 5D, dpinf);
92
93                 p("------------------- test -INF op value");
94                 testfops("-INF", "5.0", fninf, 5F, dninf, 5D);
95                 testfcmp("-INF", "5.0", fninf, 5F, dninf, 5D);
96
97                 p("------------------- test -INF op value");
98                 testfops("5.0", "-INF", 5F, fninf, 5D, dninf);
99                 testfcmp("5.0", "-INF", 5F, fninf, 5D, dninf);
100
101                 p("------------------- test MAX op value");
102                 testfops("MAX", "5.0", fmax, 5F, dmax, 5D);
103
104                 p("------------------- test value op MAX");
105                 testfops("5.0", "MAX", 5F, fmax, 5D, dmax);
106
107                 p("------------------- test MIN op value");
108                 testfops("MIN", "5.0", fmin, 5F, dmin, 5D);
109
110                 p("------------------- test value op MIN");
111                 testfops("5.0", "MIN", 5F, fmin, 5D, dmin);
112
113                 }
114                 
115         public static void zerodiv(String s, float f1, float f2) {
116                 p(s, f1 / f2);
117                 }
118
119         public static void zerodiv(String s, double d1, double d2) {
120                 p(s, d1 / d2);
121                 }
122
123         public static void testfcvt(String s1, float f1, double d1) {
124                 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (int)  f1);
125                 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (int)  d1);
126                 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (long) f1);
127                 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (long) d1);
128                 }
129
130         public static void testfops(String s1, String s2, float f1, float f2,
131                                    double d1, double d2) {
132                 p(s1 + " + " + s2 + " = ", f1 + f2);
133                 p(s1 + " - " + s2 + " = ", f1 - f2);
134                 p(s1 + " * " + s2 + " = ", f1 * f2);
135                 p(s1 + " / " + s2 + " = ", f1 / f2);
136                 p(s1 + " % " + s2 + " = ", f1 % f2);
137                 p(s1 + " + " + s2 + " = ", d1 + d2);
138                 p(s1 + " - " + s2 + " = ", d1 - d2);
139                 p(s1 + " * " + s2 + " = ", d1 * d2);
140                 p(s1 + " / " + s2 + " = ", d1 / d2);
141                 p(s1 + " % " + s2 + " = ", d1 % d2);
142                 }
143
144         public static void testfcmp(String s1, String s2, float f1, float f2,
145                                    double d1, double d2) {
146
147                 if ( (f1 == f2)) p(" (" + s1 + " == " + s2 + ") = true");
148                 else             p(" (" + s1 + " == " + s2 + ") = false");
149                 if ( (f1 != f2)) p(" (" + s1 + " != " + s2 + ") = true");
150                 else             p(" (" + s1 + " != " + s2 + ") = false");
151                 if ( (f1 <  f2)) p(" (" + s1 + " <  " + s2 + ") = true");
152                 else             p(" (" + s1 + " <  " + s2 + ") = false");
153                 if ( (f1 <= f2)) p(" (" + s1 + " <= " + s2 + ") = true");
154                 else             p(" (" + s1 + " <= " + s2 + ") = false");
155                 if ( (f1 >  f2)) p(" (" + s1 + " >  " + s2 + ") = true");
156                 else             p(" (" + s1 + " >  " + s2 + ") = false");
157                 if ( (f1 >= f2)) p(" (" + s1 + " >= " + s2 + ") = true");
158                 else             p(" (" + s1 + " >= " + s2 + ") = false");
159
160                 if (!(f1 == f2)) p("!(" + s1 + " == " + s2 + ") = true");
161                 else             p("!(" + s1 + " == " + s2 + ") = false");
162                 if (!(f1 != f2)) p("!(" + s1 + " != " + s2 + ") = true");
163                 else             p("!(" + s1 + " != " + s2 + ") = false");
164                 if (!(f1 <  f2)) p("!(" + s1 + " <  " + s2 + ") = true");
165                 else             p("!(" + s1 + " <  " + s2 + ") = false");
166                 if (!(f1 <= f2)) p("!(" + s1 + " <= " + s2 + ") = true");
167                 else             p("!(" + s1 + " <= " + s2 + ") = false");
168                 if (!(f1 >  f2)) p("!(" + s1 + " >  " + s2 + ") = true");
169                 else             p("!(" + s1 + " >  " + s2 + ") = false");
170                 if (!(f1 >= f2)) p("!(" + s1 + " >= " + s2 + ") = true");
171                 else             p("!(" + s1 + " >= " + s2 + ") = false");
172
173                 if ( (d1 == d2)) p(" (" + s1 + " == " + s2 + ") = true");
174                 else             p(" (" + s1 + " == " + s2 + ") = false");
175                 if ( (d1 != d2)) p(" (" + s1 + " != " + s2 + ") = true");
176                 else             p(" (" + s1 + " != " + s2 + ") = false");
177                 if ( (d1 <  d2)) p(" (" + s1 + " <  " + s2 + ") = true");
178                 else             p(" (" + s1 + " <  " + s2 + ") = false");
179                 if ( (d1 <= d2)) p(" (" + s1 + " <= " + s2 + ") = true");
180                 else             p(" (" + s1 + " <= " + s2 + ") = false");
181                 if ( (d1 >  d2)) p(" (" + s1 + " >  " + s2 + ") = true");
182                 else             p(" (" + s1 + " >  " + s2 + ") = false");
183                 if ( (d1 >= d2)) p(" (" + s1 + " >= " + s2 + ") = true");
184                 else             p(" (" + s1 + " >= " + s2 + ") = false");
185
186                 if (!(d1 == d2)) p("!(" + s1 + " == " + s2 + ") = true");
187                 else             p("!(" + s1 + " == " + s2 + ") = false");
188                 if (!(d1 != d2)) p("!(" + s1 + " != " + s2 + ") = true");
189                 else             p("!(" + s1 + " != " + s2 + ") = false");
190                 if (!(d1 <  d2)) p("!(" + s1 + " <  " + s2 + ") = true");
191                 else             p("!(" + s1 + " <  " + s2 + ") = false");
192                 if (!(d1 <= d2)) p("!(" + s1 + " <= " + s2 + ") = true");
193                 else             p("!(" + s1 + " <= " + s2 + ") = false");
194                 if (!(d1 >  d2)) p("!(" + s1 + " >  " + s2 + ") = true");
195                 else             p("!(" + s1 + " >  " + s2 + ") = false");
196                 if (!(d1 >= d2)) p("!(" + s1 + " >= " + s2 + ") = true");
197                 else             p("!(" + s1 + " >= " + s2 + ") = false");
198                 }
199
200         // ********************* output methods ****************************
201
202         public static int linenum = 0;
203
204         public static void pnl() {
205                 int i;
206
207                 System.out.println();
208                 for (i = 4 - Integer.toString(linenum).length(); i > 0; i--)
209                         System.out.print(' ');
210                 System.out.print(linenum);
211                 System.out.print(".    ");
212                 linenum++;
213                 }
214
215         public static void p(String a) {
216                 System.out.print(a); pnl();
217                 }
218         public static void p(boolean a) {
219                 System.out.print(a); pnl();
220                 }
221         public static void p(int a) {
222                 System.out.print("int:    "); System.out.print(a); pnl();
223                 }
224         public static void p(long a) {
225                 System.out.print("long:   "); System.out.print(a); pnl();
226                 }
227         public static void p(short a) {
228                 System.out.print("short:  "); System.out.print(a); pnl();
229                 }
230         public static void p(byte a) {
231                 System.out.print("byte:   "); System.out.print(a); pnl();
232                 }
233         public static void p(char a) {
234                 System.out.print("char:   "); System.out.print((int)a); pnl();
235                 }
236         public static void p(float a) {
237                 System.out.print("float:  "); System.out.print(a); pnl();
238                 }
239         public static void p(double a) {
240                 System.out.print("double: "); System.out.print(a); pnl();
241                 }
242
243         public static void p(String s, boolean i) { 
244                 System.out.print(s); p(i);
245                 }
246         public static void p(String s, int i) { 
247                 System.out.print(s); p(i);
248                 }
249         public static void p(String s, byte i) { 
250                 System.out.print(s); p(i);
251                 }
252         public static void p(String s, char i) { 
253                 System.out.print(s); p(i);
254                 }
255         public static void p(String s, short i) { 
256                 System.out.print(s); p(i);
257                 }
258         public static void p(String s, long l) { 
259                 System.out.print(s); p(l);
260                 }
261         public static void p(String s, float f) { 
262                 System.out.print(s); p(f);
263                 }
264         public static void p(String s, double d) {
265                 System.out.print(s); p(d);
266                 }
267
268         }