go/test/fixedbugs/bug447.go
Emmanuel Odeke 53fd522c0d all: make copyright headers consistent with one space after period
Follows suit with https://go-review.googlesource.com/#/c/20111.

Generated by running
$ grep -R 'Go Authors.  All' * | cut -d":" -f1 | while read F;do perl -pi -e 's/Go
Authors.  All/Go Authors. All/g' $F;done

The code in cmd/internal/unvendor wasn't changed.

Fixes #15213

Change-Id: I4f235cee0a62ec435f9e8540a1ec08ae03b1a75f
Reviewed-on: https://go-review.googlesource.com/21819
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-05-02 13:43:18 +00:00

106 lines
2 KiB
Go

// runoutput
// Copyright 2012 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.
// Issue 3804
// test all possible float -> integer conversions
package main
import (
"bytes"
"fmt"
"strings"
)
var (
intWidths = []int{8, 16, 32, 64} // int%d and uint%d
floatWidths = []int{32, 64} // float%d
)
func main() {
var names, funcs bytes.Buffer
for _, iWidth := range intWidths {
for _, typ := range []string{"int", "uint"} {
var segs bytes.Buffer
itype := fmt.Sprintf("%s%d", typ, iWidth)
names.WriteString("\ttest" + itype + ",\n")
for _, fWidth := range floatWidths {
ftype := fmt.Sprintf("float%d", fWidth)
seg := strings.Replace(testSegment, "$F", ftype, -1)
seg = strings.Replace(seg, "$I", itype, -1)
segs.WriteString(seg)
}
body := strings.Replace(testFunc, "$I", itype, -1)
if typ[0] == 'u' {
body = strings.Replace(body, "$TEST", " || i < 0", 1)
} else {
body = strings.Replace(body, "$TEST", "", 1)
}
body = strings.Replace(body, "$TESTSEGMENTS", segs.String(), 1)
funcs.WriteString(body)
}
}
program = strings.Replace(program, "$NAMES", names.String(), 1)
program = strings.Replace(program, "$FUNCS", funcs.String(), 1)
fmt.Print(program)
}
const testSegment = `
f$F := $F(f)
if math.Abs(float64(f$F) - f) < 0.05 {
if v := $I(f$F); v != $I(i) {
fmt.Printf("$I($F(%f)) = %v, expected %v\n", f, v, i)
}
}`
const testFunc =
`func test$I(f float64, i int64) {
if i != int64($I(i))$TEST {
return
}
$TESTSEGMENTS
}
`
var program =
`package main
import (
"fmt"
"math"
)
var tests = []struct {
f float64
i int64
}{
{39.7, 39},
{-39.7, -39},
{258.6, 258},
{-258.6, -258},
{65538.9, 65538},
{-65538.9, -65538},
{4294967298.8, 4294967298},
{-4294967298.8, -4294967298},
}
var funcs = []func(float64, int64){
$NAMES
}
$FUNCS
func main() {
for _, t := range tests {
for _, f := range funcs {
f(t.f, t.i)
}
}
}
`