Compare commits

..
16 Commits
Author SHA1 Message Date
Martin Angers f065786d41 add NewDocumentFromReader, closes #20 2013-09-07 10:57:54 -04:00
Martin Angers e8c0a63721 document new constructor, rename to NewDocumentFromResponse 2013-07-24 08:49:11 -04:00
Martin Angers 263b827b20 Merge pull request #19 from assassingj/myfeature
add another method to get html document
2013-07-24 05:40:37 -07:00
tesla.peng 2d2b626f0d add another method to get html document 2013-07-24 18:29:10 +08:00
Martin Angers 8a4ef5dbdd add v0.3.0 tag and benchmark EachWithBreak 2013-05-24 11:40:46 -04:00
Martin Angers 948b88c36f add EachWithBreak(), fixes #13 2013-05-24 11:25:42 -04:00
Martin Angers 27b24066a6 make regexp var package-level, compiled once. fixes #11 2013-05-06 20:19:21 -04:00
Martin Angers 485b1f5575 remove exp/html from comments, closes #10 2013-05-06 20:16:13 -04:00
Martin Angers 0d8bcaa448 add benchmark with go1.1rc1 2013-05-05 11:57:50 -04:00
Martin Angers d49fa5b2a1 update readme with new version 2013-04-26 19:44:22 -04:00
Martin Angers d84f346f92 update doc now that goquery is go-getable 2013-04-26 19:40:52 -04:00
Martin Angers f5309e0304 Merge pull request #7 from matrixik/master
Update exp/html import paths, closes #7
2013-04-26 16:32:17 -07:00
Martin Angers 4bdceda6d8 fix #8 2013-03-17 10:22:49 -04:00
Martin Angers fd221b178b install notes tweaked 2013-03-17 10:21:27 -04:00
Martin Angers ee5503bf12 update install instructions 2013-03-17 10:20:13 -04:00
Dobrosław Żybort 474b169363 Update exp/html import paths 2013-02-12 20:32:16 +01:00
20 changed files with 1929 additions and 45 deletions
+3
View File
@@ -1,2 +1,5 @@
*.sublime-*
.DS_Store
*.swp
#*.*#
tags
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (c) 2012, Martin Angers & Contributors
Copyright (c) 2012-2013, Martin Angers & Contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+15 -18
View File
@@ -1,6 +1,6 @@
# goquery - a little like that j-thing, only in Go
GoQuery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on the [experimental html package][exphtml] and the CSS Selector library [cascadia][]. Since the experimental html parser returns tokens (nodes), and not a full-featured DOM object, jQuery's manipulation and modification functions have been left off (no point in modifying data in the parsed tree of the HTML, it has no effect).
GoQuery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on the experimental html package and the CSS Selector library [cascadia][]. Since the experimental html parser returns tokens (nodes), and not a full-featured DOM object, jQuery's manipulation and modification functions have been left off (no point in modifying data in the parsed tree of the HTML, it has no effect).
Supported functions are query-oriented features (`hasClass()`, `attr()` and the likes), as well as traversing functions that make sense given what we have to work with. This makes GoQuery a great library for scraping web pages.
@@ -8,26 +8,24 @@ Syntax-wise, it is as close as possible to jQuery, with the same function names
## Installation
Since this library (and cascadia) depends on the experimental branch, this package must be installed first. Both GoQuery and Cascadia expect to find the experimental library with the `"exp/html"` import statement. To install it at this location, there's [this guide][wikiexp], but since late December 2012, Go tip has evolved and `"exp/html"` won't build with Go1.0.3. So the last valid revision that will build with Go1 is `d9ff34d481bc`. Just replace the second step in [the guide][wikiexp] with this command:
$ go get github.com/PuerkitoBio/goquery
hg clone -r d9ff34d481bc https://code.google.com/p/go go-exp
(optional) To run unit tests:
$ cd $GOPATH/src/github.com/PuerkitoBio/goquery
$ go test
The rest of the guide can be followed as-is (note that you can build just the `exp/html` package, you don't have to build `exp/...`).
(optional) To run benchmarks:
Once this is done, install GoQuery:
`go get github.com/PuerkitoBio/goquery`
To run unit tests, run this command in goquery's source directory (`$GOPATH/src/github.com/PuerkitoBio/goquery`):
`go test`
To run benchmarks, run this command in goquery's source directory:
`go test -bench=".*"`
$ cd $GOPATH/src/github.com/PuerkitoBio/goquery
$ go test -bench=".*"
## Changelog
* **v0.3.2** : Add `NewDocumentFromReader()` (thanks jweir) which allows creating a goquery document from an io.Reader.
* **v0.3.1** : Add `NewDocumentFromResponse()` (thanks assassingj) which allows creating a goquery document from an http response.
* **v0.3.0** : Add `EachWithBreak()` which allows to break out of an `Each()` loop by returning false. This function was added instead of changing the existing `Each()` to avoid breaking compatibility.
* **v0.2.1** : Make go-getable, now that [go.net/html is Go1.0-compatible][gonet] (thanks to @matrixik for pointing this out).
* **v0.2.0** : Add support for negative indices in Slice(). **BREAKING CHANGE** `Document.Root` is removed, `Document` is now a `Selection` itself (a selection of one, the root element, just like `Document.Root` was before). Add jQuery's Closest() method.
* **v0.1.1** : Add benchmarks to use as baseline for refactorings, refactor Next...() and Prev...() methods to use the new html package's linked list features (Next/PrevSibling, FirstChild). Good performance boost (40+% in some cases).
* **v0.1.0** : Initial release.
@@ -102,11 +100,10 @@ The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia'
[jquery]: http://jquery.com/
[go]: http://golang.org/
[exphtml]: http://code.google.com/p/go/source/browse#hg%2Fsrc%2Fpkg%2Fexp
[cascadia]: http://code.google.com/p/cascadia/
[wikiexp]: http://code.google.com/p/go-wiki/wiki/InstallingExp
[bsd]: http://opensource.org/licenses/BSD-3-Clause
[golic]: http://golang.org/LICENSE
[caslic]: http://code.google.com/p/cascadia/source/browse/LICENSE
[doc]: http://go.pkgdoc.org/github.com/PuerkitoBio/goquery
[doc]: http://godoc.org/github.com/PuerkitoBio/goquery
[index]: http://api.jquery.com/index/
[gonet]: http://code.google.com/p/go/source/detail?r=f7f5159120f51ba0070774d3c5907969b5fe7858&repo=net
+1 -1
View File
@@ -1,7 +1,7 @@
package goquery
import (
"exp/html"
"code.google.com/p/go.net/html"
)
// First() reduces the set of matched elements to the first in the set.
+405
View File
@@ -0,0 +1,405 @@
<?xml version="1.0"?>
<!-- Generated by SVGo -->
<svg width="1024" height="768"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g style="font-size:20px;font-family:sans-serif">
<rect x="0" y="0" width="1024" height="768" style="fill:white"/>
<text x="100" y="50" style="font-size:150%"></text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="118" width="0" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="607" y="133" style="text-anchor:end">+0.10%</text>
</g>
<text x="100" y="138" style="text-anchor:start">BenchmarkFirst</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="144" width="0" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="617" y="159" style="text-anchor:start">-0.10%</text>
</g>
<text x="100" y="164" style="text-anchor:start">BenchmarkLast</text>
<g style="font-style:italic;font-size:75%">
<rect x="604" y="170" width="8" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="599" y="185" style="text-anchor:end">+2.86%</text>
</g>
<text x="100" y="190" style="text-anchor:start">BenchmarkEq</text>
<g style="font-style:italic;font-size:75%">
<rect x="604" y="196" width="8" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="599" y="211" style="text-anchor:end">+2.67%</text>
</g>
<text x="100" y="216" style="text-anchor:start">BenchmarkSlice</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="222" width="32" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="649" y="237" style="text-anchor:start">-10.82%</text>
</g>
<text x="100" y="242" style="text-anchor:start">BenchmarkGet</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="248" width="132" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="749" y="263" style="text-anchor:start">-44.06%</text>
</g>
<text x="100" y="268" style="text-anchor:start">BenchmarkIndex</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="274" width="156" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="773" y="289" style="text-anchor:start">-52.26%</text>
</g>
<text x="100" y="294" style="text-anchor:start">BenchmarkIndexSelector</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="300" width="27" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="644" y="315" style="text-anchor:start">-9.32%</text>
</g>
<text x="100" y="320" style="text-anchor:start">BenchmarkIndexOfNode</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="326" width="7" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="624" y="341" style="text-anchor:start">-2.48%</text>
</g>
<text x="100" y="346" style="text-anchor:start">BenchmarkIndexOfSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="352" width="104" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="721" y="367" style="text-anchor:start">-34.96%</text>
</g>
<text x="100" y="372" style="text-anchor:start">BenchmarkMetalReviewExample</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="378" width="177" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="794" y="393" style="text-anchor:start">-59.16%</text>
</g>
<text x="100" y="398" style="text-anchor:start">BenchmarkAdd</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="404" width="0" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="617" y="419" style="text-anchor:start">+0.00%</text>
</g>
<text x="100" y="424" style="text-anchor:start">BenchmarkAddSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="602" y="430" width="10" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="597" y="445" style="text-anchor:end">+3.47%</text>
</g>
<text x="100" y="450" style="text-anchor:start">BenchmarkAddNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="456" width="7" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="624" y="471" style="text-anchor:start">-2.51%</text>
</g>
<text x="100" y="476" style="text-anchor:start">BenchmarkAndSelf</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="482" width="41" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="658" y="497" style="text-anchor:start">-13.96%</text>
</g>
<text x="100" y="502" style="text-anchor:start">BenchmarkFilter</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="508" width="43" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="660" y="523" style="text-anchor:start">-14.53%</text>
</g>
<text x="100" y="528" style="text-anchor:start">BenchmarkNot</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="534" width="11" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="628" y="549" style="text-anchor:start">-3.81%</text>
</g>
<text x="100" y="554" style="text-anchor:start">BenchmarkFilterFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="560" width="8" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="625" y="575" style="text-anchor:start">-2.83%</text>
</g>
<text x="100" y="580" style="text-anchor:start">BenchmarkNotFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="586" width="13" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="630" y="601" style="text-anchor:start">-4.63%</text>
</g>
<text x="100" y="606" style="text-anchor:start">BenchmarkFilterNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="612" width="6" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="623" y="627" style="text-anchor:start">-2.32%</text>
</g>
<text x="100" y="632" style="text-anchor:start">BenchmarkNotNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="638" width="12" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="629" y="653" style="text-anchor:start">-4.23%</text>
</g>
<text x="100" y="658" style="text-anchor:start">BenchmarkFilterSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="664" width="9" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="626" y="679" style="text-anchor:start">-3.31%</text>
</g>
<text x="100" y="684" style="text-anchor:start">BenchmarkNotSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="690" width="101" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="718" y="705" style="text-anchor:start">-33.69%</text>
</g>
<text x="100" y="710" style="text-anchor:start">BenchmarkHas</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="716" width="13" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="630" y="731" style="text-anchor:start">-4.53%</text>
</g>
<text x="100" y="736" style="text-anchor:start">BenchmarkHasNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="742" width="15" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="632" y="757" style="text-anchor:start">-5.30%</text>
</g>
<text x="100" y="762" style="text-anchor:start">BenchmarkHasSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="578" y="768" width="34" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="573" y="783" style="text-anchor:end">+11.35%</text>
</g>
<text x="100" y="788" style="text-anchor:start">BenchmarkEnd</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="794" width="9" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="626" y="809" style="text-anchor:start">-3.33%</text>
</g>
<text x="100" y="814" style="text-anchor:start">BenchmarkEach</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="820" width="27" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="644" y="835" style="text-anchor:start">-9.16%</text>
</g>
<text x="100" y="840" style="text-anchor:start">BenchmarkMap</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="846" width="57" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="674" y="861" style="text-anchor:start">-19.15%</text>
</g>
<text x="100" y="866" style="text-anchor:start">BenchmarkAttr</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="872" width="9" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="626" y="887" style="text-anchor:start">-3.24%</text>
</g>
<text x="100" y="892" style="text-anchor:start">BenchmarkText</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="898" width="183" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="800" y="913" style="text-anchor:start">-61.25%</text>
</g>
<text x="100" y="918" style="text-anchor:start">BenchmarkLength</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="924" width="35" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="652" y="939" style="text-anchor:start">-11.92%</text>
</g>
<text x="100" y="944" style="text-anchor:start">BenchmarkHtml</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="950" width="49" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="666" y="965" style="text-anchor:start">-16.46%</text>
</g>
<text x="100" y="970" style="text-anchor:start">BenchmarkIs</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="976" width="81" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="698" y="991" style="text-anchor:start">-27.31%</text>
</g>
<text x="100" y="996" style="text-anchor:start">BenchmarkIsPositional</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1002" width="40" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="657" y="1017" style="text-anchor:start">-13.49%</text>
</g>
<text x="100" y="1022" style="text-anchor:start">BenchmarkIsFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1028" width="5" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="622" y="1043" style="text-anchor:start">-1.71%</text>
</g>
<text x="100" y="1048" style="text-anchor:start">BenchmarkIsSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1054" width="9" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="626" y="1069" style="text-anchor:start">-3.03%</text>
</g>
<text x="100" y="1074" style="text-anchor:start">BenchmarkIsNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1080" width="60" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="677" y="1095" style="text-anchor:start">-20.30%</text>
</g>
<text x="100" y="1100" style="text-anchor:start">BenchmarkHasClass</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1106" width="33" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="650" y="1121" style="text-anchor:start">-11.29%</text>
</g>
<text x="100" y="1126" style="text-anchor:start">BenchmarkContains</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1132" width="152" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="769" y="1147" style="text-anchor:start">-50.88%</text>
</g>
<text x="100" y="1152" style="text-anchor:start">BenchmarkFind</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1158" width="135" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="752" y="1173" style="text-anchor:start">-45.28%</text>
</g>
<text x="100" y="1178" style="text-anchor:start">BenchmarkFindWithinSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="544" y="1184" width="68" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="539" y="1199" style="text-anchor:end">+22.95%</text>
</g>
<text x="100" y="1204" style="text-anchor:start">BenchmarkFindSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="544" y="1210" width="68" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="539" y="1225" style="text-anchor:end">+22.68%</text>
</g>
<text x="100" y="1230" style="text-anchor:start">BenchmarkFindNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1236" width="195" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="812" y="1251" style="text-anchor:start">-65.08%</text>
</g>
<text x="100" y="1256" style="text-anchor:start">BenchmarkContents</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1262" width="179" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="796" y="1277" style="text-anchor:start">-59.77%</text>
</g>
<text x="100" y="1282" style="text-anchor:start">BenchmarkContentsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1288" width="192" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="809" y="1303" style="text-anchor:start">-64.31%</text>
</g>
<text x="100" y="1308" style="text-anchor:start">BenchmarkChildren</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1314" width="118" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="735" y="1329" style="text-anchor:start">-39.56%</text>
</g>
<text x="100" y="1334" style="text-anchor:start">BenchmarkChildrenFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1340" width="19" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="636" y="1355" style="text-anchor:start">-6.61%</text>
</g>
<text x="100" y="1360" style="text-anchor:start">BenchmarkParent</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1366" width="32" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="649" y="1381" style="text-anchor:start">-10.92%</text>
</g>
<text x="100" y="1386" style="text-anchor:start">BenchmarkParentFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1392" width="5" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="622" y="1407" style="text-anchor:start">-1.72%</text>
</g>
<text x="100" y="1412" style="text-anchor:start">BenchmarkParents</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1418" width="7" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="624" y="1433" style="text-anchor:start">-2.37%</text>
</g>
<text x="100" y="1438" style="text-anchor:start">BenchmarkParentsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1444" width="142" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="759" y="1459" style="text-anchor:start">-47.60%</text>
</g>
<text x="100" y="1464" style="text-anchor:start">BenchmarkParentsUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1470" width="109" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="726" y="1485" style="text-anchor:start">-36.39%</text>
</g>
<text x="100" y="1490" style="text-anchor:start">BenchmarkParentsUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1496" width="107" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="724" y="1511" style="text-anchor:start">-35.99%</text>
</g>
<text x="100" y="1516" style="text-anchor:start">BenchmarkParentsUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1522" width="146" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="763" y="1537" style="text-anchor:start">-48.84%</text>
</g>
<text x="100" y="1542" style="text-anchor:start">BenchmarkParentsFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1548" width="98" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="715" y="1563" style="text-anchor:start">-32.75%</text>
</g>
<text x="100" y="1568" style="text-anchor:start">BenchmarkParentsFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1574" width="99" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="716" y="1589" style="text-anchor:start">-33.12%</text>
</g>
<text x="100" y="1594" style="text-anchor:start">BenchmarkParentsFilteredUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1600" width="89" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="706" y="1615" style="text-anchor:start">-29.78%</text>
</g>
<text x="100" y="1620" style="text-anchor:start">BenchmarkSiblings</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1626" width="92" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="709" y="1641" style="text-anchor:start">-30.89%</text>
</g>
<text x="100" y="1646" style="text-anchor:start">BenchmarkSiblingsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1652" width="204" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="821" y="1667" style="text-anchor:start">-68.19%</text>
</g>
<text x="100" y="1672" style="text-anchor:start">BenchmarkNext</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1678" width="199" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="816" y="1693" style="text-anchor:start">-66.59%</text>
</g>
<text x="100" y="1698" style="text-anchor:start">BenchmarkNextFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1704" width="93" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="710" y="1719" style="text-anchor:start">-31.08%</text>
</g>
<text x="100" y="1724" style="text-anchor:start">BenchmarkNextAll</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1730" width="90" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="707" y="1745" style="text-anchor:start">-30.03%</text>
</g>
<text x="100" y="1750" style="text-anchor:start">BenchmarkNextAllFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1756" width="204" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="821" y="1771" style="text-anchor:start">-68.32%</text>
</g>
<text x="100" y="1776" style="text-anchor:start">BenchmarkPrev</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1782" width="199" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="816" y="1797" style="text-anchor:start">-66.65%</text>
</g>
<text x="100" y="1802" style="text-anchor:start">BenchmarkPrevFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1808" width="129" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="746" y="1823" style="text-anchor:start">-43.33%</text>
</g>
<text x="100" y="1828" style="text-anchor:start">BenchmarkPrevAll</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1834" width="129" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="746" y="1849" style="text-anchor:start">-43.24%</text>
</g>
<text x="100" y="1854" style="text-anchor:start">BenchmarkPrevAllFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1860" width="162" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="779" y="1875" style="text-anchor:start">-54.27%</text>
</g>
<text x="100" y="1880" style="text-anchor:start">BenchmarkNextUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1886" width="113" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="730" y="1901" style="text-anchor:start">-37.90%</text>
</g>
<text x="100" y="1906" style="text-anchor:start">BenchmarkNextUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1912" width="129" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="746" y="1927" style="text-anchor:start">-43.21%</text>
</g>
<text x="100" y="1932" style="text-anchor:start">BenchmarkNextUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1938" width="147" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="764" y="1953" style="text-anchor:start">-49.33%</text>
</g>
<text x="100" y="1958" style="text-anchor:start">BenchmarkPrevUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1964" width="111" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="728" y="1979" style="text-anchor:start">-37.02%</text>
</g>
<text x="100" y="1984" style="text-anchor:start">BenchmarkPrevUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1990" width="133" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="750" y="2005" style="text-anchor:start">-44.59%</text>
</g>
<text x="100" y="2010" style="text-anchor:start">BenchmarkPrevUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2016" width="173" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="790" y="2031" style="text-anchor:start">-57.79%</text>
</g>
<text x="100" y="2036" style="text-anchor:start">BenchmarkNextFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2042" width="109" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="726" y="2057" style="text-anchor:start">-36.61%</text>
</g>
<text x="100" y="2062" style="text-anchor:start">BenchmarkNextFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2068" width="113" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="730" y="2083" style="text-anchor:start">-37.81%</text>
</g>
<text x="100" y="2088" style="text-anchor:start">BenchmarkNextFilteredUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2094" width="177" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="794" y="2109" style="text-anchor:start">-59.21%</text>
</g>
<text x="100" y="2114" style="text-anchor:start">BenchmarkPrevFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2120" width="108" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="725" y="2135" style="text-anchor:start">-36.20%</text>
</g>
<text x="100" y="2140" style="text-anchor:start">BenchmarkPrevFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2146" width="108" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="725" y="2161" style="text-anchor:start">-36.05%</text>
</g>
<text x="100" y="2166" style="text-anchor:start">BenchmarkPrevFilteredUntilNodes</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

+420
View File
@@ -0,0 +1,420 @@
<?xml version="1.0"?>
<!-- Generated by SVGo -->
<svg width="1024" height="768"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g style="font-size:20px;font-family:sans-serif">
<rect x="0" y="0" width="1024" height="768" style="fill:white"/>
<text x="100" y="50" style="font-size:150%"></text>
<g style="font-style:italic;font-size:75%">
<rect x="606" y="118" width="6" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="601" y="133" style="text-anchor:end">+2.12%</text>
</g>
<text x="100" y="138" style="text-anchor:start">BenchmarkFirst</text>
<g style="font-style:italic;font-size:75%">
<rect x="609" y="144" width="3" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="604" y="159" style="text-anchor:end">+1.06%</text>
</g>
<text x="100" y="164" style="text-anchor:start">BenchmarkLast</text>
<g style="font-style:italic;font-size:75%">
<rect x="602" y="170" width="10" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="597" y="185" style="text-anchor:end">+3.63%</text>
</g>
<text x="100" y="190" style="text-anchor:start">BenchmarkEq</text>
<g style="font-style:italic;font-size:75%">
<rect x="604" y="196" width="8" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="599" y="211" style="text-anchor:end">+2.67%</text>
</g>
<text x="100" y="216" style="text-anchor:start">BenchmarkSlice</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="222" width="72" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="689" y="237" style="text-anchor:start">-24.26%</text>
</g>
<text x="100" y="242" style="text-anchor:start">BenchmarkGet</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="248" width="125" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="742" y="263" style="text-anchor:start">-41.71%</text>
</g>
<text x="100" y="268" style="text-anchor:start">BenchmarkIndex</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="274" width="151" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="768" y="289" style="text-anchor:start">-50.42%</text>
</g>
<text x="100" y="294" style="text-anchor:start">BenchmarkIndexSelector</text>
<g style="font-style:italic;font-size:75%">
<rect x="595" y="300" width="17" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="590" y="315" style="text-anchor:end">+5.94%</text>
</g>
<text x="100" y="320" style="text-anchor:start">BenchmarkIndexOfNode</text>
<g style="font-style:italic;font-size:75%">
<rect x="588" y="326" width="24" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="583" y="341" style="text-anchor:end">+8.26%</text>
</g>
<text x="100" y="346" style="text-anchor:start">BenchmarkIndexOfSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="352" width="98" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="715" y="367" style="text-anchor:start">-32.94%</text>
</g>
<text x="100" y="372" style="text-anchor:start">BenchmarkMetalReviewExample</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="378" width="170" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="787" y="393" style="text-anchor:start">-56.84%</text>
</g>
<text x="100" y="398" style="text-anchor:start">BenchmarkAdd</text>
<g style="font-style:italic;font-size:75%">
<rect x="593" y="404" width="19" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="588" y="419" style="text-anchor:end">+6.63%</text>
</g>
<text x="100" y="424" style="text-anchor:start">BenchmarkAddSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="584" y="430" width="28" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="579" y="445" style="text-anchor:end">+9.42%</text>
</g>
<text x="100" y="450" style="text-anchor:start">BenchmarkAddNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="604" y="456" width="8" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="599" y="471" style="text-anchor:end">+2.93%</text>
</g>
<text x="100" y="476" style="text-anchor:start">BenchmarkAndSelf</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="482" width="41" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="658" y="497" style="text-anchor:start">-13.75%</text>
</g>
<text x="100" y="502" style="text-anchor:start">BenchmarkFilter</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="508" width="44" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="661" y="523" style="text-anchor:start">-14.90%</text>
</g>
<text x="100" y="528" style="text-anchor:start">BenchmarkNot</text>
<g style="font-style:italic;font-size:75%">
<rect x="609" y="534" width="3" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="604" y="549" style="text-anchor:end">+1.07%</text>
</g>
<text x="100" y="554" style="text-anchor:start">BenchmarkFilterFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="598" y="560" width="14" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="593" y="575" style="text-anchor:end">+4.91%</text>
</g>
<text x="100" y="580" style="text-anchor:start">BenchmarkNotFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="609" y="586" width="3" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="604" y="601" style="text-anchor:end">+1.03%</text>
</g>
<text x="100" y="606" style="text-anchor:start">BenchmarkFilterNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="600" y="612" width="12" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="595" y="627" style="text-anchor:end">+4.22%</text>
</g>
<text x="100" y="632" style="text-anchor:start">BenchmarkNotNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="638" width="3" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="620" y="653" style="text-anchor:start">-1.00%</text>
</g>
<text x="100" y="658" style="text-anchor:start">BenchmarkFilterSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="600" y="664" width="12" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="595" y="679" style="text-anchor:end">+4.00%</text>
</g>
<text x="100" y="684" style="text-anchor:start">BenchmarkNotSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="690" width="96" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="713" y="705" style="text-anchor:start">-32.12%</text>
</g>
<text x="100" y="710" style="text-anchor:start">BenchmarkHas</text>
<g style="font-style:italic;font-size:75%">
<rect x="608" y="716" width="4" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="603" y="731" style="text-anchor:end">+1.59%</text>
</g>
<text x="100" y="736" style="text-anchor:start">BenchmarkHasNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="608" y="742" width="4" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="603" y="757" style="text-anchor:end">+1.56%</text>
</g>
<text x="100" y="762" style="text-anchor:start">BenchmarkHasSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="566" y="768" width="46" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="561" y="783" style="text-anchor:end">+15.54%</text>
</g>
<text x="100" y="788" style="text-anchor:start">BenchmarkEnd</text>
<g style="font-style:italic;font-size:75%">
<rect x="607" y="794" width="5" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="602" y="809" style="text-anchor:end">+1.77%</text>
</g>
<text x="100" y="814" style="text-anchor:start">BenchmarkEach</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="820" width="10" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="627" y="835" style="text-anchor:start">-3.61%</text>
</g>
<text x="100" y="840" style="text-anchor:start">BenchmarkMap</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="846" width="49" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="666" y="861" style="text-anchor:start">-16.48%</text>
</g>
<text x="100" y="866" style="text-anchor:start">BenchmarkAttr</text>
<g style="font-style:italic;font-size:75%">
<rect x="609" y="872" width="3" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="604" y="887" style="text-anchor:end">+1.33%</text>
</g>
<text x="100" y="892" style="text-anchor:start">BenchmarkText</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="898" width="177" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="794" y="913" style="text-anchor:start">-59.21%</text>
</g>
<text x="100" y="918" style="text-anchor:start">BenchmarkLength</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="924" width="27" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="644" y="939" style="text-anchor:start">-9.01%</text>
</g>
<text x="100" y="944" style="text-anchor:start">BenchmarkHtml</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="950" width="50" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="667" y="965" style="text-anchor:start">-16.73%</text>
</g>
<text x="100" y="970" style="text-anchor:start">BenchmarkIs</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="976" width="75" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="692" y="991" style="text-anchor:start">-25.08%</text>
</g>
<text x="100" y="996" style="text-anchor:start">BenchmarkIsPositional</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1002" width="34" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="651" y="1017" style="text-anchor:start">-11.55%</text>
</g>
<text x="100" y="1022" style="text-anchor:start">BenchmarkIsFunction</text>
<g style="font-style:italic;font-size:75%">
<rect x="609" y="1028" width="3" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="604" y="1043" style="text-anchor:end">+1.28%</text>
</g>
<text x="100" y="1048" style="text-anchor:start">BenchmarkIsSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="606" y="1054" width="6" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="601" y="1069" style="text-anchor:end">+2.10%</text>
</g>
<text x="100" y="1074" style="text-anchor:start">BenchmarkIsNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1080" width="47" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="664" y="1095" style="text-anchor:start">-15.99%</text>
</g>
<text x="100" y="1100" style="text-anchor:start">BenchmarkHasClass</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1106" width="7" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="624" y="1121" style="text-anchor:start">-2.65%</text>
</g>
<text x="100" y="1126" style="text-anchor:start">BenchmarkContains</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1132" width="145" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="762" y="1147" style="text-anchor:start">-48.54%</text>
</g>
<text x="100" y="1152" style="text-anchor:start">BenchmarkFind</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1158" width="128" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="745" y="1173" style="text-anchor:start">-42.71%</text>
</g>
<text x="100" y="1178" style="text-anchor:start">BenchmarkFindWithinSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="526" y="1184" width="86" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="521" y="1199" style="text-anchor:end">+28.77%</text>
</g>
<text x="100" y="1204" style="text-anchor:start">BenchmarkFindSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="527" y="1210" width="85" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="522" y="1225" style="text-anchor:end">+28.47%</text>
</g>
<text x="100" y="1230" style="text-anchor:start">BenchmarkFindNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1236" width="188" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="805" y="1251" style="text-anchor:start">-62.84%</text>
</g>
<text x="100" y="1256" style="text-anchor:start">BenchmarkContents</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1262" width="174" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="791" y="1277" style="text-anchor:start">-58.06%</text>
</g>
<text x="100" y="1282" style="text-anchor:start">BenchmarkContentsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1288" width="189" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="806" y="1303" style="text-anchor:start">-63.13%</text>
</g>
<text x="100" y="1308" style="text-anchor:start">BenchmarkChildren</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1314" width="114" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="731" y="1329" style="text-anchor:start">-38.24%</text>
</g>
<text x="100" y="1334" style="text-anchor:start">BenchmarkChildrenFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1340" width="10" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="627" y="1355" style="text-anchor:start">-3.66%</text>
</g>
<text x="100" y="1360" style="text-anchor:start">BenchmarkParent</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1366" width="18" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="635" y="1381" style="text-anchor:start">-6.06%</text>
</g>
<text x="100" y="1386" style="text-anchor:start">BenchmarkParentFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="602" y="1392" width="10" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="597" y="1407" style="text-anchor:end">+3.64%</text>
</g>
<text x="100" y="1412" style="text-anchor:start">BenchmarkParents</text>
<g style="font-style:italic;font-size:75%">
<rect x="608" y="1418" width="4" height="20" style="fill-opacity:0.3;fill:red"/>
<text x="603" y="1433" style="text-anchor:end">+1.44%</text>
</g>
<text x="100" y="1438" style="text-anchor:start">BenchmarkParentsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1444" width="133" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="750" y="1459" style="text-anchor:start">-44.35%</text>
</g>
<text x="100" y="1464" style="text-anchor:start">BenchmarkParentsUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1470" width="95" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="712" y="1485" style="text-anchor:start">-31.99%</text>
</g>
<text x="100" y="1490" style="text-anchor:start">BenchmarkParentsUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1496" width="97" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="714" y="1511" style="text-anchor:start">-32.62%</text>
</g>
<text x="100" y="1516" style="text-anchor:start">BenchmarkParentsUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1522" width="137" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="754" y="1537" style="text-anchor:start">-45.83%</text>
</g>
<text x="100" y="1542" style="text-anchor:start">BenchmarkParentsFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1548" width="90" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="707" y="1563" style="text-anchor:start">-30.05%</text>
</g>
<text x="100" y="1568" style="text-anchor:start">BenchmarkParentsFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1574" width="89" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="706" y="1589" style="text-anchor:start">-29.97%</text>
</g>
<text x="100" y="1594" style="text-anchor:start">BenchmarkParentsFilteredUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1600" width="77" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="694" y="1615" style="text-anchor:start">-25.96%</text>
</g>
<text x="100" y="1620" style="text-anchor:start">BenchmarkSiblings</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1626" width="80" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="697" y="1641" style="text-anchor:start">-26.67%</text>
</g>
<text x="100" y="1646" style="text-anchor:start">BenchmarkSiblingsFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1652" width="199" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="816" y="1667" style="text-anchor:start">-66.40%</text>
</g>
<text x="100" y="1672" style="text-anchor:start">BenchmarkNext</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1678" width="193" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="810" y="1693" style="text-anchor:start">-64.46%</text>
</g>
<text x="100" y="1698" style="text-anchor:start">BenchmarkNextFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1704" width="79" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="696" y="1719" style="text-anchor:start">-26.50%</text>
</g>
<text x="100" y="1724" style="text-anchor:start">BenchmarkNextAll</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1730" width="78" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="695" y="1745" style="text-anchor:start">-26.27%</text>
</g>
<text x="100" y="1750" style="text-anchor:start">BenchmarkNextAllFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1756" width="200" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="817" y="1771" style="text-anchor:start">-66.84%</text>
</g>
<text x="100" y="1776" style="text-anchor:start">BenchmarkPrev</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1782" width="193" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="810" y="1797" style="text-anchor:start">-64.35%</text>
</g>
<text x="100" y="1802" style="text-anchor:start">BenchmarkPrevFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1808" width="120" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="737" y="1823" style="text-anchor:start">-40.05%</text>
</g>
<text x="100" y="1828" style="text-anchor:start">BenchmarkPrevAll</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1834" width="119" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="736" y="1849" style="text-anchor:start">-39.74%</text>
</g>
<text x="100" y="1854" style="text-anchor:start">BenchmarkPrevAllFiltered</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1860" width="155" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="772" y="1875" style="text-anchor:start">-51.73%</text>
</g>
<text x="100" y="1880" style="text-anchor:start">BenchmarkNextUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1886" width="100" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="717" y="1901" style="text-anchor:start">-33.42%</text>
</g>
<text x="100" y="1906" style="text-anchor:start">BenchmarkNextUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1912" width="121" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="738" y="1927" style="text-anchor:start">-40.42%</text>
</g>
<text x="100" y="1932" style="text-anchor:start">BenchmarkNextUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1938" width="140" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="757" y="1953" style="text-anchor:start">-46.87%</text>
</g>
<text x="100" y="1958" style="text-anchor:start">BenchmarkPrevUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1964" width="99" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="716" y="1979" style="text-anchor:start">-33.14%</text>
</g>
<text x="100" y="1984" style="text-anchor:start">BenchmarkPrevUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="1990" width="123" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="740" y="2005" style="text-anchor:start">-41.19%</text>
</g>
<text x="100" y="2010" style="text-anchor:start">BenchmarkPrevUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2016" width="167" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="784" y="2031" style="text-anchor:start">-55.92%</text>
</g>
<text x="100" y="2036" style="text-anchor:start">BenchmarkNextFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2042" width="97" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="714" y="2057" style="text-anchor:start">-32.49%</text>
</g>
<text x="100" y="2062" style="text-anchor:start">BenchmarkNextFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2068" width="99" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="716" y="2083" style="text-anchor:start">-33.00%</text>
</g>
<text x="100" y="2088" style="text-anchor:start">BenchmarkNextFilteredUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2094" width="175" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="792" y="2109" style="text-anchor:start">-58.54%</text>
</g>
<text x="100" y="2114" style="text-anchor:start">BenchmarkPrevFilteredUntil</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2120" width="101" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="718" y="2135" style="text-anchor:start">-33.80%</text>
</g>
<text x="100" y="2140" style="text-anchor:start">BenchmarkPrevFilteredUntilSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2146" width="100" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="717" y="2161" style="text-anchor:start">-33.44%</text>
</g>
<text x="100" y="2166" style="text-anchor:start">BenchmarkPrevFilteredUntilNodes</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2172" width="74" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="691" y="2187" style="text-anchor:start">-24.82%</text>
</g>
<text x="100" y="2192" style="text-anchor:start">BenchmarkClosest</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2198" width="103" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="720" y="2213" style="text-anchor:start">-34.45%</text>
</g>
<text x="100" y="2218" style="text-anchor:start">BenchmarkClosestSelection</text>
<g style="font-style:italic;font-size:75%">
<rect x="612" y="2224" width="105" height="20" style="fill-opacity:0.3;fill:green"/>
<text x="722" y="2239" style="text-anchor:start">-35.30%</text>
</g>
<text x="100" y="2244" style="text-anchor:start">BenchmarkClosestNodes</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

+470
View File
@@ -0,0 +1,470 @@
PASS
BenchmarkFirst 20000000 96.3 ns/op
BenchmarkLast 20000000 95.7 ns/op
BenchmarkEq 20000000 97.1 ns/op
BenchmarkSlice 20000000 92.3 ns/op
BenchmarkGet 1000000000 2.06 ns/op
BenchmarkIndex 1000000 1069 ns/op
--- BENCH: BenchmarkIndex
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
BenchmarkIndexSelector 100000 26750 ns/op
--- BENCH: BenchmarkIndexSelector
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
BenchmarkIndexOfNode 100000000 10.7 ns/op
--- BENCH: BenchmarkIndexOfNode
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
BenchmarkIndexOfSelection 100000000 11.8 ns/op
--- BENCH: BenchmarkIndexOfSelection
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
BenchmarkMetalReviewExample 10000 219078 ns/op
--- BENCH: BenchmarkMetalReviewExample
bench_example_test.go:40: Review 0: Midnight - Complete and Total Hell (8.5).
Review 1: Over Your Threshold - Facticity (6.0).
Review 2: Nuclear Death Terror - Chaos Reigns (7.5).
Review 3: Evoken - Atra Mors (9.5).
bench_example_test.go:41: MetalReviewExample=10
bench_example_test.go:40: Review 0: Midnight - Complete and Total Hell (8.5).
Review 1: Over Your Threshold - Facticity (6.0).
Review 2: Nuclear Death Terror - Chaos Reigns (7.5).
Review 3: Evoken - Atra Mors (9.5).
... [output truncated]
BenchmarkAdd 100000 22345 ns/op
--- BENCH: BenchmarkAdd
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
BenchmarkAddSelection 10000000 209 ns/op
--- BENCH: BenchmarkAddSelection
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
BenchmarkAddNodes 10000000 209 ns/op
--- BENCH: BenchmarkAddNodes
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
BenchmarkAndSelf 1000000 2568 ns/op
--- BENCH: BenchmarkAndSelf
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
BenchmarkFilter 100000 26715 ns/op
--- BENCH: BenchmarkFilter
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
BenchmarkNot 50000 30058 ns/op
--- BENCH: BenchmarkNot
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
BenchmarkFilterFunction 50000 66346 ns/op
--- BENCH: BenchmarkFilterFunction
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
BenchmarkNotFunction 50000 72646 ns/op
--- BENCH: BenchmarkNotFunction
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
BenchmarkFilterNodes 50000 65493 ns/op
--- BENCH: BenchmarkFilterNodes
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
BenchmarkNotNodes 20000 79466 ns/op
--- BENCH: BenchmarkNotNodes
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
BenchmarkFilterSelection 50000 65494 ns/op
--- BENCH: BenchmarkFilterSelection
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
BenchmarkNotSelection 20000 79387 ns/op
--- BENCH: BenchmarkNotSelection
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
BenchmarkHas 5000 386571 ns/op
--- BENCH: BenchmarkHas
bench_filter_test.go:160: Has=13
bench_filter_test.go:160: Has=13
bench_filter_test.go:160: Has=13
BenchmarkHasNodes 10000 230664 ns/op
--- BENCH: BenchmarkHasNodes
bench_filter_test.go:178: HasNodes=15
bench_filter_test.go:178: HasNodes=15
bench_filter_test.go:178: HasNodes=15
BenchmarkHasSelection 10000 230705 ns/op
--- BENCH: BenchmarkHasSelection
bench_filter_test.go:195: HasSelection=15
bench_filter_test.go:195: HasSelection=15
bench_filter_test.go:195: HasSelection=15
BenchmarkEnd 500000000 4.61 ns/op
--- BENCH: BenchmarkEnd
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
BenchmarkEach 200000 9520 ns/op
--- BENCH: BenchmarkEach
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
BenchmarkMap 100000 15960 ns/op
--- BENCH: BenchmarkMap
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
BenchmarkAttr 50000000 30.4 ns/op
--- BENCH: BenchmarkAttr
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
BenchmarkText 100000 18718 ns/op
BenchmarkLength 2000000000 0.31 ns/op
--- BENCH: BenchmarkLength
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
BenchmarkHtml 5000000 606 ns/op
BenchmarkIs 100000 29289 ns/op
--- BENCH: BenchmarkIs
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
BenchmarkIsPositional 100000 23834 ns/op
--- BENCH: BenchmarkIsPositional
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
BenchmarkIsFunction 1000000 2436 ns/op
--- BENCH: BenchmarkIsFunction
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
BenchmarkIsSelection 50000 67106 ns/op
--- BENCH: BenchmarkIsSelection
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
BenchmarkIsNodes 50000 66042 ns/op
--- BENCH: BenchmarkIsNodes
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
BenchmarkHasClass 5000 565347 ns/op
--- BENCH: BenchmarkHasClass
bench_query_test.go:82: HasClass=true
bench_query_test.go:82: HasClass=true
bench_query_test.go:82: HasClass=true
BenchmarkContains 100000000 11.0 ns/op
--- BENCH: BenchmarkContains
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
BenchmarkFind 100000 27677 ns/op
--- BENCH: BenchmarkFind
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
BenchmarkFindWithinSelection 50000 72162 ns/op
--- BENCH: BenchmarkFindWithinSelection
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
BenchmarkFindSelection 5000 460124 ns/op
--- BENCH: BenchmarkFindSelection
bench_traversal_test.go:51: FindSelection=73
bench_traversal_test.go:51: FindSelection=73
bench_traversal_test.go:51: FindSelection=73
BenchmarkFindNodes 5000 459390 ns/op
--- BENCH: BenchmarkFindNodes
bench_traversal_test.go:69: FindNodes=73
bench_traversal_test.go:69: FindNodes=73
bench_traversal_test.go:69: FindNodes=73
BenchmarkContents 500000 3395 ns/op
--- BENCH: BenchmarkContents
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
BenchmarkContentsFiltered 500000 5193 ns/op
--- BENCH: BenchmarkContentsFiltered
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
BenchmarkChildren 5000000 667 ns/op
--- BENCH: BenchmarkChildren
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
BenchmarkChildrenFiltered 500000 3591 ns/op
--- BENCH: BenchmarkChildrenFiltered
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
BenchmarkParent 50000 43168 ns/op
--- BENCH: BenchmarkParent
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
BenchmarkParentFiltered 50000 45836 ns/op
--- BENCH: BenchmarkParentFiltered
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
BenchmarkParents 20000 92348 ns/op
--- BENCH: BenchmarkParents
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
BenchmarkParentsFiltered 20000 95306 ns/op
--- BENCH: BenchmarkParentsFiltered
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
BenchmarkParentsUntil 50000 72782 ns/op
--- BENCH: BenchmarkParentsUntil
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
BenchmarkParentsUntilSelection 10000 157639 ns/op
--- BENCH: BenchmarkParentsUntilSelection
bench_traversal_test.go:230: ParentsUntilSelection=70
bench_traversal_test.go:230: ParentsUntilSelection=70
bench_traversal_test.go:230: ParentsUntilSelection=70
BenchmarkParentsUntilNodes 10000 157510 ns/op
--- BENCH: BenchmarkParentsUntilNodes
bench_traversal_test.go:248: ParentsUntilNodes=70
bench_traversal_test.go:248: ParentsUntilNodes=70
bench_traversal_test.go:248: ParentsUntilNodes=70
BenchmarkParentsFilteredUntil 100000 16987 ns/op
--- BENCH: BenchmarkParentsFilteredUntil
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
BenchmarkParentsFilteredUntilSelection 100000 21174 ns/op
--- BENCH: BenchmarkParentsFilteredUntilSelection
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
BenchmarkParentsFilteredUntilNodes 100000 21238 ns/op
--- BENCH: BenchmarkParentsFilteredUntilNodes
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
BenchmarkSiblings 50000 66536 ns/op
--- BENCH: BenchmarkSiblings
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
BenchmarkSiblingsFiltered 50000 71822 ns/op
--- BENCH: BenchmarkSiblingsFiltered
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
BenchmarkNext 200000 10745 ns/op
--- BENCH: BenchmarkNext
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
BenchmarkNextFiltered 200000 12399 ns/op
--- BENCH: BenchmarkNextFiltered
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
BenchmarkNextAll 50000 44640 ns/op
--- BENCH: BenchmarkNextAll
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
BenchmarkNextAllFiltered 50000 49713 ns/op
--- BENCH: BenchmarkNextAllFiltered
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
BenchmarkPrev 200000 10743 ns/op
--- BENCH: BenchmarkPrev
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
BenchmarkPrevFiltered 200000 12456 ns/op
--- BENCH: BenchmarkPrevFiltered
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
BenchmarkPrevAll 100000 17600 ns/op
--- BENCH: BenchmarkPrevAll
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
BenchmarkPrevAllFiltered 100000 19460 ns/op
--- BENCH: BenchmarkPrevAllFiltered
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
BenchmarkNextUntil 20000 92630 ns/op
--- BENCH: BenchmarkNextUntil
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
BenchmarkNextUntilSelection 50000 61285 ns/op
--- BENCH: BenchmarkNextUntilSelection
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
BenchmarkNextUntilNodes 100000 25859 ns/op
--- BENCH: BenchmarkNextUntilNodes
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
BenchmarkPrevUntil 10000 230236 ns/op
--- BENCH: BenchmarkPrevUntil
bench_traversal_test.go:528: PrevUntil=238
bench_traversal_test.go:528: PrevUntil=238
bench_traversal_test.go:528: PrevUntil=238
BenchmarkPrevUntilSelection 20000 77837 ns/op
--- BENCH: BenchmarkPrevUntilSelection
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
BenchmarkPrevUntilNodes 100000 20784 ns/op
--- BENCH: BenchmarkPrevUntilNodes
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
BenchmarkNextFilteredUntil 50000 46147 ns/op
--- BENCH: BenchmarkNextFilteredUntil
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
BenchmarkNextFilteredUntilSelection 50000 67164 ns/op
--- BENCH: BenchmarkNextFilteredUntilSelection
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
BenchmarkNextFilteredUntilNodes 50000 66628 ns/op
--- BENCH: BenchmarkNextFilteredUntilNodes
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
BenchmarkPrevFilteredUntil 50000 46697 ns/op
--- BENCH: BenchmarkPrevFilteredUntil
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
BenchmarkPrevFilteredUntilSelection 50000 68646 ns/op
--- BENCH: BenchmarkPrevFilteredUntilSelection
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
BenchmarkPrevFilteredUntilNodes 50000 68745 ns/op
--- BENCH: BenchmarkPrevFilteredUntilNodes
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
BenchmarkClosest 500000 4909 ns/op
--- BENCH: BenchmarkClosest
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
BenchmarkClosestSelection 5000000 744 ns/op
--- BENCH: BenchmarkClosestSelection
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
BenchmarkClosestNodes 5000000 733 ns/op
--- BENCH: BenchmarkClosestNodes
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
ok github.com/PuerkitoBio/goquery 220.793s
+476
View File
@@ -0,0 +1,476 @@
PASS
BenchmarkFirst 20000000 95.5 ns/op
BenchmarkLast 20000000 94.9 ns/op
BenchmarkEq 20000000 95.7 ns/op
BenchmarkSlice 20000000 91.7 ns/op
BenchmarkGet 1000000000 2.05 ns/op
BenchmarkIndex 1000000 1079 ns/op
--- BENCH: BenchmarkIndex
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
bench_array_test.go:73: Index=3
BenchmarkIndexSelector 100000 26972 ns/op
--- BENCH: BenchmarkIndexSelector
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
bench_array_test.go:85: IndexSelector=4
BenchmarkIndexOfNode 100000000 10.8 ns/op
--- BENCH: BenchmarkIndexOfNode
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
bench_array_test.go:99: IndexOfNode=2
BenchmarkIndexOfSelection 100000000 11.7 ns/op
--- BENCH: BenchmarkIndexOfSelection
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
bench_array_test.go:111: IndexOfSelection=2
BenchmarkMetalReviewExample 10000 213800 ns/op
--- BENCH: BenchmarkMetalReviewExample
bench_example_test.go:40: Review 0: Midnight - Complete and Total Hell (8.5).
Review 1: Over Your Threshold - Facticity (6.0).
Review 2: Nuclear Death Terror - Chaos Reigns (7.5).
Review 3: Evoken - Atra Mors (9.5).
bench_example_test.go:41: MetalReviewExample=10
bench_example_test.go:40: Review 0: Midnight - Complete and Total Hell (8.5).
Review 1: Over Your Threshold - Facticity (6.0).
Review 2: Nuclear Death Terror - Chaos Reigns (7.5).
Review 3: Evoken - Atra Mors (9.5).
... [output truncated]
BenchmarkAdd 100000 21811 ns/op
--- BENCH: BenchmarkAdd
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
bench_expand_test.go:20: Add=43
BenchmarkAddSelection 10000000 205 ns/op
--- BENCH: BenchmarkAddSelection
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
bench_expand_test.go:37: AddSelection=43
BenchmarkAddNodes 10000000 202 ns/op
--- BENCH: BenchmarkAddNodes
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
bench_expand_test.go:55: AddNodes=43
BenchmarkAndSelf 1000000 2467 ns/op
--- BENCH: BenchmarkAndSelf
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
bench_expand_test.go:71: AndSelf=44
BenchmarkFilter 100000 25643 ns/op
--- BENCH: BenchmarkFilter
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
bench_filter_test.go:20: Filter=13
BenchmarkNot 100000 29566 ns/op
--- BENCH: BenchmarkNot
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
bench_filter_test.go:36: Not=371
BenchmarkFilterFunction 50000 66894 ns/op
--- BENCH: BenchmarkFilterFunction
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
bench_filter_test.go:55: FilterFunction=112
BenchmarkNotFunction 50000 72183 ns/op
--- BENCH: BenchmarkNotFunction
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
bench_filter_test.go:74: NotFunction=261
BenchmarkFilterNodes 50000 65516 ns/op
--- BENCH: BenchmarkFilterNodes
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
bench_filter_test.go:92: FilterNodes=2
BenchmarkNotNodes 20000 78880 ns/op
--- BENCH: BenchmarkNotNodes
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
bench_filter_test.go:110: NotNodes=360
BenchmarkFilterSelection 50000 65232 ns/op
--- BENCH: BenchmarkFilterSelection
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
bench_filter_test.go:127: FilterSelection=2
BenchmarkNotSelection 20000 78813 ns/op
--- BENCH: BenchmarkNotSelection
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
bench_filter_test.go:144: NotSelection=360
BenchmarkHas 5000 388834 ns/op
--- BENCH: BenchmarkHas
bench_filter_test.go:160: Has=13
bench_filter_test.go:160: Has=13
bench_filter_test.go:160: Has=13
BenchmarkHasNodes 10000 228552 ns/op
--- BENCH: BenchmarkHasNodes
bench_filter_test.go:178: HasNodes=15
bench_filter_test.go:178: HasNodes=15
bench_filter_test.go:178: HasNodes=15
BenchmarkHasSelection 10000 228365 ns/op
--- BENCH: BenchmarkHasSelection
bench_filter_test.go:195: HasSelection=15
bench_filter_test.go:195: HasSelection=15
bench_filter_test.go:195: HasSelection=15
BenchmarkEnd 500000000 4.62 ns/op
--- BENCH: BenchmarkEnd
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
bench_filter_test.go:211: End=373
BenchmarkEach 200000 9548 ns/op
--- BENCH: BenchmarkEach
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
bench_iteration_test.go:22: Each=59
BenchmarkMap 100000 15900 ns/op
--- BENCH: BenchmarkMap
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
bench_iteration_test.go:41: Map=59
BenchmarkEachWithBreak 1000000 1650 ns/op
--- BENCH: BenchmarkEachWithBreak
bench_iteration_test.go:61: Each=10
bench_iteration_test.go:61: Each=10
bench_iteration_test.go:61: Each=10
bench_iteration_test.go:61: Each=10
BenchmarkAttr 50000000 30.5 ns/op
--- BENCH: BenchmarkAttr
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
bench_property_test.go:16: Attr=firstHeading
BenchmarkText 100000 18873 ns/op
BenchmarkLength 2000000000 0.31 ns/op
--- BENCH: BenchmarkLength
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
bench_property_test.go:37: Length=14
BenchmarkHtml 5000000 616 ns/op
BenchmarkIs 100000 29499 ns/op
--- BENCH: BenchmarkIs
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
bench_query_test.go:16: Is=true
BenchmarkIsPositional 100000 23733 ns/op
--- BENCH: BenchmarkIsPositional
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
bench_query_test.go:28: IsPositional=true
BenchmarkIsFunction 1000000 2404 ns/op
--- BENCH: BenchmarkIsFunction
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
bench_query_test.go:43: IsFunction=true
BenchmarkIsSelection 50000 65376 ns/op
--- BENCH: BenchmarkIsSelection
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
bench_query_test.go:56: IsSelection=true
BenchmarkIsNodes 50000 65322 ns/op
--- BENCH: BenchmarkIsNodes
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
bench_query_test.go:70: IsNodes=true
BenchmarkHasClass 5000 558933 ns/op
--- BENCH: BenchmarkHasClass
bench_query_test.go:82: HasClass=true
bench_query_test.go:82: HasClass=true
bench_query_test.go:82: HasClass=true
BenchmarkContains 100000000 11.1 ns/op
--- BENCH: BenchmarkContains
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
bench_query_test.go:96: Contains=true
BenchmarkFind 100000 27841 ns/op
--- BENCH: BenchmarkFind
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
bench_traversal_test.go:18: Find=41
BenchmarkFindWithinSelection 50000 72096 ns/op
--- BENCH: BenchmarkFindWithinSelection
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
bench_traversal_test.go:34: FindWithinSelection=39
BenchmarkFindSelection 5000 457349 ns/op
--- BENCH: BenchmarkFindSelection
bench_traversal_test.go:51: FindSelection=73
bench_traversal_test.go:51: FindSelection=73
bench_traversal_test.go:51: FindSelection=73
BenchmarkFindNodes 5000 459324 ns/op
--- BENCH: BenchmarkFindNodes
bench_traversal_test.go:69: FindNodes=73
bench_traversal_test.go:69: FindNodes=73
bench_traversal_test.go:69: FindNodes=73
BenchmarkContents 500000 3435 ns/op
--- BENCH: BenchmarkContents
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
bench_traversal_test.go:85: Contents=16
BenchmarkContentsFiltered 500000 5241 ns/op
--- BENCH: BenchmarkContentsFiltered
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
bench_traversal_test.go:101: ContentsFiltered=1
BenchmarkChildren 5000000 667 ns/op
--- BENCH: BenchmarkChildren
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
bench_traversal_test.go:117: Children=2
BenchmarkChildrenFiltered 500000 3639 ns/op
--- BENCH: BenchmarkChildrenFiltered
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
bench_traversal_test.go:133: ChildrenFiltered=2
BenchmarkParent 50000 44867 ns/op
--- BENCH: BenchmarkParent
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
bench_traversal_test.go:149: Parent=55
BenchmarkParentFiltered 50000 46476 ns/op
--- BENCH: BenchmarkParentFiltered
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
bench_traversal_test.go:165: ParentFiltered=4
BenchmarkParents 20000 92559 ns/op
--- BENCH: BenchmarkParents
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
bench_traversal_test.go:181: Parents=73
BenchmarkParentsFiltered 20000 96142 ns/op
--- BENCH: BenchmarkParentsFiltered
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
bench_traversal_test.go:197: ParentsFiltered=18
BenchmarkParentsUntil 50000 73931 ns/op
--- BENCH: BenchmarkParentsUntil
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
bench_traversal_test.go:213: ParentsUntil=52
BenchmarkParentsUntilSelection 10000 159820 ns/op
--- BENCH: BenchmarkParentsUntilSelection
bench_traversal_test.go:230: ParentsUntilSelection=70
bench_traversal_test.go:230: ParentsUntilSelection=70
bench_traversal_test.go:230: ParentsUntilSelection=70
BenchmarkParentsUntilNodes 10000 158811 ns/op
--- BENCH: BenchmarkParentsUntilNodes
bench_traversal_test.go:248: ParentsUntilNodes=70
bench_traversal_test.go:248: ParentsUntilNodes=70
bench_traversal_test.go:248: ParentsUntilNodes=70
BenchmarkParentsFilteredUntil 100000 17203 ns/op
--- BENCH: BenchmarkParentsFilteredUntil
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
bench_traversal_test.go:264: ParentsFilteredUntil=2
BenchmarkParentsFilteredUntilSelection 100000 21358 ns/op
--- BENCH: BenchmarkParentsFilteredUntilSelection
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
bench_traversal_test.go:281: ParentsFilteredUntilSelection=2
BenchmarkParentsFilteredUntilNodes 100000 21338 ns/op
--- BENCH: BenchmarkParentsFilteredUntilNodes
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
bench_traversal_test.go:299: ParentsFilteredUntilNodes=2
BenchmarkSiblings 50000 66463 ns/op
--- BENCH: BenchmarkSiblings
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
bench_traversal_test.go:315: Siblings=293
BenchmarkSiblingsFiltered 50000 72503 ns/op
--- BENCH: BenchmarkSiblingsFiltered
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
bench_traversal_test.go:331: SiblingsFiltered=46
BenchmarkNext 200000 10881 ns/op
--- BENCH: BenchmarkNext
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
bench_traversal_test.go:347: Next=49
BenchmarkNextFiltered 200000 12588 ns/op
--- BENCH: BenchmarkNextFiltered
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
bench_traversal_test.go:363: NextFiltered=6
BenchmarkNextAll 50000 45075 ns/op
--- BENCH: BenchmarkNextAll
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
bench_traversal_test.go:379: NextAll=234
BenchmarkNextAllFiltered 50000 50455 ns/op
--- BENCH: BenchmarkNextAllFiltered
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
bench_traversal_test.go:395: NextAllFiltered=33
BenchmarkPrev 200000 10933 ns/op
--- BENCH: BenchmarkPrev
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
bench_traversal_test.go:411: Prev=49
BenchmarkPrevFiltered 200000 12579 ns/op
--- BENCH: BenchmarkPrevFiltered
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
bench_traversal_test.go:429: PrevFiltered=7
BenchmarkPrevAll 100000 17751 ns/op
--- BENCH: BenchmarkPrevAll
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
bench_traversal_test.go:445: PrevAll=78
BenchmarkPrevAllFiltered 100000 19702 ns/op
--- BENCH: BenchmarkPrevAllFiltered
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
bench_traversal_test.go:461: PrevAllFiltered=6
BenchmarkNextUntil 20000 93586 ns/op
--- BENCH: BenchmarkNextUntil
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
bench_traversal_test.go:477: NextUntil=84
BenchmarkNextUntilSelection 50000 61155 ns/op
--- BENCH: BenchmarkNextUntilSelection
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
bench_traversal_test.go:494: NextUntilSelection=42
BenchmarkNextUntilNodes 100000 25805 ns/op
--- BENCH: BenchmarkNextUntilNodes
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
bench_traversal_test.go:512: NextUntilNodes=12
BenchmarkPrevUntil 10000 232225 ns/op
--- BENCH: BenchmarkPrevUntil
bench_traversal_test.go:528: PrevUntil=238
bench_traversal_test.go:528: PrevUntil=238
bench_traversal_test.go:528: PrevUntil=238
BenchmarkPrevUntilSelection 20000 78316 ns/op
--- BENCH: BenchmarkPrevUntilSelection
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
bench_traversal_test.go:545: PrevUntilSelection=49
BenchmarkPrevUntilNodes 100000 20657 ns/op
--- BENCH: BenchmarkPrevUntilNodes
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
bench_traversal_test.go:563: PrevUntilNodes=11
BenchmarkNextFilteredUntil 50000 46567 ns/op
--- BENCH: BenchmarkNextFilteredUntil
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
bench_traversal_test.go:579: NextFilteredUntil=22
BenchmarkNextFilteredUntilSelection 50000 67227 ns/op
--- BENCH: BenchmarkNextFilteredUntilSelection
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
bench_traversal_test.go:596: NextFilteredUntilSelection=22
BenchmarkNextFilteredUntilNodes 50000 66995 ns/op
--- BENCH: BenchmarkNextFilteredUntilNodes
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
bench_traversal_test.go:614: NextFilteredUntilNodes=22
BenchmarkPrevFilteredUntil 50000 47361 ns/op
--- BENCH: BenchmarkPrevFilteredUntil
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
bench_traversal_test.go:630: PrevFilteredUntil=20
BenchmarkPrevFilteredUntilSelection 50000 68802 ns/op
--- BENCH: BenchmarkPrevFilteredUntilSelection
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
bench_traversal_test.go:647: PrevFilteredUntilSelection=20
BenchmarkPrevFilteredUntilNodes 50000 68928 ns/op
--- BENCH: BenchmarkPrevFilteredUntilNodes
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
bench_traversal_test.go:665: PrevFilteredUntilNodes=20
BenchmarkClosest 500000 4922 ns/op
--- BENCH: BenchmarkClosest
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
bench_traversal_test.go:681: Closest=2
BenchmarkClosestSelection 5000000 738 ns/op
--- BENCH: BenchmarkClosestSelection
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
bench_traversal_test.go:698: ClosestSelection=2
BenchmarkClosestNodes 5000000 737 ns/op
--- BENCH: BenchmarkClosestNodes
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
bench_traversal_test.go:715: ClosestNodes=2
ok github.com/PuerkitoBio/goquery 224.003s
+20
View File
@@ -40,3 +40,23 @@ func BenchmarkMap(b *testing.B) {
}
b.Logf("Map=%d", n)
}
func BenchmarkEachWithBreak(b *testing.B) {
var tmp, n int
b.StopTimer()
sel := DocW().Find("td")
f := func(i int, s *Selection) bool {
tmp++
return tmp < 10
}
b.StartTimer()
for i := 0; i < b.N; i++ {
tmp = 0
sel.EachWithBreak(f)
if n == 0 {
n = tmp
}
}
b.Logf("Each=%d", n)
}
+4 -8
View File
@@ -1,4 +1,4 @@
// Copyright (c) 2012, Martin Angers & Contributors
// Copyright (c) 2012-2013, Martin Angers & Contributors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@@ -25,17 +25,12 @@
Package goquery implements features similar to jQuery, including the chainable
syntax, to manipulate and query an HTML document (the modification functions of jQuery are not included).
It depends on Go's experimental html package, which must be installed so that it
can be imported as "exp/html". See this tutorial on how to install it
accordingly: http://code.google.com/p/go-wiki/wiki/InstallingExp
It uses Cascadia as CSS selector (similar to Sizzle for jQuery). This dependency
is automatically installed when using "go get ..." to install GoQuery.
It uses Cascadia as CSS selector (similar to Sizzle for jQuery).
To provide a chainable interface, error management is strict, and goquery panics
if an invalid Cascadia selector is used (this is consistent with the behavior of
jQuery/Sizzle/document.querySelectorAll, where an error is thrown). This is
necessary since multiple return values cannot be used to allow a chainable
necessary since multiple return values cannot be used to allow a chainable
interface.
It is hosted on GitHub, along with additional documentation in the README.md
@@ -65,6 +60,7 @@ The various methods are split into files based on the category of behavior:
* iteration.go : methods to loop over the selection's nodes.
- Each()
- EachWithBreak()
- Map()
* property.go : methods that inspect and get the node's properties values.
+1 -1
View File
@@ -1,7 +1,7 @@
package goquery
import (
"exp/html"
"code.google.com/p/go.net/html"
)
// Add() adds the selector string's matching nodes to those in the current
+1 -1
View File
@@ -2,7 +2,7 @@ package goquery
import (
"code.google.com/p/cascadia"
"exp/html"
"code.google.com/p/go.net/html"
)
// Filter() reduces the set of matched elements to those that match the selector string.
+13
View File
@@ -9,6 +9,19 @@ func (this *Selection) Each(f func(int, *Selection)) *Selection {
return this
}
// EachWithBreak() iterates over a Selection object, executing a function for each
// matched element. It is identical to `Each()` except that it is possible to break
// out of the loop by returning `false` in the callback function. It returns the
// current Selection object.
func (this *Selection) EachWithBreak(f func(int, *Selection) bool) *Selection {
for i, n := range this.Nodes {
if !f(i, newSingleSelection(n, this.document)) {
return this
}
}
return this
}
// Map() passes each element in the current matched set through a function,
// producing a slice of string holding the returned values.
func (this *Selection) Map(f func(int, *Selection) string) (result []string) {
+16 -1
View File
@@ -1,7 +1,7 @@
package goquery
import (
"exp/html"
"code.google.com/p/go.net/html"
"testing"
)
@@ -19,6 +19,21 @@ func TestEach(t *testing.T) {
AssertLength(t, sel.Nodes, 6)
}
func TestEachWithBreak(t *testing.T) {
var cnt int
sel := Doc().Find(".hero-unit .row-fluid").EachWithBreak(func(i int, n *Selection) bool {
cnt++
t.Logf("At index %v, node %v", i, n.Nodes[0].Data)
return false
}).Find("a")
if cnt != 1 {
t.Errorf("Expected Each() to call function 1 time, got %v times.", cnt)
}
AssertLength(t, sel.Nodes, 6)
}
func TestEachEmptySelection(t *testing.T) {
var cnt int
+1 -1
View File
@@ -2,7 +2,7 @@ package goquery
import (
"bytes"
"exp/html"
"code.google.com/p/go.net/html"
)
// Attr() gets the specified attribute's value for the first element in the
+4 -4
View File
@@ -2,11 +2,13 @@ package goquery
import (
"code.google.com/p/cascadia"
"exp/html"
"code.google.com/p/go.net/html"
"regexp"
"strings"
)
var rxClassTrim = regexp.MustCompile("[\t\r\n]")
// Is() checks the current matched set of elements against a selector and
// returns true if at least one of these elements matches.
func (this *Selection) Is(selector string) bool {
@@ -44,14 +46,12 @@ func (this *Selection) IsNodes(nodes ...*html.Node) bool {
// HasClass() determines whether any of the matched elements are assigned the
// given class.
func (this *Selection) HasClass(class string) bool {
var rx = regexp.MustCompile("[\t\r\n]")
class = " " + class + " "
for _, n := range this.Nodes {
// Applies only to element nodes
if n.Type == html.ElementNode {
if elClass, ok := getAttributeValue("class", n); ok {
elClass = rx.ReplaceAllString(" "+elClass+" ", " ")
elClass = rxClassTrim.ReplaceAllString(" "+elClass+" ", " ")
if strings.Index(elClass, class) > -1 {
return true
}
+1 -1
View File
@@ -2,7 +2,7 @@ package goquery
import (
"code.google.com/p/cascadia"
"exp/html"
"code.google.com/p/go.net/html"
)
type siblingType int
+26 -6
View File
@@ -1,7 +1,8 @@
package goquery
import (
"exp/html"
"code.google.com/p/go.net/html"
"io"
"net/http"
"net/url"
)
@@ -32,6 +33,26 @@ func NewDocument(url string) (d *Document, e error) {
if e != nil {
return
}
return NewDocumentFromResponse(res)
}
// NewDocumentFromReader() returns a Document from a generic reader.
// It returns an error as second value if the reader's data cannot be parsed
// as html. It does *not* check if the reader is also an io.Closer, so the
// provided reader is never closed by this call, it is the responsibility
// of the caller to close it if required.
func NewDocumentFromReader(r io.Reader) (d *Document, e error) {
root, e := html.Parse(r)
if e != nil {
return nil, e
}
return newDocument(root, nil), nil
}
// NewDocumentFromResponse() is another Document constructor that takes an http resonse as argument.
// It loads the specified response's document, parses it, and stores the root Document
// node, ready to be manipulated.
func NewDocumentFromResponse(res *http.Response) (d *Document, e error) {
defer res.Body.Close()
// Parse the HTML into nodes
@@ -41,16 +62,15 @@ func NewDocument(url string) (d *Document, e error) {
}
// Create and fill the document
d = newDocument(root, res.Request.URL)
return
return newDocument(root, res.Request.URL), nil
}
// Private constructor, make sure all fields are correctly filled.
func newDocument(root *html.Node, url *url.URL) (d *Document) {
func newDocument(root *html.Node, url *url.URL) *Document {
// Create and fill the document
d = &Document{nil, url, root}
d := &Document{nil, url, root}
d.Selection = newSingleSelection(root, d)
return
return d
}
// Selection represents a collection of nodes matching some criteria. The
+50 -1
View File
@@ -1,7 +1,8 @@
package goquery
import (
"exp/html"
"bytes"
"code.google.com/p/go.net/html"
"fmt"
"os"
"testing"
@@ -99,3 +100,51 @@ func TestNewDocument(t *testing.T) {
}
}
}
func TestNewDocumentFromReader(t *testing.T) {
cases := []struct {
src string
err bool
sel string
cnt int
}{
0: {
src: `
<html>
<head>
<title>Test</title>
<body>
<h1>Hi</h1>
</body>
</html>`,
sel: "h1",
cnt: 1,
},
1: {
// Actually pretty hard to make html.Parse return an error
// based on content...
src: `<html><body><aef<eqf>>>qq></body></ht>`,
},
}
buf := bytes.NewBuffer(nil)
for i, c := range cases {
buf.Reset()
buf.WriteString(c.src)
d, e := NewDocumentFromReader(buf)
if (e != nil) != c.err {
if c.err {
t.Errorf("[%d] - expected error, got none", i)
} else {
t.Errorf("[%d] - expected no error, got %s", i, e)
}
}
if c.sel != "" {
s := d.Find(c.sel)
if s.Length() != c.cnt {
t.Errorf("[%d] - expected %d nodes, found %d", i, c.cnt, s.Length())
}
}
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
package goquery
import (
"exp/html"
"code.google.com/p/go.net/html"
)
func getChildren(n *html.Node) (result []*html.Node) {