首页 > 其他分享 >【go】【test】benchmark

【go】【test】benchmark

时间:2023-11-21 11:13:12浏览次数:27  
标签:nums int testing benchmark test func go

@

目录


写在前面

  • 相关博文
  • 个人博客首页
  • 免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。

go 测试

基础测试

fib.go

package main

func fib(i int) int {
	if i == 0 || i == 1{
		return 1
	}
	return  fib(i-2) + fib(i-1)
}

test_fib.go

package main

import "testing"

func BenchmarkFib(b *testing.B){
	for n:=0; n<b.N; n++{
		fib(30)
	}
}

使用

  • go test --bench .
  • go test --bench --cpu=2,4 .
  • go test --bench --benchtime=5s .

内存

generate_test.go

// generate_test.go
package main

import (
	"math/rand"
	"testing"
	"time"
)

func generateWithCap(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0, n)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
	}
	return nums
}

func generate(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
	}
	return nums
}

func BenchmarkGenerateWithCap(b *testing.B) {
	for n := 0; n < b.N; n++ {
		generateWithCap(1000000)
	}
}

func BenchmarkGenerate(b *testing.B) {
	for n := 0; n < b.N; n++ {
		generate(1000000)
	}
}

测试

  • go test -bench='Generate' .
  • go test -bench='Generate' --benchmem .

参数测试

generate_test.go

// generate_test.go
package main

import (
	"math/rand"
	"testing"
	"time"
)

func generate(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
	}
	return nums
}
func benchmarkGenerate(i int, b *testing.B) {
	for n := 0; n < b.N; n++ {
		generate(i)
	}
}

func BenchmarkGenerate1000(b *testing.B)    { benchmarkGenerate(1000, b) }
func BenchmarkGenerate10000(b *testing.B)   { benchmarkGenerate(10000, b) }
func BenchmarkGenerate100000(b *testing.B)  { benchmarkGenerate(100000, b) }
func BenchmarkGenerate1000000(b *testing.B) { benchmarkGenerate(1000000, b) }

参数测试

  • go test -bench .

timeRest

func BenchmarkFib(b *testing.B) {
	time.Sleep(time.Second * 3) // 模拟耗时准备任务
	b.ResetTimer() // 重置定时器
	for n := 0; n < b.N; n++ {
		fib(30) // run fib(30) b.N times
	}
}

  • go test -bench='Fib$' -benchtime=50x .

sort_test.go 测试开始记时⌛️和测试结束计时⌛️

// sort_test.go
package main

import (
	"math/rand"
	"testing"
	"time"
)

func generateWithCap(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0, n)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
	}
	return nums
}

func bubbleSort(nums []int) {
	for i := 0; i < len(nums); i++ {
		for j := 1; j < len(nums)-i; j++ {
			if nums[j] < nums[j-1] {
				nums[j], nums[j-1] = nums[j-1], nums[j]
			}
		}
	}
}

func BenchmarkBubbleSort(b *testing.B) {
	for n := 0; n < b.N; n++ {
		b.StopTimer()
		nums := generateWithCap(10000)
		b.StartTimer()
		bubbleSort(nums)
	}
}

测试

  • go test -bench='Sort$' .

参考资料


标签:nums,int,testing,benchmark,test,func,go
From: https://www.cnblogs.com/nones/p/17628761.html

相关文章

  • 【golang】【注释模版】
    @目录写在前面注释要求package结构体方法代码逻辑注释参考资料基础/标准库/第三方库golang导航编程规范算法|面试项目写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。注释要求统......
  • goland 无法打开问题
    下载了官网最新的goland安装包,安装完成之后,goland却无法打开了。  一番排查之后,发现是之前安装的版本有一些残留的配置项。配置项中有些文件的已经不存在了,需要去手动清理 解决方法第一步:在访达中打开软件源文件打开Finder(访达)-->Applications(应用程序)-->Go......
  • Centos7安装Mongodb社区版
    Centos7安装Mongodb社区版准备环境操作系统:Centos7安装包:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.3.tgzwindows可视化工具:Studio3T(原robot3t)/DbeaverCE安装下载wget-Omongodb.tgzhttps://fastdl.mongodb.org/linux/mongodb-li......
  • go使用context.withtimtout取消一个超时操作
    3 使用context.WithTimeout:package mainimport ("context""fmt""time")func main() {timeout := 5 * time.Secondctx, cancel := context.WithTimeout(context.Background(), timeout)defer cancel()done := make(chan bool)go func() {    // ......
  • Go基础面经题
    Go基础1.基础特性Go的优势天生支持并发,性能高。单一的标准代码格式,比其他语言更具可读性。自动垃圾收集机制比Java和Python更有效,因为它与程序同时执行。Go数据类型int,string,float,bool,array,slice,map,channel,pointer,struct,interface,meth......
  • go的类型断言跟静态转换
    Go中的类型断言与静态转换原创 TimLiu 爱发白日梦的后端 2023-10-1510:47 发表于广东收录于合集#go95个类型断言在Go中,类型断言用于提取和测试接口值的动态类型。通过断言,您可以确定接口值是否持有特定的底层具体类型,如果持有,则获取该值。下面是一个如何在Go......
  • django orm中如何创建表关系
    表与表之间的关系 一对多 多对多 一对一 没有关系判断表关系的方法:换位思考"""图书表出版社表作者表作者详情表"""图书和出版社是一对多的关系外键字段建在多的那一方book图书和作者是多对多的关系需要创建第三张表来专门存储作者与作者详情表是一对一"""fromdjang......
  • django orm对象关系映射
    orm不会帮你创建库只能创建到表的层面需要你自己提前创建好库"""#对象关系映射表 类记录 对象数据 对象属性/方法"""能够让一个不会sql语句的python程序员也能够简单快捷的操作数据库,极大的提升开发效率"""#去应用下的models.py中书写模型类 #类 模型类#表 模......
  • pycharm链接数据库 django链接MySQL
    #找到pycharmdatabase选项(三个地方查找)#选取对应的数据库下载对应的驱动"""明明链接上了数据库但是看不到表无法操作这个时候你只需要将刚刚创建的链接删除重新链接一次即可"""  #1.配置文件中配置DATABASES={'default':{'ENGINE':'django.db.back......
  • 为什么 Django 后台管理系统那么“丑”?
    哈喽大家好,我是咸鱼相信使用过Django的小伙伴都知道Django有一个默认的后台管理系统——DjangoAdmin它的UI很多年都没有发生过变化,现在看来显得有些“过时且简陋”那为什么Django的维护者却不去优化一下呢?原文作者去询问了多位维护者了解了其历史和”为什么这么设计......