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