范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

GO语言(十八)模糊测试入门(下)

  修复错误
  Reverse为了解决这个问题,如果输入不是有效的 UTF-8 ,让我们返回一个错误。
  1、编写代码
  a.在您的文本编辑器中,将现有Reverse函数替换为以下内容。 func Reverse(s string) (string, error) {     if !utf8.ValidString(s) {         return s, errors.New("input is not valid UTF-8")     }     r := []rune(s)     for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {         r[i], r[j] = r[j], r[i]     }     return string(r), nil }
  如果输入字符串包含无效的 UTF-8 字符,此更改将返回错误。
  b.由于 Reverse 函数现在返回错误,因此修改main函数以丢弃额外的错误值。将现有main功能替换为以下内容。 func main() {     input := "The quick brown fox jumped over the lazy dog"     rev, revErr := Reverse(input)     doubleRev, doubleRevErr := Reverse(rev)     fmt.Printf("original: %q ", input)     fmt.Printf("reversed: %q, err: %v ", rev, revErr)     fmt.Printf("reversed again: %q, err: %v ", doubleRev, doubleRevErr) }
  这些调用Reverse应该返回一个 nil 错误,因为输入字符串是有效的 UTF-8。
  c.您将需要导入错误和 unicode/utf8 包。main.go 中的 import 语句应如下所示。 import (     "errors"     "fmt"     "unicode/utf8" )
  d.修改reverse_test.go文件检查是否有错误,如果返回产生错误则跳过测试。 func FuzzReverse(f *testing.F) {     testcases := []string {"Hello, world", " ", "!12345"}     for _, tc := range testcases {         f.Add(tc)  // Use f.Add to provide a seed corpus     }     f.Fuzz(func(t *testing.T, orig string) {         rev, err1 := Reverse(orig)         if err1 != nil {             return         }         doubleRev, err2 := Reverse(rev)         if err2 != nil {              return         }         if orig != doubleRev {             t.Errorf("Before: %q, after: %q", orig, doubleRev)         }         if utf8.ValidString(orig) && !utf8.ValidString(rev) {             t.Errorf("Reverse produced invalid UTF-8 string %q", rev)         }     }) }
  除了返回之外,您还可以调用t.Skip()以停止执行该模糊输入。
  2、运行代码
  a.使用 go test 运行测试 $ go test PASS ok      example/fuzz  0.019s
  b.使用go test -fuzz=Fuzz进行模糊测试,几秒钟后,停止用ctrl-C模糊测试。 $ go test -fuzz=Fuzz fuzz: elapsed: 0s, gathering baseline coverage: 0/38 completed fuzz: elapsed: 0s, gathering baseline coverage: 38/38 completed, now fuzzing with 4 workers fuzz: elapsed: 3s, execs: 86342 (28778/sec), new interesting: 2 (total: 35) fuzz: elapsed: 6s, execs: 193490 (35714/sec), new interesting: 4 (total: 37) fuzz: elapsed: 9s, execs: 304390 (36961/sec), new interesting: 4 (total: 37) ... fuzz: elapsed: 3m45s, execs: 7246222 (32357/sec), new interesting: 8 (total: 41) ^Cfuzz: elapsed: 3m48s, execs: 7335316 (31648/sec), new interesting: 8 (total: 41) PASS ok      example/fuzz  228.000s
  除非您通过-fuzztime标志进行限制,否则模糊测试将一直运行,直到遇到失败的输入。如果没有发生故障,默认是永远运行,并且可以使用 中断该过程ctrl-C。
  c.使用go test -fuzz=Fuzz -fuzztime 30s。如果没有30 秒发现失败,它会在退出模糊测试。 $ go test -fuzz=Fuzz -fuzztime 30s fuzz: elapsed: 0s, gathering baseline coverage: 0/5 completed fuzz: elapsed: 0s, gathering baseline coverage: 5/5 completed, now fuzzing with 4 workers fuzz: elapsed: 3s, execs: 80290 (26763/sec), new interesting: 12 (total: 12) fuzz: elapsed: 6s, execs: 210803 (43501/sec), new interesting: 14 (total: 14) fuzz: elapsed: 9s, execs: 292882 (27360/sec), new interesting: 14 (total: 14) fuzz: elapsed: 12s, execs: 371872 (26329/sec), new interesting: 14 (total: 14) fuzz: elapsed: 15s, execs: 517169 (48433/sec), new interesting: 15 (total: 15) fuzz: elapsed: 18s, execs: 663276 (48699/sec), new interesting: 15 (total: 15) fuzz: elapsed: 21s, execs: 771698 (36143/sec), new interesting: 15 (total: 15) fuzz: elapsed: 24s, execs: 924768 (50990/sec), new interesting: 16 (total: 16) fuzz: elapsed: 27s, execs: 1082025 (52427/sec), new interesting: 17 (total: 17) fuzz: elapsed: 30s, execs: 1172817 (30281/sec), new interesting: 17 (total: 17) fuzz: elapsed: 31s, execs: 1172817 (0/sec), new interesting: 17 (total: 17) PASS ok      example/fuzz  31.025s
  模糊测试通过了!
  结论
  做得很好!您刚刚学习了在 Go 中进行模糊测试。
  完成的代码
  — main.go — package main  import (     "errors"     "fmt"     "unicode/utf8" )  func main() {     input := "The quick brown fox jumped over the lazy dog"     rev, revErr := Reverse(input)     doubleRev, doubleRevErr := Reverse(rev)     fmt.Printf("original: %q ", input)     fmt.Printf("reversed: %q, err: %v ", rev, revErr)     fmt.Printf("reversed again: %q, err: %v ", doubleRev, doubleRevErr) }  func Reverse(s string) (string, error) {     if !utf8.ValidString(s) {         return s, errors.New("input is not valid UTF-8")     }     r := []rune(s)     for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {         r[i], r[j] = r[j], r[i]     }     return string(r), nil }
  — reverse_test.go — package main  import (     "testing"     "unicode/utf8" )  func FuzzReverse(f *testing.F) {     testcases := []string{"Hello, world", " ", "!12345"}     for _, tc := range testcases {         f.Add(tc) // Use f.Add to provide a seed corpus     }     f.Fuzz(func(t *testing.T, orig string) {         rev, err1 := Reverse(orig)         if err1 != nil {             return         }         doubleRev, err2 := Reverse(rev)         if err2 != nil {             return         }         if orig != doubleRev {             t.Errorf("Before: %q, after: %q", orig, doubleRev)         }         if utf8.ValidString(orig) && !utf8.ValidString(rev) {             t.Errorf("Reverse produced invalid UTF-8 string %q", rev)         }     }) }

鸿蒙2。0。0。166更新鸿蒙陆续推送166更新,40PRO已收到并完成更新(并一个MATE20目前还未收到,可能需等待后续推送)。1。28G的更新包,含两个更新包日志。更新完成后个人感觉动画效果和整体使用OPPO真旗舰来了!骁龙895加2K120Hz屏还有120W超级快充OPPO在今年发布了全新的FindX3系列,该机上市后也受到了不少用户的喜爱,其全新的设计也引发了网友的热议。Find系列作为目前OPPO的顶级旗舰系列,其拥有众多的黑科技,这也使苹果将以iPhone13为新起点,打造顶级的影像旗舰苹果iPhone近些年在成像方面的经验和能力,与安卓旗舰相比,并没有太大的优势。根据目前的消息,苹果将以iPhone13为新起点,打造顶级影像旗舰。在更大的摄像头模组和更大的感光元华为MateX3曝光四摄加可折叠全面屏,售价惊人2021年手机市场的变化基本稳定,各家新机基本朝着全面屏和可折叠两大方向在发展,这也使得手机市场可以选择的高端旗舰机越来越多。目前的可折叠屏产品基本集中在安卓阵营,代表厂商有三星小三星GalaxyS21Ultra5G这个手机可以取代你的单反相机了如果您仍然决定将两次旅行的乐趣和冒险融入您的第一个夏季后的COVID度假之旅,那么也许是时候评估您的智能手机是否能满足两年的价值您即将留下的假期回忆。我做到了。今年夏天早些时候,当十年开发经验还会犯的7个错误,你避开了吗?在实际开发的时候经常不会马上意识到自己做了什么,只有出问题之后才会发现自己犯了什么错误。1没有使用合适的ORM数据访问层的代码总是混乱的,这点往往都是到最后了才发现。2没有学会使用没有短板的颈挂式蓝牙耳机HIFIMAN(海菲曼)BW400体验评测受疫情影响近两年TWS真无线蓝牙耳机的市场占有率不断上升,但这类耳机不适合多数剧烈运动的场景,例如跑步和骑行等运动,因为容易抖落,就算日常散步使用很多人都会不小心丢失其中一个耳塞。百元耳机又添一员大将,捷波朗Elite3全新发布作为世界上第一款蓝牙耳机的开创者,Jabra捷波朗在声学领域可谓是颇有造诣,它背靠的GN大北欧集团更是在助听器,通讯设备方面都有着不俗的成就。而按照捷波朗一向对产品品质的日臻完善要围观!HAKII运动型真无线耳机评测防水,好看,但更好听哈喽,您好!我是原呵呵,点点关注吧,更多精彩内容等着您我喜欢HAKII的HAKII运动型真无线耳机来了。此处评测的HAKII运动型真无线耳机具有更合理的贴合设计和更高的防水等级。在颜值就是生产力!Lofree洛斐小浪蓝牙机械键盘使用分享大家好我是zachal。三月初,有朋友给我发来一个键盘的众筹链接,我看过之后的第一感觉是这大概是我见过的颜值能排前三的机械键盘了,而再仔细深究更令人意外,这款键盘居然出自国产品牌L硬磕特斯拉降价!比亚迪汉推506km版车型,售20。98万,性价比更高在新能源汽车市场中,比亚迪一直占据着较多的市场份额,备受关注的当属比亚迪汉EV车型。比亚迪汉自上市以来持续引领着国内新能源轿车市场,创下了上半年中大型轿车销量榜第5名的好成绩。在中
盘点差零差评的几款手机(1)离春节是越来越近了,很多朋友喜欢在过年换手机,但是更害怕换到智商监测机,今天作者给大家推荐三款口碑接近满分的三款手机,涵盖各大价位三星GalaxyS21Ultra5G(高端)三星G蓝牙耳机圈里的颜值担当有哪些?感谢您的阅读,不考虑价位的话有小鸟TRACKAir苹果Airpodspro和漫步者w3小黄人定制版这三个在耳机圈里的颜值第一梯队。小鸟的TRACKAir系列耳机其实颜值都很高,比较有高颜值的蓝牙耳机推荐吗?高颜值的蓝牙耳机真不少,头戴蓝牙耳机真有一款挺好看的,那就是缤特力BackBeatSense。缤特力BackBeatSense的设计比较的复古,深色的耳罩皮革10级金属外梁调节,都2022苹果首场发布会新款iPhoneSE和MacBookAir将登场时间来到新的一年,苹果在2022年的首场发布会也开始出现很多消息。来自彭博社记者MarkGurman的消息称,苹果今年的第一场发布会会在三月或四月举行,往年的这个时间点都是苹果春季日媒雅虎将对员工居住地不设限坐飞机出勤亦可中新经纬1月13日电据日本共同社消息,雅虎日本公司12日宣布,撤销有关员工居住地的限制,4月起推行可住在全国任何地方的制度。上下班交通方式除以往的电车新干线和巴士等外,还允许坐飞机拒绝假期无聊综合症,这里有700万小时视频任你挑掐指一算,离春节也不过1月有余,转眼间也将迎来元旦小长假。怎样度过假期,追剧打游戏看比赛看电影上网课?随之你会发现假期居家期间如何有仪式感的度过,成为一个值得思考的问题。从手机屏幕如何降低亚马逊FBA物流的送仓成本?很多卖家都会因为仓储成本大而苦恼,尤其是使用亚马逊FBA的卖家,除了平台服务费不便宜之外,还会经常遇到政策调整的问题,最终也是导致成本增加的问题。那么,如何降低FBA发货的成本呢?戴上助听器会有杂音吗?助听器老是嗡嗡响是怎么回事?患者使用助听器后噪音很大,主要可能有三方面原因一可能是佩戴方法不正确,比如说助听器的耳塞没有戴好,就会产生一定啸叫声,可能误以为是噪声,患者应戴好耳塞或者更换耳膜二另一种情况是助听如何有效与助听器佩戴者沟通?要有效地与听力损失患者交谈,需要他们最需要的关心,耐心和体谅,虽然助听器是好帮手,但并不能恢复佩戴者的正常听觉,他们需要的是被人接受即被视作一个正常健全的人,适当的运用一些技巧,加旧iPhone反应太慢?实测发现更改地区可以让iPhone更流畅你有没有发现你的旧iPhone反应越来越慢流畅性大不如前?最近有用户发现可以通过更改手机地区提升运行速度,这疑似与当年电池门降速事件有关。据外媒PhoneArena报道,只要把iP云电脑能用来挖矿吗?可以是可以但是1个小时挖不回来1小时的云电脑钱别多想了想法不错我们先了解下什么是云电脑1)硬件资源池服务器集群中的计算能力内存网络共享存储等形成硬件资源池,既可动态扩展,也可弹性分