61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package cmap
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"fmt"
							 | 
						||
| 
								 | 
							
									"go-admin/pkg/utility"
							 | 
						||
| 
								 | 
							
									"hash/crc32"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 离散性测试
							 | 
						||
| 
								 | 
							
								func Test_fnv32(t *testing.T) {
							 | 
						||
| 
								 | 
							
									st := make(map[uint32]int)
							 | 
						||
| 
								 | 
							
									for i := 0; i < 1000000; i++ {
							 | 
						||
| 
								 | 
							
										fnv := crc32.ChecksumIEEE([]byte(utility.GenerateRandString(8)))
							 | 
						||
| 
								 | 
							
										k := fnv & 15
							 | 
						||
| 
								 | 
							
										count, ok := st[k]
							 | 
						||
| 
								 | 
							
										if !ok {
							 | 
						||
| 
								 | 
							
											st[k] = 1
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										st[k] = count + 1
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									for k, v := range st {
							 | 
						||
| 
								 | 
							
										fmt.Println(k, "\t", float64(v)/1000000)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// go test -bench=_QE_ -benchmem -run=^$
							 | 
						||
| 
								 | 
							
								// -benchtime 默认为1秒  -benchmem 获得内存分配的统计数据
							 | 
						||
| 
								 | 
							
								// Benchmark_QE_1-6          146641              8192 ns/op              32 B/op          3 allocs/op
							 | 
						||
| 
								 | 
							
								// Benchmark_QE_2-6          143118              8246 ns/op              40 B/op          4 allocs/op
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Benchmark_QE_1-6          146289              8212 ns/op              32 B/op          3 allocs/op
							 | 
						||
| 
								 | 
							
								// Benchmark_QE_2-6          144918              8239 ns/op              40 B/op          4 allocs/op
							 | 
						||
| 
								 | 
							
								func Benchmark_QE_1(b *testing.B) {
							 | 
						||
| 
								 | 
							
									for i := 0; i < b.N; i++ {
							 | 
						||
| 
								 | 
							
										fnv32(utility.GenerateRandString(8))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func Benchmark_QE_2(b *testing.B) {
							 | 
						||
| 
								 | 
							
									for i := 0; i < b.N; i++ {
							 | 
						||
| 
								 | 
							
										crc32.ChecksumIEEE([]byte(utility.GenerateRandString(8)))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// go test -bench=_QE2_ -benchmem -benchtime=5s -run=^$
							 | 
						||
| 
								 | 
							
								// -benchtime 默认为1秒  -benchmem 获得内存分配的统计数据
							 | 
						||
| 
								 | 
							
								// Benchmark_QE2_1-6       1000000000               0.2623 ns/op          0 B/op          0 allocs/op
							 | 
						||
| 
								 | 
							
								// Benchmark_QE2_2-6       1000000000               0.2631 ns/op          0 B/op          0 allocs/op
							 | 
						||
| 
								 | 
							
								func Benchmark_QE2_1(b *testing.B) {
							 | 
						||
| 
								 | 
							
									for i := 0; i < b.N; i++ {
							 | 
						||
| 
								 | 
							
										_ = i & 31
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func Benchmark_QE2_2(b *testing.B) {
							 | 
						||
| 
								 | 
							
									for i := 0; i < b.N; i++ {
							 | 
						||
| 
								 | 
							
										_ = i % 31
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |