2018年8月27日月曜日

開発環境

  • macOS High Sierra - Apple (OS)
  • Emacs (Text Editor)
  • Go (プログラミング言語)

Introducing Go: Build Reliable, Scalable Programs (Caleb Doxsey (著)、O'Reilly Media)のChapter 9.(Testing)、Exercises(No. 1866)1.を取り組んでみる。

コード(Emacs)

~/go/src/introducing-go/chapter8/math/math_test.go(GOPATH="~/go")

package math

import "testing"

type testpair struct {
 values  []float64
 average float64
}

var tests = []testpair{
 {[]float64{}, 0},
 {[]float64{1}, 1},
 {[]float64{1, 2}, 1.5},
 {[]float64{1, 2, 3, 4, 5}, 3},
 {[]float64{-1, 1}, 0},
}

func TestAverage(t *testing.T) {
 for _, pair := range tests {
  v := Average(pair.values)
  if v != pair.average {
   t.Error(
    "For", pair.values,
    "expected", pair.average,
    "got", v,
   )
  }
 }
}

~/go/src/introducing-go/chapter8/math/math.go(GOPATH="~/go")

// Package math provides Min and Max functions that find the minimum and maximum
// values in a slice of float64s
package math

func Average(xs []float64) float64 {
 if len(xs) == 0 {
  return 0
 }
 total := 0.0
 for _, v := range xs {
  total += v
 }
 return total / float64(len(xs))
}

// Finds the minimum values in a slice of float64s
func Min(xs []float64) float64 {
 m := xs[0]
 for _, x := range xs[1:] {
  if x < m {
   m = x
  }
 }
 return m
}

// Finds the maxmum values in a slice of float64s
func Max(xs []float64) float64 {
 m := xs[0]
 for _, x := range xs[1:] {
  if x > m {
   m = x
  }
 }
 return m
}

入出力結果(Terminal)

$ go test
--- FAIL: TestAverage (0.00s)
 math_test.go:22: For [] expected 0 got NaN
FAIL
exit status 1
FAIL introducing-go/chapter8/math 0.005s
$ go test
PASS
ok   introducing-go/chapter8/math 0.006s
$

0 コメント:

コメントを投稿