1package goquery
2
3import (
4	"testing"
5)
6
7func BenchmarkAdd(b *testing.B) {
8	var n int
9
10	b.StopTimer()
11	sel := DocB().Find("dd")
12	b.StartTimer()
13	for i := 0; i < b.N; i++ {
14		if n == 0 {
15			n = sel.Add("h2[title]").Length()
16		} else {
17			sel.Add("h2[title]")
18		}
19	}
20	if n != 43 {
21		b.Fatalf("want 43, got %d", n)
22	}
23}
24
25func BenchmarkAddSelection(b *testing.B) {
26	var n int
27
28	b.StopTimer()
29	sel := DocB().Find("dd")
30	sel2 := DocB().Find("h2[title]")
31	b.StartTimer()
32	for i := 0; i < b.N; i++ {
33		if n == 0 {
34			n = sel.AddSelection(sel2).Length()
35		} else {
36			sel.AddSelection(sel2)
37		}
38	}
39	if n != 43 {
40		b.Fatalf("want 43, got %d", n)
41	}
42}
43
44func BenchmarkAddNodes(b *testing.B) {
45	var n int
46
47	b.StopTimer()
48	sel := DocB().Find("dd")
49	sel2 := DocB().Find("h2[title]")
50	nodes := sel2.Nodes
51	b.StartTimer()
52	for i := 0; i < b.N; i++ {
53		if n == 0 {
54			n = sel.AddNodes(nodes...).Length()
55		} else {
56			sel.AddNodes(nodes...)
57		}
58	}
59	if n != 43 {
60		b.Fatalf("want 43, got %d", n)
61	}
62}
63
64func BenchmarkAddNodesBig(b *testing.B) {
65	var n int
66
67	doc := DocW()
68	sel := doc.Find("li")
69	// make nodes > 1000
70	nodes := sel.Nodes
71	nodes = append(nodes, nodes...)
72	nodes = append(nodes, nodes...)
73	sel = doc.Find("xyz")
74	b.ResetTimer()
75
76	for i := 0; i < b.N; i++ {
77		if n == 0 {
78			n = sel.AddNodes(nodes...).Length()
79		} else {
80			sel.AddNodes(nodes...)
81		}
82	}
83	if n != 373 {
84		b.Fatalf("want 373, got %d", n)
85	}
86}
87
88func BenchmarkAndSelf(b *testing.B) {
89	var n int
90
91	b.StopTimer()
92	sel := DocB().Find("dd").Parent()
93	b.StartTimer()
94	for i := 0; i < b.N; i++ {
95		if n == 0 {
96			n = sel.AndSelf().Length()
97		} else {
98			sel.AndSelf()
99		}
100	}
101	if n != 44 {
102		b.Fatalf("want 44, got %d", n)
103	}
104}
105