benchmark_indexmatcher_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package strmatcher_test
  2. import (
  3. "testing"
  4. . "github.com/v2fly/v2ray-core/v5/common/strmatcher"
  5. )
  6. func BenchmarkLinearIndexMatcher(b *testing.B) {
  7. benchmarkIndexMatcher(b, func() IndexMatcher {
  8. return NewLinearIndexMatcher()
  9. })
  10. }
  11. func BenchmarkMphIndexMatcher(b *testing.B) {
  12. benchmarkIndexMatcher(b, func() IndexMatcher {
  13. return NewMphIndexMatcher()
  14. })
  15. }
  16. func benchmarkIndexMatcher(b *testing.B, ctor func() IndexMatcher) {
  17. b.Run("Match", func(b *testing.B) {
  18. b.Run("Domain------------", func(b *testing.B) {
  19. benchmarkMatch(b, ctor(), map[Type]bool{Domain: true})
  20. })
  21. b.Run("Domain+Full-------", func(b *testing.B) {
  22. benchmarkMatch(b, ctor(), map[Type]bool{Domain: true, Full: true})
  23. })
  24. b.Run("Domain+Full+Substr", func(b *testing.B) {
  25. benchmarkMatch(b, ctor(), map[Type]bool{Domain: true, Full: true, Substr: true})
  26. })
  27. b.Run("All-Fail----------", func(b *testing.B) {
  28. benchmarkMatch(b, ctor(), map[Type]bool{Domain: false, Full: false, Substr: false})
  29. })
  30. })
  31. b.Run("Match/Dotless", func(b *testing.B) { // Dotless domain matcher automatically inserted in DNS app when "localhost" DNS is used.
  32. b.Run("All-Succ", func(b *testing.B) {
  33. benchmarkMatch(b, ctor(), map[Type]bool{Domain: true, Full: true, Substr: true, Regex: true})
  34. })
  35. b.Run("All-Fail", func(b *testing.B) {
  36. benchmarkMatch(b, ctor(), map[Type]bool{Domain: false, Full: false, Substr: false, Regex: false})
  37. })
  38. })
  39. b.Run("MatchAny", func(b *testing.B) {
  40. b.Run("First-Full--", func(b *testing.B) {
  41. benchmarkMatchAny(b, ctor(), map[Type]bool{Full: true, Domain: true, Substr: true})
  42. })
  43. b.Run("First-Domain", func(b *testing.B) {
  44. benchmarkMatchAny(b, ctor(), map[Type]bool{Full: false, Domain: true, Substr: true})
  45. })
  46. b.Run("First-Substr", func(b *testing.B) {
  47. benchmarkMatchAny(b, ctor(), map[Type]bool{Full: false, Domain: false, Substr: true})
  48. })
  49. b.Run("All-Fail----", func(b *testing.B) {
  50. benchmarkMatchAny(b, ctor(), map[Type]bool{Full: false, Domain: false, Substr: false})
  51. })
  52. })
  53. }