36 строки
		
	
	
	
		
			682 Б
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			36 строки
		
	
	
	
		
			682 Б
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"hash/maphash"
 | |
| 	"strconv"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| var buf [8192]byte
 | |
| 
 | |
| func BenchmarkMaphash(b *testing.B) {
 | |
| 	var h maphash.Hash
 | |
| 	benchmarkHash(b, "maphash", h)
 | |
| }
 | |
| 
 | |
| func benchmarkHash(b *testing.B, str string, h maphash.Hash) {
 | |
| 	var sizes = []int{1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1024, 8192}
 | |
| 	for _, n := range sizes {
 | |
| 		b.Run(strconv.Itoa(n), func(b *testing.B) { benchmarkHashn(b, int64(n), h) })
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var total uint64
 | |
| 
 | |
| func benchmarkHashn(b *testing.B, size int64, h maphash.Hash) {
 | |
| 	b.SetBytes(size)
 | |
| 
 | |
| 	sum := make([]byte, 4)
 | |
| 
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		h.Reset()
 | |
| 		h.Write(buf[:size])
 | |
| 		sum = h.Sum(sum[:0])
 | |
| 		total += uint64(sum[0])
 | |
| 	}
 | |
| }
 | 
