benchmark_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. // Copyright (C) 2016 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package weakhash
  7. import (
  8. "context"
  9. "os"
  10. "testing"
  11. "github.com/chmduquesne/rollinghash/adler32"
  12. "github.com/chmduquesne/rollinghash/bozo32"
  13. "github.com/chmduquesne/rollinghash/buzhash32"
  14. "github.com/chmduquesne/rollinghash/buzhash64"
  15. "github.com/chmduquesne/rollinghash/rabinkarp64"
  16. )
  17. const testFile = "../model/testdata/~syncthing~file.tmp"
  18. const size = 128 << 10
  19. func BenchmarkFind1MFile(b *testing.B) {
  20. b.ReportAllocs()
  21. b.SetBytes(1 << 20)
  22. for i := 0; i < b.N; i++ {
  23. fd, err := os.Open(testFile)
  24. if err != nil {
  25. b.Fatal(err)
  26. }
  27. _, err = Find(context.Background(), fd, []uint32{0, 1, 2}, size)
  28. if err != nil {
  29. b.Fatal(err)
  30. }
  31. fd.Close()
  32. }
  33. }
  34. func BenchmarkWeakHashAdler32(b *testing.B) {
  35. data := make([]byte, size)
  36. hf := adler32.New()
  37. for i := 0; i < b.N; i++ {
  38. hf.Write(data)
  39. }
  40. hf.Sum32()
  41. b.SetBytes(size)
  42. }
  43. func BenchmarkWeakHashAdler32Roll(b *testing.B) {
  44. data := make([]byte, size)
  45. hf := adler32.New()
  46. hf.Write(data)
  47. b.ResetTimer()
  48. for i := 0; i < b.N; i++ {
  49. for i := 0; i <= size; i++ {
  50. hf.Roll('a')
  51. }
  52. }
  53. b.SetBytes(size)
  54. }
  55. func BenchmarkWeakHashRabinKarp64(b *testing.B) {
  56. data := make([]byte, size)
  57. hf := rabinkarp64.New()
  58. for i := 0; i < b.N; i++ {
  59. hf.Write(data)
  60. }
  61. hf.Sum64()
  62. b.SetBytes(size)
  63. }
  64. func BenchmarkWeakHashRabinKarp64Roll(b *testing.B) {
  65. data := make([]byte, size)
  66. hf := rabinkarp64.New()
  67. hf.Write(data)
  68. b.ResetTimer()
  69. for i := 0; i < b.N; i++ {
  70. for i := 0; i <= size; i++ {
  71. hf.Roll('a')
  72. }
  73. }
  74. b.SetBytes(size)
  75. }
  76. func BenchmarkWeakHashBozo32(b *testing.B) {
  77. data := make([]byte, size)
  78. hf := bozo32.New()
  79. for i := 0; i < b.N; i++ {
  80. hf.Write(data)
  81. }
  82. hf.Sum32()
  83. b.SetBytes(size)
  84. }
  85. func BenchmarkWeakHashBozo32Roll(b *testing.B) {
  86. data := make([]byte, size)
  87. hf := bozo32.New()
  88. hf.Write(data)
  89. b.ResetTimer()
  90. for i := 0; i < b.N; i++ {
  91. for i := 0; i <= size; i++ {
  92. hf.Roll('a')
  93. }
  94. }
  95. b.SetBytes(size)
  96. }
  97. func BenchmarkWeakHashBuzhash32(b *testing.B) {
  98. data := make([]byte, size)
  99. hf := buzhash32.New()
  100. for i := 0; i < b.N; i++ {
  101. hf.Write(data)
  102. }
  103. hf.Sum32()
  104. b.SetBytes(size)
  105. }
  106. func BenchmarkWeakHashBuzhash32Roll(b *testing.B) {
  107. data := make([]byte, size)
  108. hf := buzhash32.New()
  109. hf.Write(data)
  110. b.ResetTimer()
  111. for i := 0; i < b.N; i++ {
  112. for i := 0; i <= size; i++ {
  113. hf.Roll('a')
  114. }
  115. }
  116. b.SetBytes(size)
  117. }
  118. func BenchmarkWeakHashBuzhash64(b *testing.B) {
  119. data := make([]byte, size)
  120. hf := buzhash64.New()
  121. for i := 0; i < b.N; i++ {
  122. hf.Write(data)
  123. }
  124. hf.Sum64()
  125. b.SetBytes(size)
  126. }
  127. func BenchmarkWeakHashBuzhash64Roll(b *testing.B) {
  128. data := make([]byte, size)
  129. hf := buzhash64.New()
  130. hf.Write(data)
  131. b.ResetTimer()
  132. for i := 0; i < b.N; i++ {
  133. for i := 0; i <= size; i++ {
  134. hf.Roll('a')
  135. }
  136. }
  137. b.SetBytes(size)
  138. }