|  | // Copyright 2016 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "math" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | var tests = [...]struct { | 
|  | name string | 
|  | in   float64 // used for error messages, not an input | 
|  | got  float64 | 
|  | want float64 | 
|  | }{ | 
|  | {"sqrt0", 0, math.Sqrt(0), 0}, | 
|  | {"sqrt1", 1, math.Sqrt(1), 1}, | 
|  | {"sqrt2", 2, math.Sqrt(2), math.Sqrt2}, | 
|  | {"sqrt4", 4, math.Sqrt(4), 2}, | 
|  | {"sqrt100", 100, math.Sqrt(100), 10}, | 
|  | {"sqrt101", 101, math.Sqrt(101), 10.04987562112089}, | 
|  | } | 
|  |  | 
|  | var nanTests = [...]struct { | 
|  | name string | 
|  | in   float64 // used for error messages, not an input | 
|  | got  float64 | 
|  | }{ | 
|  | {"sqrtNaN", math.NaN(), math.Sqrt(math.NaN())}, | 
|  | {"sqrtNegative", -1, math.Sqrt(-1)}, | 
|  | {"sqrtNegInf", math.Inf(-1), math.Sqrt(math.Inf(-1))}, | 
|  | } | 
|  |  | 
|  | func TestSqrtConst(t *testing.T) { | 
|  | for _, test := range tests { | 
|  | if test.got != test.want { | 
|  | t.Errorf("%s: math.Sqrt(%f): got %f, want %f\n", test.name, test.in, test.got, test.want) | 
|  | } | 
|  | } | 
|  | for _, test := range nanTests { | 
|  | if math.IsNaN(test.got) != true { | 
|  | t.Errorf("%s: math.Sqrt(%f): got %f, want NaN\n", test.name, test.in, test.got) | 
|  | } | 
|  | } | 
|  | if got := math.Sqrt(math.Inf(1)); !math.IsInf(got, 1) { | 
|  | t.Errorf("math.Sqrt(+Inf), got %f, want +Inf\n", got) | 
|  | } | 
|  | } |