1 /* 2 * Copyright (C) 2024 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 17 // Note that $opt$ is a marker for the optimizing compiler to test 18 // it does compile the method, and that $noinline$ is a marker to 19 // test that it does not inline it. 20 21 public class SignumTest { 22 main()23 public static void main() { 24 signumFloat(); 25 signumFloat_noinline(); 26 signumDouble(); 27 signumDouble_noinline(); 28 } 29 signumFloat()30 private static void signumFloat() { 31 assertEquals(Math.signum(123.4f), 1.0f); 32 assertEquals(Math.signum(-56.7f), -1.0f); 33 assertEquals(Math.signum(7e30f), 1.0f); 34 assertEquals(Math.signum(-0.3e30f), -1.0f); 35 assertEquals(Math.signum(Float.MAX_VALUE), 1.0f); 36 assertEquals(Math.signum(-Float.MAX_VALUE), -1.0f); 37 assertEquals(Math.signum(Float.MIN_VALUE), 1.0f); 38 assertEquals(Math.signum(-Float.MIN_VALUE), -1.0f); 39 assertEquals(Math.signum(0.0f), 0.0f); 40 assertEquals(Math.signum(-0.0f), -0.0f); 41 assertEquals(Math.signum(Float.POSITIVE_INFINITY), 1.0f); 42 assertEquals(Math.signum(Float.NEGATIVE_INFINITY), -1.0f); 43 assertEquals(Math.signum(Float.NaN), Float.NaN); 44 assertEquals(Math.signum(Float.MIN_NORMAL), 1.0f); 45 assertEquals(Math.signum(-Float.MIN_NORMAL), -1.0f); 46 assertEquals(Math.signum(0x0.0002P-126f), 1.0f); 47 assertEquals(Math.signum(-0x0.0002P-126f), -1.0f); 48 } 49 $opt$noinline$signumFloat(float a)50 private static float $opt$noinline$signumFloat(float a) { 51 return Math.signum(a); 52 } 53 signumFloat_noinline()54 private static void signumFloat_noinline() { 55 assertEquals($opt$noinline$signumFloat(123.4f), 1.0f); 56 assertEquals($opt$noinline$signumFloat(-56.7f), -1.0f); 57 assertEquals($opt$noinline$signumFloat(7e30f), 1.0f); 58 assertEquals($opt$noinline$signumFloat(-0.3e30f), -1.0f); 59 assertEquals($opt$noinline$signumFloat(Float.MAX_VALUE), 1.0f); 60 assertEquals($opt$noinline$signumFloat(-Float.MAX_VALUE), -1.0f); 61 assertEquals($opt$noinline$signumFloat(Float.MIN_VALUE), 1.0f); 62 assertEquals($opt$noinline$signumFloat(-Float.MIN_VALUE), -1.0f); 63 assertEquals($opt$noinline$signumFloat(0.0f), 0.0f); 64 assertEquals($opt$noinline$signumFloat(-0.0f), -0.0f); 65 assertEquals($opt$noinline$signumFloat(Float.POSITIVE_INFINITY), 1.0f); 66 assertEquals($opt$noinline$signumFloat(Float.NEGATIVE_INFINITY), -1.0f); 67 assertEquals($opt$noinline$signumFloat(Float.NaN), Float.NaN); 68 assertEquals($opt$noinline$signumFloat(Float.MIN_NORMAL), 1.0f); 69 assertEquals($opt$noinline$signumFloat(-Float.MIN_NORMAL), -1.0f); 70 assertEquals($opt$noinline$signumFloat(0x0.0002P-126f), 1.0f); 71 assertEquals($opt$noinline$signumFloat(-0x0.0002P-126f), -1.0f); 72 } 73 signumDouble()74 private static void signumDouble() { 75 assertEquals(Math.signum(123.4d), 1.0d); 76 assertEquals(Math.signum(-56.7d), -1.0d); 77 assertEquals(Math.signum(7e30d), 1.0d); 78 assertEquals(Math.signum(-0.3e30d), -1.0d); 79 assertEquals(Math.signum(Double.MAX_VALUE), 1.0d); 80 assertEquals(Math.signum(-Double.MAX_VALUE), -1.0d); 81 assertEquals(Math.signum(Double.MIN_VALUE), 1.0d); 82 assertEquals(Math.signum(-Double.MIN_VALUE), -1.0d); 83 assertEquals(Math.signum(0.0d), 0.0d); 84 assertEquals(Math.signum(-0.0d), -0.0d); 85 assertEquals(Math.signum(Double.POSITIVE_INFINITY), 1.0d); 86 assertEquals(Math.signum(Double.NEGATIVE_INFINITY), -1.0d); 87 assertEquals(Math.signum(Double.NaN), Double.NaN); 88 assertEquals(Math.signum(Double.MIN_NORMAL), 1.0d); 89 assertEquals(Math.signum(-Double.MIN_NORMAL), -1.0d); 90 assertEquals(Math.signum(0x0.00000001P-1022), 1.0d); 91 assertEquals(Math.signum(-0x0.00000001P-1022), -1.0d); 92 } 93 $opt$noinline$signumDouble(double a)94 private static double $opt$noinline$signumDouble(double a) { 95 return Math.signum(a); 96 } 97 signumDouble_noinline()98 private static void signumDouble_noinline() { 99 assertEquals($opt$noinline$signumDouble(123.4d), 1.0d); 100 assertEquals($opt$noinline$signumDouble(-56.7d), -1.0d); 101 assertEquals($opt$noinline$signumDouble(7e30d), 1.0d); 102 assertEquals($opt$noinline$signumDouble(-0.3e30d), -1.0d); 103 assertEquals($opt$noinline$signumDouble(Double.MAX_VALUE), 1.0d); 104 assertEquals($opt$noinline$signumDouble(-Double.MAX_VALUE), -1.0d); 105 assertEquals($opt$noinline$signumDouble(Double.MIN_VALUE), 1.0d); 106 assertEquals($opt$noinline$signumDouble(-Double.MIN_VALUE), -1.0d); 107 assertEquals($opt$noinline$signumDouble(0.0d), 0.0d); 108 assertEquals($opt$noinline$signumDouble(-0.0d), -0.0d); 109 assertEquals($opt$noinline$signumDouble(Double.POSITIVE_INFINITY), 1.0d); 110 assertEquals($opt$noinline$signumDouble(Double.NEGATIVE_INFINITY), -1.0d); 111 assertEquals($opt$noinline$signumDouble(Double.NaN), Double.NaN); 112 assertEquals($opt$noinline$signumDouble(Double.MIN_NORMAL), 1.0d); 113 assertEquals($opt$noinline$signumDouble(-Double.MIN_NORMAL), -1.0d); 114 assertEquals($opt$noinline$signumDouble(0x0.00000001P-1022), 1.0d); 115 assertEquals($opt$noinline$signumDouble(-0x0.00000001P-1022), -1.0d); 116 } 117 assertEquals(float calculated, float expected)118 private static void assertEquals(float calculated, float expected) { 119 if (0 != Float.compare(calculated, expected)) { 120 throw new Error("Expected: " + expected + ", found: " + calculated); 121 } 122 } 123 assertEquals(double calculated, double expected)124 private static void assertEquals(double calculated, double expected) { 125 if (0 != Double.compare(calculated, expected)) { 126 throw new Error("Expected: " + expected + ", found: " + calculated); 127 } 128 } 129 130 } 131