bench_iteration_test.go 976 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package goquery
  2. import (
  3. "strconv"
  4. "testing"
  5. )
  6. func BenchmarkEach(b *testing.B) {
  7. var tmp, n int
  8. b.StopTimer()
  9. sel := DocW().Find("td")
  10. f := func(i int, s *Selection) {
  11. tmp++
  12. }
  13. b.StartTimer()
  14. for i := 0; i < b.N; i++ {
  15. sel.Each(f)
  16. if n == 0 {
  17. n = tmp
  18. }
  19. }
  20. if n != 59 {
  21. b.Fatalf("want 59, got %d", n)
  22. }
  23. }
  24. func BenchmarkMap(b *testing.B) {
  25. var tmp, n int
  26. b.StopTimer()
  27. sel := DocW().Find("td")
  28. f := func(i int, s *Selection) string {
  29. tmp++
  30. return strconv.Itoa(tmp)
  31. }
  32. b.StartTimer()
  33. for i := 0; i < b.N; i++ {
  34. sel.Map(f)
  35. if n == 0 {
  36. n = tmp
  37. }
  38. }
  39. if n != 59 {
  40. b.Fatalf("want 59, got %d", n)
  41. }
  42. }
  43. func BenchmarkEachWithBreak(b *testing.B) {
  44. var tmp, n int
  45. b.StopTimer()
  46. sel := DocW().Find("td")
  47. f := func(i int, s *Selection) bool {
  48. tmp++
  49. return tmp < 10
  50. }
  51. b.StartTimer()
  52. for i := 0; i < b.N; i++ {
  53. tmp = 0
  54. sel.EachWithBreak(f)
  55. if n == 0 {
  56. n = tmp
  57. }
  58. }
  59. if n != 10 {
  60. b.Fatalf("want 10, got %d", n)
  61. }
  62. }