Open Q1mi opened 5 years ago
palindrome.go
import "strings"
func judgePalindrome(s string) bool {
runeS := []rune(strings.ToUpper(s))
start, end := 0, len(runeS)-1
for end > start {
if runeS[start] != runeS[end] {
return false
}
end--
start++
}
return true
}
palindrome_test.go
package homework
import (
"testing"
)
func TestJudgePalindrome(t *testing.T) {
tests := [][]interface{}{
{"中文回文", "杨恺是恺杨", true},
{"中文非回文", "杨恺是杨恺", false},
{"英文非回文", "are you ok?", false},
{"英文回文", "MadamImAdam", true},
{"空", "", true},
}
for _, line := range tests {
t.Run(line[0].(string), func(t *testing.T) {
s := line[1].(string)
want := line[2].(bool)
got := judgePalindrome(s)
if got != want {
t.Errorf("want %t, got %t\n", want, got)
}
})
}
}
func Huiwen(str string) bool{
//1 先将字符串转为小写
str = strings.ToLower(str)
//2 将字符串拆分成为数组
sli := strings.Split(str,"")
//3 获取切片长度
len := len(sli)
//循环数组,比较值是否相等
for i:= 0; i < (len / 2);i++{
if sli[i] != sli[len-i-1] {
return false
}
}
return true
}
// Palindrome 回文检测函数 func Palindrome(s string) bool { ab := strings.Split(s, "") for i, v := range ab { if v != ab[len(ab)-i-1] { return false } } return true }
func Huiwen(a string) bool {
var str string
//正则匹配字符
r1 := regexp.MustCompile("[^‘’,']+")
strSlic := r1.FindAllString(a, -1)
for _, val := range strSlic {
str = str + val
}
//字符串转为utf8编码切片
strslice := []rune(strings.ToLower(str))
n := len(strslice)
//循环遍历对比
for i := 0; i < n/2; i++ {
if strslice[i] != strslice[n-i-1] {
return false
}
}
return true
}
提供一种通过mock方式的单元测试用例: //solution.go type Solution interface { JudgePalindrome(s string) bool }
type App struct { S Solution }
func (a *App) judgePalindrome(s string) bool { runeS := []rune(strings.ToUpper(s)) start, end := 0, len(runeS)-1 for end > start { if runeS[start] != runeS[end] { return false } end-- start++ } return true } //go:generate mockgen -destination ../mocks/mock_solution.go -package mock -source solution.go
func TestApp_judgePalindrome(t *testing.T) { tests := []struct { name string str string want bool }{ { name: "test ok", str: "abba", want: true, }, { name: "test fail", str: "abc", want: false, },
{
name: "中文回文",
str: "你好好你",
want: true,
},
{
name: "中文非回文",
str: "思考思考是",
want: false,
},
{
name: "empty",
want: true,
str: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockSolution := mock.NewMockSolution(ctrl)
mockSolution.EXPECT().JudgePalindrome(tt.str).AnyTimes().Return(tt.want)
app := App{S: mockSolution}
if got := app.judgePalindrome(tt.str); got != tt.want {
t.Errorf("judgePalindrome() = %v, want %v", got, tt.want)
}
})
}
}
性能比较测试中,遍历b.N的作用是什么?
https://www.liwenzhou.com/posts/Go/16_test/
李文周的Blog Go语言测试 单元测试 go test