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 android.core;
18
19import junit.framework.TestCase;
20import android.test.suitebuilder.annotation.SmallTest;
21
22/**
23 * Tests for basic functionality of floats and doubles.
24 */
25public class FloatDoubleTest extends TestCase {
26
27    @SmallTest
28    public void testFloatDouble() throws Exception {
29        Double d = Double.valueOf(1.0);
30        Float f = Float.valueOf(1.0f);
31        Object o = new Object();
32
33        assertFalse(f.equals(d));
34        assertFalse(d.equals(f));
35        assertFalse(f.equals(o));
36        assertFalse(d.equals(o));
37        assertFalse(f.equals(null));
38        assertFalse(d.equals(null));
39    }
40
41    @SmallTest
42    public void testFloat() throws Exception {
43        float pz = 0.0f;
44        float nz = -0.0f;
45
46        float pzero = 1.0f / Float.POSITIVE_INFINITY;
47        float nzero = 1.0f / Float.NEGATIVE_INFINITY;
48
49        // Everything compares as '=='
50        assertTrue(pz == pz);
51        assertTrue(pz == nz);
52        assertTrue(pz == pzero);
53        assertTrue(pz == nzero);
54
55        assertTrue(nz == pz);
56        assertTrue(nz == nz);
57        assertTrue(nz == pzero);
58        assertTrue(nz == nzero);
59
60        assertTrue(pzero == pz);
61        assertTrue(pzero == nz);
62        assertTrue(pzero == pzero);
63        assertTrue(pzero == nzero);
64
65        assertTrue(nzero == pz);
66        assertTrue(nzero == nz);
67        assertTrue(nzero == pzero);
68        assertTrue(nzero == nzero);
69
70        // +-0 are distinct as Floats
71        assertEquals(Float.valueOf(pz), Float.valueOf(pz));
72        assertTrue(!Float.valueOf(pz).equals(Float.valueOf(nz)));
73        assertEquals(Float.valueOf(pz), Float.valueOf(pzero));
74        assertTrue(!Float.valueOf(pz).equals(Float.valueOf(nzero)));
75
76        assertTrue(!Float.valueOf(nz).equals(Float.valueOf(pz)));
77        assertEquals(Float.valueOf(nz), Float.valueOf(nz));
78        assertTrue(!Float.valueOf(nz).equals(Float.valueOf(pzero)));
79        assertEquals(Float.valueOf(nz), Float.valueOf(nzero));
80
81        assertEquals(Float.valueOf(pzero), Float.valueOf(pz));
82        assertTrue(!Float.valueOf(pzero).equals(Float.valueOf(nz)));
83        assertEquals(Float.valueOf(pzero), Float.valueOf(pzero));
84        assertTrue(!Float.valueOf(pzero).equals(Float.valueOf(nzero)));
85
86        assertTrue(!Float.valueOf(nzero).equals(Float.valueOf(pz)));
87        assertEquals(Float.valueOf(nzero), Float.valueOf(nz));
88        assertTrue(!Float.valueOf(nzero).equals(Float.valueOf(pzero)));
89        assertEquals(Float.valueOf(nzero), Float.valueOf(nzero));
90
91        // Nan's compare as equal
92        Float sqrtm2 = Float.valueOf((float) Math.sqrt(-2.0f));
93        Float sqrtm3 = Float.valueOf((float) Math.sqrt(-3.0f));
94        assertEquals(sqrtm2, sqrtm3);
95    }
96
97    @SmallTest
98    public void testDouble() throws Exception {
99        double pz = 0.0;
100        double nz = -0.0;
101
102        double pzero = 1.0 / Double.POSITIVE_INFINITY;
103        double nzero = 1.0 / Double.NEGATIVE_INFINITY;
104
105        // Everything compares as '=='
106        assertTrue(pz == pz);
107        assertTrue(pz == nz);
108        assertTrue(pz == pzero);
109        assertTrue(pz == nzero);
110
111        assertTrue(nz == pz);
112        assertTrue(nz == nz);
113        assertTrue(nz == pzero);
114        assertTrue(nz == nzero);
115
116        assertTrue(pzero == pz);
117        assertTrue(pzero == nz);
118        assertTrue(pzero == pzero);
119        assertTrue(pzero == nzero);
120
121        assertTrue(nzero == pz);
122        assertTrue(nzero == nz);
123        assertTrue(nzero == pzero);
124        assertTrue(nzero == nzero);
125
126        // +-0 are distinct as Doubles
127        assertEquals(Double.valueOf(pz), Double.valueOf(pz));
128        assertTrue(!Double.valueOf(pz).equals(Double.valueOf(nz)));
129        assertEquals(Double.valueOf(pz), Double.valueOf(pzero));
130        assertTrue(!Double.valueOf(pz).equals(Double.valueOf(nzero)));
131
132        assertTrue(!Double.valueOf(nz).equals(Double.valueOf(pz)));
133        assertEquals(Double.valueOf(nz), Double.valueOf(nz));
134        assertTrue(!Double.valueOf(nz).equals(Double.valueOf(pzero)));
135        assertEquals(Double.valueOf(nz), Double.valueOf(nzero));
136
137        assertEquals(Double.valueOf(pzero), Double.valueOf(pz));
138        assertTrue(!Double.valueOf(pzero).equals(Double.valueOf(nz)));
139        assertEquals(Double.valueOf(pzero), Double.valueOf(pzero));
140        assertTrue(!Double.valueOf(pzero).equals(Double.valueOf(nzero)));
141
142        assertTrue(!Double.valueOf(nzero).equals(Double.valueOf(pz)));
143        assertEquals(Double.valueOf(nzero), Double.valueOf(nz));
144        assertTrue(!Double.valueOf(nzero).equals(Double.valueOf(pzero)));
145        assertEquals(Double.valueOf(nzero), Double.valueOf(nzero));
146
147        // Nan's compare as equal
148        Double sqrtm2 = Double.valueOf(Math.sqrt(-2.0));
149        Double sqrtm3 = Double.valueOf(Math.sqrt(-3.0));
150        assertEquals(sqrtm2, sqrtm3);
151    }
152}
153