|  | // run | 
|  |  | 
|  | // Copyright 2018 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // (-0)+0 should be 0, not -0. | 
|  |  | 
|  | package main | 
|  |  | 
|  | //go:noinline | 
|  | func add64(x float64) float64 { | 
|  | return x + 0 | 
|  | } | 
|  |  | 
|  | func testAdd64() { | 
|  | var zero float64 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/add64(negZero) != inf { | 
|  | panic("negZero+0 != posZero (64 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func sub64(x float64) float64 { | 
|  | return x - 0 | 
|  | } | 
|  |  | 
|  | func testSub64() { | 
|  | var zero float64 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/sub64(negZero) != -inf { | 
|  | panic("negZero-0 != negZero (64 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func neg64(x float64) float64 { | 
|  | return -x | 
|  | } | 
|  |  | 
|  | func testNeg64() { | 
|  | var zero float64 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/neg64(negZero) != inf { | 
|  | panic("-negZero != posZero (64 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func add32(x float32) float32 { | 
|  | return x + 0 | 
|  | } | 
|  |  | 
|  | func testAdd32() { | 
|  | var zero float32 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/add32(negZero) != inf { | 
|  | panic("negZero+0 != posZero (32 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func sub32(x float32) float32 { | 
|  | return x - 0 | 
|  | } | 
|  |  | 
|  | func testSub32() { | 
|  | var zero float32 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/sub32(negZero) != -inf { | 
|  | panic("negZero-0 != negZero (32 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func neg32(x float32) float32 { | 
|  | return -x | 
|  | } | 
|  |  | 
|  | func testNeg32() { | 
|  | var zero float32 | 
|  | inf := 1.0 / zero | 
|  | negZero := -1 / inf | 
|  | if 1/neg32(negZero) != inf { | 
|  | panic("-negZero != posZero (32 bit)") | 
|  | } | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | testAdd64() | 
|  | testSub64() | 
|  | testNeg64() | 
|  | testAdd32() | 
|  | testSub32() | 
|  | testNeg32() | 
|  | } |