學習參考網站:
學習Go迭代
https://studygolang.gitbook.io/learn-go-with-tests/go-ji-chu/iteration
for i:=0; i < length; i++ { // 注意不能使用++i
// code
}
學習Go數組與切片
https://studygolang.gitbook.io/learn-go-with-tests/go-ji-chu/arrays-and-slices
數組允許你以特定的順序在變量中儲存相同類型的多個元素
數組是值類型,而且申請的時候要明確數組的長度
var newArray = [intNum] int {初始化變量}
切片可以允許你申請不定長度的數組,而且它們是引用類型
var newArray = [] int {初始化變量}
課程要求
參考:《Learn Go with tests》
作業2:完成該教程“迭代”章節的練習,理解TDD
、重構、測試、基准測試等概念。自己選擇一個算法如“快排”,模仿教程內容結構,寫一個Go語言某算法實現TDD實踐報告
教程迭代的練習:
package iteration func Repeat(character string, num int) string { var repeated string for i := 0; i < num; i++ { repeated = repeated + character } return repeated }package iteration
import "testing" func TestRepeat(t *testing.T) { repeated := Repeat("a", 5) expected := "aaaaa" if repeated != expected { t.Errorf("expected '%q' but got '%q'", expected, repeated) } } func BenchmarkRepeat(b *testing.B) { for i := 0; i < b.N; i++ { Repeat("a", 5); } }
運行結果:
自己設計的符合TDD模式,快排算法
參考:
https://www.runoob.com/w3cnote/quick-sort.html
package quickSort func adjustArr(arr [] int, findex, lindex int) (int) { // return mid mid := (int)((findex + lindex) / 2) temp1 := arr[findex] arr[findex] = arr[mid] arr[mid] = temp1 index := findex + 1 for i:=findex + 1; i <= lindex; i++{ if (arr[i] < arr[findex]) { temp2 := arr[i] arr[i] = arr[index] arr[index] = temp2 index++ } } index = index - 1 temp1 = arr[findex] arr[findex] = arr[index] arr[index] = temp1 return index } func QuickSort(arr [] int, findex, lindex int) () { if findex >= lindex { return } mid := adjustArr(arr, findex, lindex) QuickSort(arr, findex, mid - 1) QuickSort(arr, mid + 1, lindex) return }
package quickSort import "testing" import "fmt" func TestQuickSort(t *testing.T) { var arr1 = [] int {3, 2, 1, 6, 7} detail_test(arr1, len(arr1), t) var arr2 = [] int {4,2,1,10,39,234,3,2,1,6,7} detail_test(arr2, len(arr2), t) var arr3 = [] int {4,2,1,10,39,234,3,2,1,6,7,0,52,123,2415,1234,656,253,245,12,3,4,12,51,52,13,1235,1234,656,13} detail_test(arr3, len(arr3), t) } func detail_test(arr [] int, length int, t *testing.T)() { QuickSort(arr, 0, length - 1) for i := 0; i < length - 1; i++ { fmt.Printf("%d ", arr[i]) if arr[i] > arr[i + 1] { t.Errorf("%d ", arr[i]) } } fmt.Printf("%d \n", arr[length - 1]); }
運行結果:
經驗教訓:
被測試函數 必須以大寫字母開頭
測試函數 Test + 被測試函數名