1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package libcore.java.lang;
18
19import junit.framework.TestCase;
20
21/**
22 * Tests for basic functionality of floats and doubles.
23 */
24public class OldAndroidFloatDoubleTest extends TestCase {
25
26    public void testFloatDouble() throws Exception {
27        Double d = Double.valueOf(1.0);
28        Float f = Float.valueOf(1.0f);
29        Object o = new Object();
30
31        assertFalse(f.equals(d));
32        assertFalse(d.equals(f));
33        assertFalse(f.equals(o));
34        assertFalse(d.equals(o));
35        assertFalse(f.equals(null));
36        assertFalse(d.equals(null));
37    }
38
39    public void testFloat() throws Exception {
40        float pz = 0.0f;
41        float nz = -0.0f;
42
43        float pzero = 1.0f / Float.POSITIVE_INFINITY;
44        float nzero = 1.0f / Float.NEGATIVE_INFINITY;
45
46        // Everything compares as '=='
47        assertTrue(pz == pz);
48        assertTrue(pz == nz);
49        assertTrue(pz == pzero);
50        assertTrue(pz == nzero);
51
52        assertTrue(nz == pz);
53        assertTrue(nz == nz);
54        assertTrue(nz == pzero);
55        assertTrue(nz == nzero);
56
57        assertTrue(pzero == pz);
58        assertTrue(pzero == nz);
59        assertTrue(pzero == pzero);
60        assertTrue(pzero == nzero);
61
62        assertTrue(nzero == pz);
63        assertTrue(nzero == nz);
64        assertTrue(nzero == pzero);
65        assertTrue(nzero == nzero);
66
67        // +-0 are distinct as Floats
68        assertEquals(Float.valueOf(pz), Float.valueOf(pz));
69        assertTrue(!Float.valueOf(pz).equals(Float.valueOf(nz)));
70        assertEquals(Float.valueOf(pz), Float.valueOf(pzero));
71        assertTrue(!Float.valueOf(pz).equals(Float.valueOf(nzero)));
72
73        assertTrue(!Float.valueOf(nz).equals(Float.valueOf(pz)));
74        assertEquals(Float.valueOf(nz), Float.valueOf(nz));
75        assertTrue(!Float.valueOf(nz).equals(Float.valueOf(pzero)));
76        assertEquals(Float.valueOf(nz), Float.valueOf(nzero));
77
78        assertEquals(Float.valueOf(pzero), Float.valueOf(pz));
79        assertTrue(!Float.valueOf(pzero).equals(Float.valueOf(nz)));
80        assertEquals(Float.valueOf(pzero), Float.valueOf(pzero));
81        assertTrue(!Float.valueOf(pzero).equals(Float.valueOf(nzero)));
82
83        assertTrue(!Float.valueOf(nzero).equals(Float.valueOf(pz)));
84        assertEquals(Float.valueOf(nzero), Float.valueOf(nz));
85        assertTrue(!Float.valueOf(nzero).equals(Float.valueOf(pzero)));
86        assertEquals(Float.valueOf(nzero), Float.valueOf(nzero));
87
88        // Nan's compare as equal
89        Float sqrtm2 = Float.valueOf((float) Math.sqrt(-2.0f));
90        Float sqrtm3 = Float.valueOf((float) Math.sqrt(-3.0f));
91        assertEquals(sqrtm2, sqrtm3);
92    }
93
94    public void testDouble() throws Exception {
95        double pz = 0.0;
96        double nz = -0.0;
97
98        double pzero = 1.0 / Double.POSITIVE_INFINITY;
99        double nzero = 1.0 / Double.NEGATIVE_INFINITY;
100
101        // Everything compares as '=='
102        assertTrue(pz == pz);
103        assertTrue(pz == nz);
104        assertTrue(pz == pzero);
105        assertTrue(pz == nzero);
106
107        assertTrue(nz == pz);
108        assertTrue(nz == nz);
109        assertTrue(nz == pzero);
110        assertTrue(nz == nzero);
111
112        assertTrue(pzero == pz);
113        assertTrue(pzero == nz);
114        assertTrue(pzero == pzero);
115        assertTrue(pzero == nzero);
116
117        assertTrue(nzero == pz);
118        assertTrue(nzero == nz);
119        assertTrue(nzero == pzero);
120        assertTrue(nzero == nzero);
121
122        // +-0 are distinct as Doubles
123        assertEquals(Double.valueOf(pz), Double.valueOf(pz));
124        assertTrue(!Double.valueOf(pz).equals(Double.valueOf(nz)));
125        assertEquals(Double.valueOf(pz), Double.valueOf(pzero));
126        assertTrue(!Double.valueOf(pz).equals(Double.valueOf(nzero)));
127
128        assertTrue(!Double.valueOf(nz).equals(Double.valueOf(pz)));
129        assertEquals(Double.valueOf(nz), Double.valueOf(nz));
130        assertTrue(!Double.valueOf(nz).equals(Double.valueOf(pzero)));
131        assertEquals(Double.valueOf(nz), Double.valueOf(nzero));
132
133        assertEquals(Double.valueOf(pzero), Double.valueOf(pz));
134        assertTrue(!Double.valueOf(pzero).equals(Double.valueOf(nz)));
135        assertEquals(Double.valueOf(pzero), Double.valueOf(pzero));
136        assertTrue(!Double.valueOf(pzero).equals(Double.valueOf(nzero)));
137
138        assertTrue(!Double.valueOf(nzero).equals(Double.valueOf(pz)));
139        assertEquals(Double.valueOf(nzero), Double.valueOf(nz));
140        assertTrue(!Double.valueOf(nzero).equals(Double.valueOf(pzero)));
141        assertEquals(Double.valueOf(nzero), Double.valueOf(nzero));
142
143        // Nan's compare as equal
144        Double sqrtm2 = Double.valueOf(Math.sqrt(-2.0));
145        Double sqrtm3 = Double.valueOf(Math.sqrt(-3.0));
146        assertEquals(sqrtm2, sqrtm3);
147    }
148}
149