809N/A/*
2362N/A * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
809N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
809N/A *
809N/A * This code is free software; you can redistribute it and/or modify it
809N/A * under the terms of the GNU General Public License version 2 only, as
809N/A * published by the Free Software Foundation.
809N/A *
809N/A * This code is distributed in the hope that it will be useful, but WITHOUT
809N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
809N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
809N/A * version 2 for more details (a copy is included in the LICENSE file that
809N/A * accompanied this code).
809N/A *
809N/A * You should have received a copy of the GNU General Public License version
809N/A * 2 along with this work; if not, write to the Free Software Foundation,
809N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
809N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
809N/A */
809N/A
809N/A/* @test
809N/A @bug 4096278
809N/A @summary Math.abs(+0.0) wrong
809N/A @author Anand Palaniswamy
809N/A */
809N/Apublic class AbsPositiveZero {
809N/A private static boolean isPositiveZero(float f) {
809N/A return Float.floatToIntBits(f) == Float.floatToIntBits(0.0f);
809N/A }
809N/A
809N/A private static boolean isPositiveZero(double d) {
809N/A return Double.doubleToLongBits(d) == Double.doubleToLongBits(0.0d);
809N/A }
809N/A
809N/A public static void main(String[] args) throws Exception {
809N/A if (!isPositiveZero(Math.abs(-0.0d))) {
809N/A throw new Exception("abs(-0.0d) failed");
809N/A }
809N/A if (!isPositiveZero(Math.abs(+0.0d))) {
809N/A throw new Exception("abs(+0.0d) failed");
809N/A }
809N/A if (Math.abs(Double.POSITIVE_INFINITY) != Double.POSITIVE_INFINITY) {
809N/A throw new Exception("abs(+Inf) failed");
809N/A }
809N/A if (Math.abs(Double.NEGATIVE_INFINITY) != Double.POSITIVE_INFINITY) {
809N/A throw new Exception("abs(-Inf) failed");
809N/A }
809N/A double dnanval = Math.abs(Double.NaN);
809N/A if (dnanval == dnanval) {
809N/A throw new Exception("abs(NaN) failed");
809N/A }
809N/A
809N/A if (!isPositiveZero(Math.abs(-0.0f))) {
809N/A throw new Exception("abs(-0.0f) failed");
809N/A }
809N/A if (!isPositiveZero(Math.abs(+0.0f))) {
809N/A throw new Exception("abs(+0.0f) failed");
809N/A }
809N/A if (Math.abs(Float.POSITIVE_INFINITY) != Float.POSITIVE_INFINITY) {
809N/A throw new Exception("abs(+Inf) failed");
809N/A }
809N/A if (Math.abs(Float.NEGATIVE_INFINITY) != Float.POSITIVE_INFINITY) {
809N/A throw new Exception("abs(-Inf) failed");
809N/A }
809N/A float fnanval = Math.abs(Float.NaN);
809N/A if (fnanval == fnanval) {
809N/A throw new Exception("abs(NaN) failed");
809N/A }
809N/A }
809N/A}