Full Code of PuerkitoBio/goquery for AI

master 401642b25334 cached
59 files
594.6 KB
182.4k tokens
668 symbols
1 requests
Download .txt
Showing preview only (618K chars total). Download the full file or copy to clipboard to get everything.
Repository: PuerkitoBio/goquery
Branch: master
Commit: 401642b25334
Files: 59
Total size: 594.6 KB

Directory structure:
gitextract_cl6vi3ng/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── test.yml
├── .gitignore
├── LICENSE
├── README.md
├── array.go
├── array_test.go
├── bench/
│   ├── v0.1.0
│   ├── v0.1.1
│   ├── v0.2.0
│   ├── v0.2.1-go1.1rc1
│   ├── v0.3.0
│   ├── v0.3.2-go1.2
│   ├── v0.3.2-go1.2-take2
│   ├── v0.3.2-go1.2rc1
│   ├── v1.0.0-go1.7
│   ├── v1.0.1a-go1.7
│   ├── v1.0.1b-go1.7
│   └── v1.0.1c-go1.7
├── bench_array_test.go
├── bench_example_test.go
├── bench_expand_test.go
├── bench_filter_test.go
├── bench_iteration_test.go
├── bench_property_test.go
├── bench_query_test.go
├── bench_traversal_test.go
├── doc/
│   └── tips.md
├── doc.go
├── example_test.go
├── expand.go
├── expand_test.go
├── filter.go
├── filter_test.go
├── go.mod
├── go.sum
├── iteration.go
├── iteration_test.go
├── manipulation.go
├── manipulation_test.go
├── misc/
│   └── git/
│       └── pre-commit
├── property.go
├── property_test.go
├── query.go
├── query_test.go
├── testdata/
│   ├── gotesting.html
│   ├── gowiki.html
│   ├── metalreview.html
│   ├── page.html
│   ├── page2.html
│   └── page3.html
├── traversal.go
├── traversal_test.go
├── type.go
├── type_test.go
├── utilities.go
└── utilities_test.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
testdata/* linguist-vendored


================================================
FILE: .github/FUNDING.yml
================================================
github: [mna]
custom: ["https://www.buymeacoffee.com/mna"]


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  # Maintain dependencies for Go
  - package-ecosystem: "gomod"
    directory: "/"
    schedule:
      interval: "daily"
  # Enable version updates for GitHub action workflows
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"


================================================
FILE: .github/workflows/test.yml
================================================
name: test
on: [push, pull_request]

env:
  GOPROXY: https://proxy.golang.org,direct

jobs:
  test:
    strategy:
      matrix:
        go-version: [1.25.x, 1.26.x]
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Install Go
        uses: actions/setup-go@v6
        with:
          go-version: ${{ matrix.go-version }}

      - name: Test
        run: go test ./... -v -cover


================================================
FILE: .gitignore
================================================
# editor temporary files
*.sublime-*
.DS_Store
*.swp
#*.*#
tags

# direnv config
.env*

# test binaries
*.test

# coverage and profilte outputs
*.out



================================================
FILE: LICENSE
================================================
Copyright (c) 2012-2021, 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:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================
# goquery - a little like that j-thing, only in Go

[![Build Status](https://github.com/PuerkitoBio/goquery/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/PuerkitoBio/goquery/actions)
[![Go Reference](https://pkg.go.dev/badge/github.com/PuerkitoBio/goquery.svg)](https://pkg.go.dev/github.com/PuerkitoBio/goquery)
[![Sourcegraph Badge](https://sourcegraph.com/github.com/PuerkitoBio/goquery/-/badge.svg)](https://sourcegraph.com/github.com/PuerkitoBio/goquery?badge)

goquery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on Go's [net/html package][html] and the CSS Selector library [cascadia][]. Since the net/html parser returns nodes, and not a full-featured DOM tree, jQuery's stateful manipulation functions (like height(), css(), detach()) have been left off.

Also, because the net/html parser requires UTF-8 encoding, so does goquery: it is the caller's responsibility to ensure that the source document provides UTF-8 encoded HTML. See the [wiki][] for various options to do this.

Syntax-wise, it is as close as possible to jQuery, with the same function names when possible, and that warm and fuzzy chainable interface. jQuery being the ultra-popular library that it is, I felt that writing a similar HTML-manipulating library was better to follow its API than to start anew (in the same spirit as Go's `fmt` package), even though some of its methods are less than intuitive (looking at you, [index()][index]...).

## Table of Contents

* [Installation](#installation)
* [Changelog](#changelog)
* [API](#api)
* [Examples](#examples)
* [Related Projects](#related-projects)
* [Support](#support)
* [License](#license)

## Installation

Required Go version:

* Starting with version `v1.12.0` of goquery, Go 1.25+ is required due to its dependencies.
* Starting with version `v1.11.0` of goquery, Go 1.24+ is required due to its dependencies.
* Starting with version `v1.10.0` of goquery, Go 1.23+ is required due to the use of function-based iterators.
* For `v1.9.0` of goquery, Go 1.18+ is required due to the use of generics.
* For previous goquery versions, a Go version of 1.1+ was required because of the `net/html` dependency.

Ongoing goquery development is tested on the latest 2 versions of Go.

    $ go get github.com/PuerkitoBio/goquery

(optional) To run unit tests:

    $ cd $GOPATH/src/github.com/PuerkitoBio/goquery
    $ go test

(optional) To run benchmarks (warning: it runs for a few minutes):

    $ cd $GOPATH/src/github.com/PuerkitoBio/goquery
    $ go test -bench=".*"

## Changelog

**Note that goquery's API is now stable, and will not break.**

*    **2026-03-15 (v1.12.0)** : Update `go.mod` dependencies, add go1.26 to the test matrix, **goquery now requires Go version 1.25+**.
*    **2025-11-16 (v1.11.0)** : Update `go.mod` dependencies, add go1.25 to the test matrix, **goquery now requires Go version 1.24+**.
*    **2025-04-11 (v1.10.3)** : Update `go.mod` dependencies, small optimization (thanks [@myxzlpltk](https://github.com/myxzlpltk)).
*    **2025-02-13 (v1.10.2)** : Update `go.mod` dependencies, add go1.24 to the test matrix.
*    **2024-12-26 (v1.10.1)** : Update `go.mod` dependencies.
*    **2024-09-06 (v1.10.0)** : Add `EachIter` which provides an iterator that can be used in `for..range` loops on the `*Selection` object. **goquery now requires Go version 1.23+** (thanks [@amikai](https://github.com/amikai)).
*    **2024-09-06 (v1.9.3)** : Update `go.mod` dependencies.
*    **2024-04-29 (v1.9.2)** : Update `go.mod` dependencies.
*    **2024-02-29 (v1.9.1)** : Improve allocation and performance of the `Map` function and `Selection.Map` method, better document the cascadia differences (thanks [@jwilsson](https://github.com/jwilsson)).
*    **2024-02-22 (v1.9.0)** : Add a generic `Map` function, **goquery now requires Go version 1.18+** (thanks [@Fesaa](https://github.com/Fesaa)).
*    **2023-02-18 (v1.8.1)** : Update `go.mod` dependencies, update CI workflow.
*    **2021-10-25 (v1.8.0)** : Add `Render` function to render a `Selection` to an `io.Writer` (thanks [@anthonygedeon](https://github.com/anthonygedeon)).
*    **2021-07-11 (v1.7.1)** : Update go.mod dependencies and add dependabot config (thanks [@jauderho](https://github.com/jauderho)).
*    **2021-06-14 (v1.7.0)** : Add `Single` and `SingleMatcher` functions to optimize first-match selection (thanks [@gdollardollar](https://github.com/gdollardollar)).
*    **2021-01-11 (v1.6.1)** : Fix panic when calling `{Prepend,Append,Set}Html` on a `Selection` that contains non-Element nodes.
*    **2020-10-08 (v1.6.0)** : Parse html in context of the container node for all functions that deal with html strings (`AfterHtml`, `AppendHtml`, etc.). Thanks to [@thiemok][thiemok] and [@davidjwilkins][djw] for their work on this.
*    **2020-02-04 (v1.5.1)** : Update module dependencies.
*    **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505).
*    **2018-06-07 (v1.4.1)** : Add `NewDocumentFromReader` examples.
*    **2018-03-24 (v1.4.0)** : Deprecate `NewDocument(url)` and `NewDocumentFromResponse(response)`.
*    **2018-01-28 (v1.3.0)** : Add `ToEnd` constant to `Slice` until the end of the selection (thanks to @davidjwilkins for raising the issue).
*    **2018-01-11 (v1.2.0)** : Add `AddBack*` and deprecate `AndSelf` (thanks to @davidjwilkins).
*    **2017-02-12 (v1.1.0)** : Add `SetHtml` and `SetText` (thanks to @glebtv).
*    **2016-12-29 (v1.0.2)** : Optimize allocations for `Selection.Text` (thanks to @radovskyb).
*    **2016-08-28 (v1.0.1)** : Optimize performance for large documents.
*    **2016-07-27 (v1.0.0)** : Tag version 1.0.0.
*    **2016-06-15** : Invalid selector strings internally compile to a `Matcher` implementation that never matches any node (instead of a panic). So for example, `doc.Find("~")` returns an empty `*Selection` object.
*    **2016-02-02** : Add `NodeName` utility function similar to the DOM's `nodeName` property. It returns the tag name of the first element in a selection, and other relevant values of non-element nodes (see [doc][] for details). Add `OuterHtml` utility function similar to the DOM's `outerHTML` property (named `OuterHtml` in small caps for consistency with the existing `Html` method on the `Selection`).
*    **2015-04-20** : Add `AttrOr` helper method to return the attribute's value or a default value if absent. Thanks to [piotrkowalczuk][piotr].
*    **2015-02-04** : Add more manipulation functions - Prepend* - thanks again to [Andrew Stone][thatguystone].
*    **2014-11-28** : Add more manipulation functions - ReplaceWith*, Wrap* and Unwrap - thanks again to [Andrew Stone][thatguystone].
*    **2014-11-07** : Add manipulation functions (thanks to [Andrew Stone][thatguystone]) and `*Matcher` functions, that receive compiled cascadia selectors instead of selector strings, thus avoiding potential panics thrown by goquery via `cascadia.MustCompile` calls. This results in better performance (selectors can be compiled once and reused) and more idiomatic error handling (you can handle cascadia's compilation errors, instead of recovering from panics, which had been bugging me for a long time). Note that the actual type expected is a `Matcher` interface, that `cascadia.Selector` implements. Other matcher implementations could be used.
*    **2014-11-06** : Change import paths of net/html to golang.org/x/net/html (see https://groups.google.com/forum/#!topic/golang-nuts/eD8dh3T9yyA). Make sure to update your code to use the new import path too when you call goquery with `html.Node`s.
*    **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.

## API

goquery exposes two structs, `Document` and `Selection`, and the `Matcher` interface. Unlike jQuery, which is loaded as part of a DOM document, and thus acts on its containing document, goquery doesn't know which HTML document to act upon. So it needs to be told, and that's what the `Document` type is for. It holds the root document node as the initial Selection value to manipulate.

jQuery often has many variants for the same function (no argument, a selector string argument, a jQuery object argument, a DOM element argument, ...). Instead of exposing the same features in goquery as a single method with variadic empty interface arguments, statically-typed signatures are used following this naming convention:

*    When the jQuery equivalent can be called with no argument, it has the same name as jQuery for the no argument signature (e.g.: `Prev()`), and the version with a selector string argument is called `XxxFiltered()` (e.g.: `PrevFiltered()`)
*    When the jQuery equivalent **requires** one argument, the same name as jQuery is used for the selector string version (e.g.: `Is()`)
*    The signatures accepting a jQuery object as argument are defined in goquery as `XxxSelection()` and take a `*Selection` object as argument (e.g.: `FilterSelection()`)
*    The signatures accepting a DOM element as argument in jQuery are defined in goquery as `XxxNodes()` and take a variadic argument of type `*html.Node` (e.g.: `FilterNodes()`)
*    The signatures accepting a function as argument in jQuery are defined in goquery as `XxxFunction()` and take a function as argument (e.g.: `FilterFunction()`)
*    The goquery methods that can be called with a selector string have a corresponding version that take a `Matcher` interface and are defined as `XxxMatcher()` (e.g.: `IsMatcher()`)

Utility functions that are not in jQuery but are useful in Go are implemented as functions (that take a `*Selection` as parameter), to avoid a potential naming clash on the `*Selection`'s methods (reserved for jQuery-equivalent behaviour).

The complete [package reference documentation can be found here][doc].

Please note that Cascadia's selectors do not necessarily match all supported selectors of jQuery (Sizzle). See the [cascadia project][cascadia] for details. Also, the selectors work more like the DOM's `querySelectorAll`, than jQuery's matchers - they have no concept of contextual matching (for some concrete examples of what that means, see [this ticket](https://github.com/andybalholm/cascadia/issues/61)). In practice, it doesn't matter very often but it's something worth mentioning. Invalid selector strings compile to a `Matcher` that fails to match any node. Behaviour of the various functions that take a selector string as argument follows from that fact, e.g. (where `~` is an invalid selector string):

* `Find("~")` returns an empty selection because the selector string doesn't match anything.
* `Add("~")` returns a new selection that holds the same nodes as the original selection, because it didn't add any node (selector string didn't match anything).
* `ParentsFiltered("~")` returns an empty selection because the selector string doesn't match anything.
* `ParentsUntil("~")` returns all parents of the selection because the selector string didn't match any element to stop before the top element.

## Examples

See some tips and tricks in the [wiki][].

Adapted from example_test.go:

```Go
package main

import (
  "fmt"
  "log"
  "net/http"

  "github.com/PuerkitoBio/goquery"
)

func ExampleScrape() {
  // Request the HTML page.
  res, err := http.Get("http://metalsucks.net")
  if err != nil {
    log.Fatal(err)
  }
  defer res.Body.Close()
  if res.StatusCode != 200 {
    log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
  }

  // Load the HTML document
  doc, err := goquery.NewDocumentFromReader(res.Body)
  if err != nil {
    log.Fatal(err)
  }

  // Find the review items
  doc.Find(".left-content article .post-title").Each(func(i int, s *goquery.Selection) {
		// For each item found, get the title
		title := s.Find("a").Text()
		fmt.Printf("Review %d: %s\n", i, title)
	})
}

func main() {
  ExampleScrape()
}
```

## Related Projects

- [Goq][goq], an HTML deserialization and scraping library based on goquery and struct tags.
- [andybalholm/cascadia][cascadia], the CSS selector library used by goquery.
- [suntong/cascadia][cascadiacli], a command-line interface to the cascadia CSS selector library, useful to test selectors.
- [gocolly/colly](https://github.com/gocolly/colly), a lightning fast and elegant Scraping Framework
- [gnulnx/goperf](https://github.com/gnulnx/goperf), a website performance test tool that also fetches static assets.
- [MontFerret/ferret](https://github.com/MontFerret/ferret), declarative web scraping.
- [tacusci/berrycms](https://github.com/tacusci/berrycms), a modern simple to use CMS with easy to write plugins
- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers.
- [Geziyor](https://github.com/geziyor/geziyor), a fast web crawling & scraping framework for Go. Supports JS rendering.
- [Pagser](https://github.com/foolin/pagser), a simple, easy, extensible, configurable HTML parser to struct based on goquery and struct tags.
- [stitcherd](https://github.com/vhodges/stitcherd), A server for doing server side includes using css selectors and DOM updates.
- [goskyr](https://github.com/jakopako/goskyr), an easily configurable command-line scraper written in Go.
- [goGetJS](https://github.com/davemolk/goGetJS), a tool for extracting, searching, and saving JavaScript files (with optional headless browser).
- [fitter](https://github.com/PxyUp/fitter), a tool for selecting values from JSON, XML, HTML and XPath formatted pages.
- [seltabl](github.com/conneroisu/seltabl), an orm-like package and supporting language server for extracting values from HTML

## Support

There are a number of ways you can support the project:

* Use it, star it, build something with it, spread the word!
  - If you do build something open-source or otherwise publicly-visible, let me know so I can add it to the [Related Projects](#related-projects) section!
* Raise issues to improve the project (note: doc typos and clarifications are issues too!)
  - Please search existing issues before opening a new one - it may have already been addressed.
* Pull requests: please discuss new code in an issue first, unless the fix is really trivial.
  - Make sure new code is tested.
  - Be mindful of existing code - PRs that break existing code have a high probability of being declined, unless it fixes a serious issue.
* Sponsor the developer
  - See the Github Sponsor button at the top of the repo on github
  - or via BuyMeACoffee.com, below

<a href="https://www.buymeacoffee.com/mna" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a>

## License

The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia's license is [here][caslic].

[jquery]: https://jquery.com/
[go]: https://go.dev/
[cascadia]: https://github.com/andybalholm/cascadia
[cascadiacli]: https://github.com/suntong/cascadia
[bsd]: https://opensource.org/licenses/BSD-3-Clause
[golic]: https://go.dev/LICENSE
[caslic]: https://github.com/andybalholm/cascadia/blob/master/LICENSE
[doc]: https://pkg.go.dev/github.com/PuerkitoBio/goquery
[index]: https://api.jquery.com/index/
[gonet]: https://github.com/golang/net/
[html]: https://pkg.go.dev/golang.org/x/net/html
[wiki]: https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks
[thatguystone]: https://github.com/thatguystone
[piotr]: https://github.com/piotrkowalczuk
[goq]: https://github.com/andrewstuart/goq
[thiemok]: https://github.com/thiemok
[djw]: https://github.com/davidjwilkins


================================================
FILE: array.go
================================================
package goquery

import (
	"golang.org/x/net/html"
)

const (
	maxUint = ^uint(0)
	maxInt  = int(maxUint >> 1)

	// ToEnd is a special index value that can be used as end index in a call
	// to Slice so that all elements are selected until the end of the Selection.
	// It is equivalent to passing (*Selection).Length().
	ToEnd = maxInt
)

// First reduces the set of matched elements to the first in the set.
// It returns a new Selection object, and an empty Selection object if the
// the selection is empty.
func (s *Selection) First() *Selection {
	return s.Eq(0)
}

// Last reduces the set of matched elements to the last in the set.
// It returns a new Selection object, and an empty Selection object if
// the selection is empty.
func (s *Selection) Last() *Selection {
	return s.Eq(-1)
}

// Eq reduces the set of matched elements to the one at the specified index.
// If a negative index is given, it counts backwards starting at the end of the
// set. It returns a new Selection object, and an empty Selection object if the
// index is invalid.
func (s *Selection) Eq(index int) *Selection {
	if index < 0 {
		index += len(s.Nodes)
	}

	if index >= len(s.Nodes) || index < 0 {
		return newEmptySelection(s.document)
	}

	return s.Slice(index, index+1)
}

// Slice reduces the set of matched elements to a subset specified by a range
// of indices. The start index is 0-based and indicates the index of the first
// element to select. The end index is 0-based and indicates the index at which
// the elements stop being selected (the end index is not selected).
//
// The indices may be negative, in which case they represent an offset from the
// end of the selection.
//
// The special value ToEnd may be specified as end index, in which case all elements
// until the end are selected. This works both for a positive and negative start
// index.
func (s *Selection) Slice(start, end int) *Selection {
	if start < 0 {
		start += len(s.Nodes)
	}
	if end == ToEnd {
		end = len(s.Nodes)
	} else if end < 0 {
		end += len(s.Nodes)
	}
	return pushStack(s, s.Nodes[start:end])
}

// Get retrieves the underlying node at the specified index.
// Get without parameter is not implemented, since the node array is available
// on the Selection object.
func (s *Selection) Get(index int) *html.Node {
	if index < 0 {
		index += len(s.Nodes) // Negative index gets from the end
	}
	return s.Nodes[index]
}

// Index returns the position of the first element within the Selection object
// relative to its sibling elements.
func (s *Selection) Index() int {
	if len(s.Nodes) > 0 {
		return newSingleSelection(s.Nodes[0], s.document).PrevAll().Length()
	}
	return -1
}

// IndexSelector returns the position of the first element within the
// Selection object relative to the elements matched by the selector, or -1 if
// not found.
func (s *Selection) IndexSelector(selector string) int {
	if len(s.Nodes) > 0 {
		sel := s.document.Find(selector)
		return indexInSlice(sel.Nodes, s.Nodes[0])
	}
	return -1
}

// IndexMatcher returns the position of the first element within the
// Selection object relative to the elements matched by the matcher, or -1 if
// not found.
func (s *Selection) IndexMatcher(m Matcher) int {
	if len(s.Nodes) > 0 {
		sel := s.document.FindMatcher(m)
		return indexInSlice(sel.Nodes, s.Nodes[0])
	}
	return -1
}

// IndexOfNode returns the position of the specified node within the Selection
// object, or -1 if not found.
func (s *Selection) IndexOfNode(node *html.Node) int {
	return indexInSlice(s.Nodes, node)
}

// IndexOfSelection returns the position of the first node in the specified
// Selection object within this Selection object, or -1 if not found.
func (s *Selection) IndexOfSelection(sel *Selection) int {
	if sel != nil && len(sel.Nodes) > 0 {
		return indexInSlice(s.Nodes, sel.Nodes[0])
	}
	return -1
}


================================================
FILE: array_test.go
================================================
package goquery

import (
	"testing"
)

func TestFirst(t *testing.T) {
	sel := Doc().Find(".pvk-content").First()
	assertLength(t, sel.Nodes, 1)
}

func TestFirstEmpty(t *testing.T) {
	sel := Doc().Find(".pvk-zzcontentzz").First()
	assertLength(t, sel.Nodes, 0)
}

func TestFirstInvalid(t *testing.T) {
	sel := Doc().Find("").First()
	assertLength(t, sel.Nodes, 0)
}

func TestFirstRollback(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	sel2 := sel.First().End()
	assertEqual(t, sel, sel2)
}

func TestLast(t *testing.T) {
	sel := Doc().Find(".pvk-content").Last()
	assertLength(t, sel.Nodes, 1)

	// Should contain Footer
	foot := Doc().Find(".footer")
	if !sel.Contains(foot.Nodes[0]) {
		t.Error("Last .pvk-content should contain .footer.")
	}
}

func TestLastEmpty(t *testing.T) {
	sel := Doc().Find(".pvk-zzcontentzz").Last()
	assertLength(t, sel.Nodes, 0)
}

func TestLastInvalid(t *testing.T) {
	sel := Doc().Find("").Last()
	assertLength(t, sel.Nodes, 0)
}

func TestLastRollback(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	sel2 := sel.Last().End()
	assertEqual(t, sel, sel2)
}

func TestEq(t *testing.T) {
	sel := Doc().Find(".pvk-content").Eq(1)
	assertLength(t, sel.Nodes, 1)
}

func TestEqNegative(t *testing.T) {
	sel := Doc().Find(".pvk-content").Eq(-1)
	assertLength(t, sel.Nodes, 1)

	// Should contain Footer
	foot := Doc().Find(".footer")
	if !sel.Contains(foot.Nodes[0]) {
		t.Error("Index -1 of .pvk-content should contain .footer.")
	}
}

func TestEqEmpty(t *testing.T) {
	sel := Doc().Find("something_random_that_does_not_exists").Eq(0)
	assertLength(t, sel.Nodes, 0)
}

func TestEqInvalid(t *testing.T) {
	sel := Doc().Find("").Eq(0)
	assertLength(t, sel.Nodes, 0)
}

func TestEqInvalidPositive(t *testing.T) {
	sel := Doc().Find(".pvk-content").Eq(3)
	assertLength(t, sel.Nodes, 0)
}

func TestEqInvalidNegative(t *testing.T) {
	sel := Doc().Find(".pvk-content").Eq(-4)
	assertLength(t, sel.Nodes, 0)
}

func TestEqRollback(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	sel2 := sel.Eq(1).End()
	assertEqual(t, sel, sel2)
}

func TestSlice(t *testing.T) {
	sel := Doc().Find(".pvk-content").Slice(0, 2)

	assertLength(t, sel.Nodes, 2)
	assertSelectionIs(t, sel, "#pc1", "#pc2")
}

func TestSliceToEnd(t *testing.T) {
	sel := Doc().Find(".pvk-content").Slice(1, ToEnd)

	assertLength(t, sel.Nodes, 2)
	assertSelectionIs(t, sel.Eq(0), "#pc2")
	if _, ok := sel.Eq(1).Attr("id"); ok {
		t.Error("Want no attribute ID, got one")
	}
}

func TestSliceEmpty(t *testing.T) {
	defer assertPanic(t)
	Doc().Find("x").Slice(0, 2)
}

func TestSliceInvalid(t *testing.T) {
	defer assertPanic(t)
	Doc().Find("").Slice(0, 2)
}

func TestSliceInvalidToEnd(t *testing.T) {
	defer assertPanic(t)
	Doc().Find("").Slice(2, ToEnd)
}

func TestSliceOutOfBounds(t *testing.T) {
	defer assertPanic(t)
	Doc().Find(".pvk-content").Slice(2, 12)
}

func TestNegativeSliceStart(t *testing.T) {
	sel := Doc().Find(".container-fluid").Slice(-2, 3)
	assertLength(t, sel.Nodes, 1)
	assertSelectionIs(t, sel.Eq(0), "#cf3")
}

func TestNegativeSliceEnd(t *testing.T) {
	sel := Doc().Find(".container-fluid").Slice(1, -1)
	assertLength(t, sel.Nodes, 2)
	assertSelectionIs(t, sel.Eq(0), "#cf2")
	assertSelectionIs(t, sel.Eq(1), "#cf3")
}

func TestNegativeSliceBoth(t *testing.T) {
	sel := Doc().Find(".container-fluid").Slice(-3, -1)
	assertLength(t, sel.Nodes, 2)
	assertSelectionIs(t, sel.Eq(0), "#cf2")
	assertSelectionIs(t, sel.Eq(1), "#cf3")
}

func TestNegativeSliceToEnd(t *testing.T) {
	sel := Doc().Find(".container-fluid").Slice(-3, ToEnd)
	assertLength(t, sel.Nodes, 3)
	assertSelectionIs(t, sel, "#cf2", "#cf3", "#cf4")
}

func TestNegativeSliceOutOfBounds(t *testing.T) {
	defer assertPanic(t)
	Doc().Find(".container-fluid").Slice(-12, -7)
}

func TestSliceRollback(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	sel2 := sel.Slice(0, 2).End()
	assertEqual(t, sel, sel2)
}

func TestGet(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	node := sel.Get(1)
	if sel.Nodes[1] != node {
		t.Errorf("Expected node %v to be %v.", node, sel.Nodes[1])
	}
}

func TestGetNegative(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	node := sel.Get(-3)
	if sel.Nodes[0] != node {
		t.Errorf("Expected node %v to be %v.", node, sel.Nodes[0])
	}
}

func TestGetInvalid(t *testing.T) {
	defer assertPanic(t)
	sel := Doc().Find(".pvk-content")
	sel.Get(129)
}

func TestIndex(t *testing.T) {
	sel := Doc().Find(".pvk-content")
	if i := sel.Index(); i != 1 {
		t.Errorf("Expected index of 1, got %v.", i)
	}
}

func TestIndexSelector(t *testing.T) {
	sel := Doc().Find(".hero-unit")
	if i := sel.IndexSelector("div"); i != 4 {
		t.Errorf("Expected index of 4, got %v.", i)
	}
}

func TestIndexSelectorInvalid(t *testing.T) {
	sel := Doc().Find(".hero-unit")
	if i := sel.IndexSelector(""); i != -1 {
		t.Errorf("Expected index of -1, got %v.", i)
	}
}

func TestIndexOfNode(t *testing.T) {
	sel := Doc().Find("div.pvk-gutter")
	if i := sel.IndexOfNode(sel.Nodes[1]); i != 1 {
		t.Errorf("Expected index of 1, got %v.", i)
	}
}

func TestIndexOfNilNode(t *testing.T) {
	sel := Doc().Find("div.pvk-gutter")
	if i := sel.IndexOfNode(nil); i != -1 {
		t.Errorf("Expected index of -1, got %v.", i)
	}
}

func TestIndexOfSelection(t *testing.T) {
	sel := Doc().Find("div")
	sel2 := Doc().Find(".hero-unit")
	if i := sel.IndexOfSelection(sel2); i != 4 {
		t.Errorf("Expected index of 4, got %v.", i)
	}
}


================================================
FILE: bench/v0.1.0
================================================
PASS
BenchmarkFirst	20000000	        92.9 ns/op
BenchmarkLast	20000000	        91.6 ns/op
BenchmarkEq	20000000	        90.6 ns/op
BenchmarkSlice	20000000	        86.7 ns/op
BenchmarkGet	1000000000	         2.14 ns/op
BenchmarkIndex	  500000	      5308 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	   50000	     54962 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	        11.4 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	        12.1 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	    5000	    327144 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	   50000	     52945 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	       203 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	      2639 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	   50000	     30182 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	     34855 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	     66052 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	     69721 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	     66077 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	     80021 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	     66256 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	     79568 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	    569441 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	    230585 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	    231470 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.65 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	      9558 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	     16809 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	        37.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	     18583 ns/op
BenchmarkLength	2000000000	         0.80 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	       666 ns/op
BenchmarkIs	   50000	     34328 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	   50000	     32423 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	      2707 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	     66976 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	     66740 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	    701722 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.9 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	   50000	     55444 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	   10000	    127984 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
BenchmarkFindSelection	    5000	    355944 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	    355596 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	      5656 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	  200000	      9007 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	 1000000	      1237 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
BenchmarkChildrenFiltered	  500000	      5613 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	     47026 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	     51438 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	     91820 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	     95156 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	   10000	    134383 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
BenchmarkParentsUntilSelection	   10000	    235456 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	    235936 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	   50000	     32451 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	   50000	     30570 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	   50000	     30729 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	   10000	    106704 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
BenchmarkSiblingsFiltered	   10000	    115592 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
BenchmarkNext	   50000	     54449 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	   50000	     58503 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	   20000	     77698 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	   20000	     85034 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	   50000	     56458 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	   50000	     60163 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	   50000	     47679 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	   50000	     51563 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	   10000	    213998 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
BenchmarkNextUntilSelection	   10000	    140720 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
BenchmarkNextUntilNodes	   20000	     90702 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	    5000	    456039 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	   10000	    167944 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
BenchmarkPrevUntilNodes	   20000	     82059 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	   10000	    150883 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
BenchmarkNextFilteredUntilSelection	   10000	    146578 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
BenchmarkNextFilteredUntilNodes	   10000	    148284 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
BenchmarkPrevFilteredUntil	   10000	    154303 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
BenchmarkPrevFilteredUntilSelection	   10000	    149062 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
BenchmarkPrevFilteredUntilNodes	   10000	    150584 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
ok  	github.com/PuerkitoBio/goquery	188.326s


================================================
FILE: bench/v0.1.1
================================================
PASS
BenchmarkFirst	20000000	        96.2 ns/op
BenchmarkLast	20000000	        95.8 ns/op
BenchmarkEq	20000000	        94.4 ns/op
BenchmarkSlice	20000000	        89.9 ns/op
BenchmarkGet	1000000000	         2.31 ns/op
BenchmarkIndex	 1000000	      1911 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	   50000	     56034 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	        11.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	        12.1 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	    5000	    336823 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	   50000	     54709 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	       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	      2634 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	   50000	     31049 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	     35167 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	     68974 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	     74760 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	     68670 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	     81357 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	     68388 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	     82108 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	    582934 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	    241602 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	    243612 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.14 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	      9848 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	     17569 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	        37.6 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	     19345 ns/op
BenchmarkLength	2000000000	         0.80 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	       688 ns/op
BenchmarkIs	   50000	     35061 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	   50000	     32789 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	      2816 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	     68272 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	     68107 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	    709386 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	        12.4 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	   50000	     56342 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	   10000	    131878 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
BenchmarkFindSelection	    5000	    374240 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	    374447 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	  200000	      9721 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	  200000	     12909 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	 1000000	      1869 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
BenchmarkChildrenFiltered	  500000	      5941 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	     46223 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	     51452 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	     93967 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	     97617 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	   10000	    138898 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
BenchmarkParentsUntilSelection	   10000	    247817 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	    246055 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	   50000	     33201 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	   50000	     31486 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	   50000	     31754 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	   20000	     94749 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	   10000	    103926 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
BenchmarkNext	   50000	     33782 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	   50000	     37108 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	     64769 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	     71050 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	   50000	     33908 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	   50000	     37353 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	   50000	     31056 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	   50000	     34286 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	   10000	    202553 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
BenchmarkNextUntilSelection	   20000	     98693 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	   50000	     45532 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	    5000	    454378 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	   10000	    123594 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
BenchmarkPrevUntilNodes	   50000	     37509 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	   10000	    109317 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
BenchmarkNextFilteredUntilSelection	   10000	    105959 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
BenchmarkNextFilteredUntilNodes	   10000	    107132 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
BenchmarkPrevFilteredUntil	   10000	    114474 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
BenchmarkPrevFilteredUntilSelection	   10000	    107592 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
BenchmarkPrevFilteredUntilNodes	   10000	    107495 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
ok  	github.com/PuerkitoBio/goquery	187.652s


================================================
FILE: bench/v0.2.0
================================================
PASS
BenchmarkFirst	20000000	        94.3 ns/op
BenchmarkLast	20000000	        94.7 ns/op
BenchmarkEq	20000000	        93.7 ns/op
BenchmarkSlice	20000000	        89.9 ns/op
BenchmarkGet	1000000000	         2.72 ns/op
BenchmarkIndex	 1000000	      1834 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	   50000	     53958 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.1 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	        10.9 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	    5000	    326712 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	   50000	     51776 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	       196 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	       191 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	      2495 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	   50000	     30974 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	     35322 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	     65644 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	     69245 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	     64824 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	     76247 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	     66154 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	     76336 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	    569495 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	    227059 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	    227167 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	         3.99 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	      9354 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	     16557 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	        36.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	     18473 ns/op
BenchmarkLength	2000000000	         0.76 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	       666 ns/op
BenchmarkIs	   50000	     35174 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	   50000	     31814 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	      2754 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	     66260 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	     64682 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	    672953 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.3 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	   50000	     53780 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	   10000	    125963 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
BenchmarkFindSelection	    5000	    357318 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	    357587 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	  200000	      9135 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	  200000	     12383 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	 1000000	      1809 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
BenchmarkChildrenFiltered	  500000	      5814 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	     44810 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	     48795 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	     89102 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	     93953 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	   10000	    130783 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
BenchmarkParentsUntilSelection	   10000	    231797 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	    233761 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	   50000	     31360 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	   50000	     30272 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	   50000	     30327 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	   20000	     89862 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	   20000	     97948 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	   50000	     31975 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	   50000	     34887 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	     60734 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	     67428 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	   50000	     32399 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	   50000	     34944 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	     29360 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	   50000	     32291 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	   10000	    191890 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
BenchmarkNextUntilSelection	   20000	     92054 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	   50000	     43401 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	    5000	    433383 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	   10000	    116423 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
BenchmarkPrevUntilNodes	   50000	     35338 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	   10000	    104686 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
BenchmarkNextFilteredUntilSelection	   20000	     99485 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	   20000	     99452 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	   10000	    112640 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
BenchmarkPrevFilteredUntilSelection	   10000	    103702 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
BenchmarkPrevFilteredUntilNodes	   10000	    103277 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
BenchmarkClosest	  500000	      6530 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	 1000000	      1135 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
BenchmarkClosestNodes	 1000000	      1133 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
ok  	github.com/PuerkitoBio/goquery	192.541s


================================================
FILE: bench/v0.2.1-go1.1rc1
================================================
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


================================================
FILE: bench/v0.3.0
================================================
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


================================================
FILE: bench/v0.3.2-go1.2
================================================
PASS
BenchmarkFirst	20000000	        88.4 ns/op
BenchmarkLast	20000000	        88.2 ns/op
BenchmarkEq	20000000	        87.4 ns/op
BenchmarkSlice	20000000	        84.9 ns/op
BenchmarkGet	2000000000	         1.99 ns/op
BenchmarkIndex	 2000000	       906 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
	bench_array_test.go:73: Index=3
BenchmarkIndexSelector	  100000	     22276 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	200000000	         9.72 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
	bench_array_test.go:99: IndexOfNode=2
BenchmarkIndexOfSelection	100000000	        10.4 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	    199277 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	     18277 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	       200 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	       189 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	      2569 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	     25195 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	     29003 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	     60690 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	     66008 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	     59723 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	   50000	     72698 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	     59598 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	   50000	     72526 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	    367076 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	    219710 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	    219105 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.58 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	      8615 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	  200000	     14271 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	      1497 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.9 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	  200000	     13729 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	       537 ns/op
BenchmarkIs	  100000	     28904 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	     23556 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	      2195 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	     60100 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	     59962 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	    388679 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	     22779 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	     62033 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	    446918 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	    441753 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	 1000000	      2807 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	      4477 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	       548 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	      3304 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	     38248 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	     40677 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	     83043 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	     85391 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	     65118 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	    144028 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	    146713 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	     15113 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	     18881 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	     18926 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	     63221 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	     69028 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	      9133 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	     10601 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	     43089 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	     47867 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	      9104 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	     10579 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	     15185 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	     17108 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	     81087 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	     55831 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	     23130 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	    204673 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	   50000	     70965 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	     18591 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	     42004 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	     61953 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	     62124 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	     42861 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	     62451 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	     62631 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	      4684 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	       622 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	       617 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	218.724s


================================================
FILE: bench/v0.3.2-go1.2-take2
================================================
PASS
BenchmarkFirst	20000000	        88.3 ns/op
BenchmarkLast	20000000	        88.9 ns/op
BenchmarkEq	20000000	        86.7 ns/op
BenchmarkSlice	20000000	        84.1 ns/op
BenchmarkGet	2000000000	         1.99 ns/op
BenchmarkIndex	 2000000	       907 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
	bench_array_test.go:73: Index=3
BenchmarkIndexSelector	  200000	     13052 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.5 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.6 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	    189556 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	  200000	     13714 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	       200 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	       186 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	      2532 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	     25199 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	     29162 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	     60733 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	     66124 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	     59489 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	   50000	     73623 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	     60053 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	   50000	     73477 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	    364859 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	    226980 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	    220471 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.64 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	      8811 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	     15365 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	      1559 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	        31.7 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	  200000	     13901 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	       541 ns/op
BenchmarkIs	  100000	     29435 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	     22938 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	      2185 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	     60607 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	     61599 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	    395436 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	  200000	     13788 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	     54253 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	    438879 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	    437225 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	 1000000	      2844 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	      4528 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	       552 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	      3345 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	     39482 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	     42113 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	     84136 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	     86041 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	     65844 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	    146903 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	    146638 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	     16413 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	     20366 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	     18800 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	     63443 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	     69250 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	      9193 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	     10767 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	     42829 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	     48174 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	      9114 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	     11114 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	     16387 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	     18322 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	     83828 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	     58822 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	     23173 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	    219407 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	     76033 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	     19417 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	     44648 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	     62751 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	     62035 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	     43331 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	     64767 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	     67808 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	      4870 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	       656 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	       663 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	218.007s


================================================
FILE: bench/v0.3.2-go1.2rc1
================================================
PASS
BenchmarkFirst	20000000	        91.0 ns/op
BenchmarkLast	20000000	        90.5 ns/op
BenchmarkEq	20000000	        90.2 ns/op
BenchmarkSlice	20000000	        88.0 ns/op
BenchmarkGet	1000000000	         2.04 ns/op
BenchmarkIndex	 2000000	       935 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
	bench_array_test.go:73: Index=3
BenchmarkIndexSelector	  100000	     23613 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.2 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.0 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	    213843 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	     18671 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	       204 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	       195 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	      2611 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	     27571 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	     32006 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	     61388 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	     66702 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	     59699 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	   50000	     73248 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	     59242 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	   50000	     73211 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	    395087 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	    215849 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	    215612 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.59 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	      8588 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	  200000	     14444 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	      1490 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.9 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	  200000	     14017 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	       577 ns/op
BenchmarkIs	   50000	     31936 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	     23372 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	      2170 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	     59814 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	     59629 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	    384894 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.4 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	     23545 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	     63775 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	    441958 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	    437717 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	 1000000	      2799 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	      4489 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	       546 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	      3472 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	     39067 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	     41450 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	     84864 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	     87823 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	     65986 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	    149798 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	    148144 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	     15579 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	     19094 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	     19037 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	     63891 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	     70424 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	      9350 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	     10929 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	     43398 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	     48519 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	      9181 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	     10811 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	     15589 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	     17341 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	     80663 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	     56496 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	     23729 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	    208267 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	   50000	     72119 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	     18549 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	     42339 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	     61916 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	     62139 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	     43409 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	     63768 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	     63543 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	      5110 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	       629 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	       627 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	215.785s


================================================
FILE: bench/v1.0.0-go1.7
================================================
BenchmarkFirst-4                           	30000000	        50.7 ns/op	      48 B/op	       1 allocs/op
BenchmarkLast-4                            	30000000	        50.9 ns/op	      48 B/op	       1 allocs/op
BenchmarkEq-4                              	30000000	        55.7 ns/op	      48 B/op	       1 allocs/op
BenchmarkSlice-4                           	500000000	         3.45 ns/op	       0 B/op	       0 allocs/op
BenchmarkGet-4                             	2000000000	         1.68 ns/op	       0 B/op	       0 allocs/op
BenchmarkIndex-4                           	 3000000	       541 ns/op	     248 B/op	      10 allocs/op
BenchmarkIndexSelector-4                   	  200000	     10749 ns/op	    2464 B/op	      17 allocs/op
BenchmarkIndexOfNode-4                     	200000000	         6.47 ns/op	       0 B/op	       0 allocs/op
BenchmarkIndexOfSelection-4                	200000000	         7.27 ns/op	       0 B/op	       0 allocs/op
BenchmarkMetalReviewExample-4              	   10000	    138426 ns/op	   12240 B/op	     319 allocs/op
BenchmarkAdd-4                             	  200000	     10192 ns/op	     208 B/op	       9 allocs/op
BenchmarkAddSelection-4                    	10000000	       158 ns/op	      48 B/op	       1 allocs/op
BenchmarkAddNodes-4                        	10000000	       156 ns/op	      48 B/op	       1 allocs/op
BenchmarkAndSelf-4                         	 1000000	      1588 ns/op	    1008 B/op	       5 allocs/op
BenchmarkFilter-4                          	  100000	     20427 ns/op	     360 B/op	       8 allocs/op
BenchmarkNot-4                             	  100000	     23508 ns/op	     136 B/op	       5 allocs/op
BenchmarkFilterFunction-4                  	   50000	     34178 ns/op	   22976 B/op	     755 allocs/op
BenchmarkNotFunction-4                     	   50000	     38173 ns/op	   29120 B/op	     757 allocs/op
BenchmarkFilterNodes-4                     	   50000	     34001 ns/op	   20960 B/op	     749 allocs/op
BenchmarkNotNodes-4                        	   30000	     40344 ns/op	   29120 B/op	     757 allocs/op
BenchmarkFilterSelection-4                 	   50000	     33308 ns/op	   20960 B/op	     749 allocs/op
BenchmarkNotSelection-4                    	   30000	     40748 ns/op	   29120 B/op	     757 allocs/op
BenchmarkHas-4                             	    5000	    263346 ns/op	    1816 B/op	      48 allocs/op
BenchmarkHasNodes-4                        	   10000	    160840 ns/op	   21184 B/op	     752 allocs/op
BenchmarkHasSelection-4                    	   10000	    165410 ns/op	   21184 B/op	     752 allocs/op
BenchmarkEnd-4                             	2000000000	         1.01 ns/op	       0 B/op	       0 allocs/op
BenchmarkEach-4                            	  300000	      4664 ns/op	    3304 B/op	     118 allocs/op
BenchmarkMap-4                             	  200000	      8286 ns/op	    5572 B/op	     184 allocs/op
BenchmarkEachWithBreak-4                   	 2000000	       806 ns/op	     560 B/op	      20 allocs/op
BenchmarkAttr-4                            	100000000	        21.6 ns/op	       0 B/op	       0 allocs/op
BenchmarkText-4                            	  200000	      8909 ns/op	    7536 B/op	     110 allocs/op
BenchmarkLength-4                          	2000000000	         0.34 ns/op	       0 B/op	       0 allocs/op
BenchmarkHtml-4                            	 3000000	       422 ns/op	     120 B/op	       2 allocs/op
BenchmarkIs-4                              	  100000	     22615 ns/op	      88 B/op	       4 allocs/op
BenchmarkIsPositional-4                    	   50000	     26655 ns/op	    1112 B/op	      10 allocs/op
BenchmarkIsFunction-4                      	 1000000	      1208 ns/op	     784 B/op	      28 allocs/op
BenchmarkIsSelection-4                     	   50000	     33497 ns/op	   20960 B/op	     749 allocs/op
BenchmarkIsNodes-4                         	   50000	     33572 ns/op	   20960 B/op	     749 allocs/op
BenchmarkHasClass-4                        	   10000	    232802 ns/op	   14944 B/op	     976 allocs/op
BenchmarkContains-4                        	200000000	         7.33 ns/op	       0 B/op	       0 allocs/op
BenchmarkFind-4                            	  200000	     10715 ns/op	    2464 B/op	      17 allocs/op
BenchmarkFindWithinSelection-4             	   50000	     35878 ns/op	    2176 B/op	      78 allocs/op
BenchmarkFindSelection-4                   	   10000	    194356 ns/op	    2672 B/op	      82 allocs/op
BenchmarkFindNodes-4                       	   10000	    195510 ns/op	    2672 B/op	      82 allocs/op
BenchmarkContents-4                        	 1000000	      2252 ns/op	     864 B/op	      34 allocs/op
BenchmarkContentsFiltered-4                	  500000	      3015 ns/op	    1016 B/op	      39 allocs/op
BenchmarkChildren-4                        	 5000000	       364 ns/op	     152 B/op	       7 allocs/op
BenchmarkChildrenFiltered-4                	 1000000	      2212 ns/op	     352 B/op	      15 allocs/op
BenchmarkParent-4                          	   50000	     24643 ns/op	    4048 B/op	     381 allocs/op
BenchmarkParentFiltered-4                  	   50000	     25967 ns/op	    4248 B/op	     388 allocs/op
BenchmarkParents-4                         	   30000	     50000 ns/op	   27776 B/op	     830 allocs/op
BenchmarkParentsFiltered-4                 	   30000	     53107 ns/op	   28360 B/op	     838 allocs/op
BenchmarkParentsUntil-4                    	  100000	     22423 ns/op	   10352 B/op	     353 allocs/op
BenchmarkParentsUntilSelection-4           	   20000	     86925 ns/op	   51144 B/op	    1516 allocs/op
BenchmarkParentsUntilNodes-4               	   20000	     87597 ns/op	   51144 B/op	    1516 allocs/op
BenchmarkParentsFilteredUntil-4            	  300000	      5568 ns/op	    2232 B/op	      86 allocs/op
BenchmarkParentsFilteredUntilSelection-4   	  200000	     10966 ns/op	    5440 B/op	     190 allocs/op
BenchmarkParentsFilteredUntilNodes-4       	  200000	     10919 ns/op	    5440 B/op	     190 allocs/op
BenchmarkSiblings-4                        	   30000	     46018 ns/op	   15400 B/op	     204 allocs/op
BenchmarkSiblingsFiltered-4                	   30000	     50566 ns/op	   16496 B/op	     213 allocs/op
BenchmarkNext-4                            	  200000	      7921 ns/op	    3216 B/op	     112 allocs/op
BenchmarkNextFiltered-4                    	  200000	      8804 ns/op	    3416 B/op	     118 allocs/op
BenchmarkNextAll-4                         	   50000	     31098 ns/op	    9912 B/op	     138 allocs/op
BenchmarkNextAllFiltered-4                 	   50000	     34677 ns/op	   11008 B/op	     147 allocs/op
BenchmarkPrev-4                            	  200000	      7920 ns/op	    3216 B/op	     112 allocs/op
BenchmarkPrevFiltered-4                    	  200000	      8913 ns/op	    3416 B/op	     118 allocs/op
BenchmarkPrevAll-4                         	  200000	     10845 ns/op	    4376 B/op	     113 allocs/op
BenchmarkPrevAllFiltered-4                 	  100000	     12030 ns/op	    4576 B/op	     119 allocs/op
BenchmarkNextUntil-4                       	  100000	     19193 ns/op	    5760 B/op	     260 allocs/op
BenchmarkNextUntilSelection-4              	   50000	     34829 ns/op	   18480 B/op	     542 allocs/op
BenchmarkNextUntilNodes-4                  	  100000	     14459 ns/op	    7944 B/op	     248 allocs/op
BenchmarkPrevUntil-4                       	   20000	     66296 ns/op	   12856 B/op	     448 allocs/op
BenchmarkPrevUntilSelection-4              	   30000	     45037 ns/op	   23432 B/op	     689 allocs/op
BenchmarkPrevUntilNodes-4                  	  200000	     11525 ns/op	    6152 B/op	     203 allocs/op
BenchmarkNextFilteredUntil-4               	  100000	     12940 ns/op	    4512 B/op	     173 allocs/op
BenchmarkNextFilteredUntilSelection-4      	   50000	     38924 ns/op	   19160 B/op	     567 allocs/op
BenchmarkNextFilteredUntilNodes-4          	   50000	     38528 ns/op	   19160 B/op	     567 allocs/op
BenchmarkPrevFilteredUntil-4               	  100000	     12980 ns/op	    4664 B/op	     175 allocs/op
BenchmarkPrevFilteredUntilSelection-4      	   50000	     39671 ns/op	   19936 B/op	     587 allocs/op
BenchmarkPrevFilteredUntilNodes-4          	   50000	     39484 ns/op	   19936 B/op	     587 allocs/op
BenchmarkClosest-4                         	  500000	      3310 ns/op	     160 B/op	       8 allocs/op
BenchmarkClosestSelection-4                	 5000000	       361 ns/op	      96 B/op	       6 allocs/op
BenchmarkClosestNodes-4                    	 5000000	       359 ns/op	      96 B/op	       6 allocs/op
PASS
ok  	github.com/PuerkitoBio/goquery	163.718s


================================================
FILE: bench/v1.0.1a-go1.7
================================================
BenchmarkFirst-4                           	30000000	        50.9 ns/op	      48 B/op	       1 allocs/op
BenchmarkLast-4                            	30000000	        50.0 ns/op	      48 B/op	       1 allocs/op
BenchmarkEq-4                              	30000000	        50.5 ns/op	      48 B/op	       1 allocs/op
BenchmarkSlice-4                           	500000000	         3.53 ns/op	       0 B/op	       0 allocs/op
BenchmarkGet-4                             	2000000000	         1.66 ns/op	       0 B/op	       0 allocs/op
BenchmarkIndex-4                           	 2000000	       832 ns/op	     248 B/op	      10 allocs/op
BenchmarkIndexSelector-4                   	  100000	     16073 ns/op	    3839 B/op	      21 allocs/op
BenchmarkIndexOfNode-4                     	200000000	         6.38 ns/op	       0 B/op	       0 allocs/op
BenchmarkIndexOfSelection-4                	200000000	         7.14 ns/op	       0 B/op	       0 allocs/op
BenchmarkMetalReviewExample-4              	   10000	    140737 ns/op	   12418 B/op	     320 allocs/op
BenchmarkAdd-4                             	  100000	     13162 ns/op	     974 B/op	      10 allocs/op
BenchmarkAddSelection-4                    	  500000	      3160 ns/op	     814 B/op	       2 allocs/op
BenchmarkAddNodes-4                        	  500000	      3159 ns/op	     814 B/op	       2 allocs/op
BenchmarkAndSelf-4                         	  200000	      7423 ns/op	    2404 B/op	       9 allocs/op
BenchmarkFilter-4                          	  100000	     19671 ns/op	     360 B/op	       8 allocs/op
BenchmarkNot-4                             	  100000	     22577 ns/op	     136 B/op	       5 allocs/op
BenchmarkFilterFunction-4                  	   50000	     33960 ns/op	   22976 B/op	     755 allocs/op
BenchmarkNotFunction-4                     	   50000	     37909 ns/op	   29120 B/op	     757 allocs/op
BenchmarkFilterNodes-4                     	   50000	     34196 ns/op	   
Download .txt
gitextract_cl6vi3ng/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── test.yml
├── .gitignore
├── LICENSE
├── README.md
├── array.go
├── array_test.go
├── bench/
│   ├── v0.1.0
│   ├── v0.1.1
│   ├── v0.2.0
│   ├── v0.2.1-go1.1rc1
│   ├── v0.3.0
│   ├── v0.3.2-go1.2
│   ├── v0.3.2-go1.2-take2
│   ├── v0.3.2-go1.2rc1
│   ├── v1.0.0-go1.7
│   ├── v1.0.1a-go1.7
│   ├── v1.0.1b-go1.7
│   └── v1.0.1c-go1.7
├── bench_array_test.go
├── bench_example_test.go
├── bench_expand_test.go
├── bench_filter_test.go
├── bench_iteration_test.go
├── bench_property_test.go
├── bench_query_test.go
├── bench_traversal_test.go
├── doc/
│   └── tips.md
├── doc.go
├── example_test.go
├── expand.go
├── expand_test.go
├── filter.go
├── filter_test.go
├── go.mod
├── go.sum
├── iteration.go
├── iteration_test.go
├── manipulation.go
├── manipulation_test.go
├── misc/
│   └── git/
│       └── pre-commit
├── property.go
├── property_test.go
├── query.go
├── query_test.go
├── testdata/
│   ├── gotesting.html
│   ├── gowiki.html
│   ├── metalreview.html
│   ├── page.html
│   ├── page2.html
│   └── page3.html
├── traversal.go
├── traversal_test.go
├── type.go
├── type_test.go
├── utilities.go
└── utilities_test.go
Download .txt
SYMBOL INDEX (668 symbols across 29 files)

FILE: array.go
  constant maxUint (line 8) | maxUint = ^uint(0)
  constant maxInt (line 9) | maxInt  = int(maxUint >> 1)
  constant ToEnd (line 14) | ToEnd = maxInt
  method First (line 20) | func (s *Selection) First() *Selection {
  method Last (line 27) | func (s *Selection) Last() *Selection {
  method Eq (line 35) | func (s *Selection) Eq(index int) *Selection {
  method Slice (line 58) | func (s *Selection) Slice(start, end int) *Selection {
  method Get (line 73) | func (s *Selection) Get(index int) *html.Node {
  method Index (line 82) | func (s *Selection) Index() int {
  method IndexSelector (line 92) | func (s *Selection) IndexSelector(selector string) int {
  method IndexMatcher (line 103) | func (s *Selection) IndexMatcher(m Matcher) int {
  method IndexOfNode (line 113) | func (s *Selection) IndexOfNode(node *html.Node) int {
  method IndexOfSelection (line 119) | func (s *Selection) IndexOfSelection(sel *Selection) int {

FILE: array_test.go
  function TestFirst (line 7) | func TestFirst(t *testing.T) {
  function TestFirstEmpty (line 12) | func TestFirstEmpty(t *testing.T) {
  function TestFirstInvalid (line 17) | func TestFirstInvalid(t *testing.T) {
  function TestFirstRollback (line 22) | func TestFirstRollback(t *testing.T) {
  function TestLast (line 28) | func TestLast(t *testing.T) {
  function TestLastEmpty (line 39) | func TestLastEmpty(t *testing.T) {
  function TestLastInvalid (line 44) | func TestLastInvalid(t *testing.T) {
  function TestLastRollback (line 49) | func TestLastRollback(t *testing.T) {
  function TestEq (line 55) | func TestEq(t *testing.T) {
  function TestEqNegative (line 60) | func TestEqNegative(t *testing.T) {
  function TestEqEmpty (line 71) | func TestEqEmpty(t *testing.T) {
  function TestEqInvalid (line 76) | func TestEqInvalid(t *testing.T) {
  function TestEqInvalidPositive (line 81) | func TestEqInvalidPositive(t *testing.T) {
  function TestEqInvalidNegative (line 86) | func TestEqInvalidNegative(t *testing.T) {
  function TestEqRollback (line 91) | func TestEqRollback(t *testing.T) {
  function TestSlice (line 97) | func TestSlice(t *testing.T) {
  function TestSliceToEnd (line 104) | func TestSliceToEnd(t *testing.T) {
  function TestSliceEmpty (line 114) | func TestSliceEmpty(t *testing.T) {
  function TestSliceInvalid (line 119) | func TestSliceInvalid(t *testing.T) {
  function TestSliceInvalidToEnd (line 124) | func TestSliceInvalidToEnd(t *testing.T) {
  function TestSliceOutOfBounds (line 129) | func TestSliceOutOfBounds(t *testing.T) {
  function TestNegativeSliceStart (line 134) | func TestNegativeSliceStart(t *testing.T) {
  function TestNegativeSliceEnd (line 140) | func TestNegativeSliceEnd(t *testing.T) {
  function TestNegativeSliceBoth (line 147) | func TestNegativeSliceBoth(t *testing.T) {
  function TestNegativeSliceToEnd (line 154) | func TestNegativeSliceToEnd(t *testing.T) {
  function TestNegativeSliceOutOfBounds (line 160) | func TestNegativeSliceOutOfBounds(t *testing.T) {
  function TestSliceRollback (line 165) | func TestSliceRollback(t *testing.T) {
  function TestGet (line 171) | func TestGet(t *testing.T) {
  function TestGetNegative (line 179) | func TestGetNegative(t *testing.T) {
  function TestGetInvalid (line 187) | func TestGetInvalid(t *testing.T) {
  function TestIndex (line 193) | func TestIndex(t *testing.T) {
  function TestIndexSelector (line 200) | func TestIndexSelector(t *testing.T) {
  function TestIndexSelectorInvalid (line 207) | func TestIndexSelectorInvalid(t *testing.T) {
  function TestIndexOfNode (line 214) | func TestIndexOfNode(t *testing.T) {
  function TestIndexOfNilNode (line 221) | func TestIndexOfNilNode(t *testing.T) {
  function TestIndexOfSelection (line 228) | func TestIndexOfSelection(t *testing.T) {

FILE: bench_array_test.go
  function BenchmarkFirst (line 7) | func BenchmarkFirst(b *testing.B) {
  function BenchmarkLast (line 16) | func BenchmarkLast(b *testing.B) {
  function BenchmarkEq (line 25) | func BenchmarkEq(b *testing.B) {
  function BenchmarkSlice (line 38) | func BenchmarkSlice(b *testing.B) {
  function BenchmarkGet (line 51) | func BenchmarkGet(b *testing.B) {
  function BenchmarkIndex (line 64) | func BenchmarkIndex(b *testing.B) {
  function BenchmarkIndexSelector (line 78) | func BenchmarkIndexSelector(b *testing.B) {
  function BenchmarkIndexOfNode (line 92) | func BenchmarkIndexOfNode(b *testing.B) {
  function BenchmarkIndexOfSelection (line 108) | func BenchmarkIndexOfSelection(b *testing.B) {

FILE: bench_example_test.go
  function BenchmarkMetalReviewExample (line 10) | func BenchmarkMetalReviewExample(b *testing.B) {

FILE: bench_expand_test.go
  function BenchmarkAdd (line 7) | func BenchmarkAdd(b *testing.B) {
  function BenchmarkAddSelection (line 25) | func BenchmarkAddSelection(b *testing.B) {
  function BenchmarkAddNodes (line 44) | func BenchmarkAddNodes(b *testing.B) {
  function BenchmarkAddNodesBig (line 64) | func BenchmarkAddNodesBig(b *testing.B) {
  function BenchmarkAndSelf (line 88) | func BenchmarkAndSelf(b *testing.B) {

FILE: bench_filter_test.go
  function BenchmarkFilter (line 7) | func BenchmarkFilter(b *testing.B) {
  function BenchmarkNot (line 25) | func BenchmarkNot(b *testing.B) {
  function BenchmarkFilterFunction (line 43) | func BenchmarkFilterFunction(b *testing.B) {
  function BenchmarkNotFunction (line 64) | func BenchmarkNotFunction(b *testing.B) {
  function BenchmarkFilterNodes (line 85) | func BenchmarkFilterNodes(b *testing.B) {
  function BenchmarkNotNodes (line 105) | func BenchmarkNotNodes(b *testing.B) {
  function BenchmarkFilterSelection (line 125) | func BenchmarkFilterSelection(b *testing.B) {
  function BenchmarkNotSelection (line 144) | func BenchmarkNotSelection(b *testing.B) {
  function BenchmarkHas (line 163) | func BenchmarkHas(b *testing.B) {
  function BenchmarkHasNodes (line 181) | func BenchmarkHasNodes(b *testing.B) {
  function BenchmarkHasSelection (line 201) | func BenchmarkHasSelection(b *testing.B) {
  function BenchmarkEnd (line 220) | func BenchmarkEnd(b *testing.B) {

FILE: bench_iteration_test.go
  function BenchmarkEach (line 8) | func BenchmarkEach(b *testing.B) {
  function BenchmarkEachIter (line 28) | func BenchmarkEachIter(b *testing.B) {
  function BenchmarkEachIterWithBreak (line 47) | func BenchmarkEachIterWithBreak(b *testing.B) {
  function BenchmarkMap (line 70) | func BenchmarkMap(b *testing.B) {
  function BenchmarkEachWithBreak (line 91) | func BenchmarkEachWithBreak(b *testing.B) {

FILE: bench_property_test.go
  function BenchmarkAttr (line 7) | func BenchmarkAttr(b *testing.B) {
  function BenchmarkText (line 21) | func BenchmarkText(b *testing.B) {
  function BenchmarkLength (line 30) | func BenchmarkLength(b *testing.B) {
  function BenchmarkHtml (line 44) | func BenchmarkHtml(b *testing.B) {

FILE: bench_query_test.go
  function BenchmarkIs (line 7) | func BenchmarkIs(b *testing.B) {
  function BenchmarkIsPositional (line 21) | func BenchmarkIsPositional(b *testing.B) {
  function BenchmarkIsFunction (line 35) | func BenchmarkIsFunction(b *testing.B) {
  function BenchmarkIsSelection (line 52) | func BenchmarkIsSelection(b *testing.B) {
  function BenchmarkIsNodes (line 67) | func BenchmarkIsNodes(b *testing.B) {
  function BenchmarkHasClass (line 83) | func BenchmarkHasClass(b *testing.B) {
  function BenchmarkContains (line 97) | func BenchmarkContains(b *testing.B) {

FILE: bench_traversal_test.go
  function BenchmarkFind (line 9) | func BenchmarkFind(b *testing.B) {
  function BenchmarkFindWithinSelection (line 25) | func BenchmarkFindWithinSelection(b *testing.B) {
  function BenchmarkFindSelection (line 43) | func BenchmarkFindSelection(b *testing.B) {
  function BenchmarkFindNodes (line 62) | func BenchmarkFindNodes(b *testing.B) {
  function BenchmarkContents (line 82) | func BenchmarkContents(b *testing.B) {
  function BenchmarkContentsFiltered (line 100) | func BenchmarkContentsFiltered(b *testing.B) {
  function BenchmarkChildren (line 118) | func BenchmarkChildren(b *testing.B) {
  function BenchmarkChildrenFiltered (line 136) | func BenchmarkChildrenFiltered(b *testing.B) {
  function BenchmarkParent (line 154) | func BenchmarkParent(b *testing.B) {
  function BenchmarkParentFiltered (line 172) | func BenchmarkParentFiltered(b *testing.B) {
  function BenchmarkParents (line 190) | func BenchmarkParents(b *testing.B) {
  function BenchmarkParentsFiltered (line 208) | func BenchmarkParentsFiltered(b *testing.B) {
  function BenchmarkParentsUntil (line 226) | func BenchmarkParentsUntil(b *testing.B) {
  function BenchmarkParentsUntilSelection (line 244) | func BenchmarkParentsUntilSelection(b *testing.B) {
  function BenchmarkParentsUntilNodes (line 263) | func BenchmarkParentsUntilNodes(b *testing.B) {
  function BenchmarkParentsFilteredUntil (line 283) | func BenchmarkParentsFilteredUntil(b *testing.B) {
  function BenchmarkParentsFilteredUntilSelection (line 301) | func BenchmarkParentsFilteredUntilSelection(b *testing.B) {
  function BenchmarkParentsFilteredUntilNodes (line 320) | func BenchmarkParentsFilteredUntilNodes(b *testing.B) {
  function BenchmarkSiblings (line 340) | func BenchmarkSiblings(b *testing.B) {
  function BenchmarkSiblingsFiltered (line 358) | func BenchmarkSiblingsFiltered(b *testing.B) {
  function BenchmarkNext (line 376) | func BenchmarkNext(b *testing.B) {
  function BenchmarkNextFiltered (line 394) | func BenchmarkNextFiltered(b *testing.B) {
  function BenchmarkNextAll (line 412) | func BenchmarkNextAll(b *testing.B) {
  function BenchmarkNextAllFiltered (line 430) | func BenchmarkNextAllFiltered(b *testing.B) {
  function BenchmarkPrev (line 448) | func BenchmarkPrev(b *testing.B) {
  function BenchmarkPrevFiltered (line 466) | func BenchmarkPrevFiltered(b *testing.B) {
  function BenchmarkPrevAll (line 486) | func BenchmarkPrevAll(b *testing.B) {
  function BenchmarkPrevAllFiltered (line 504) | func BenchmarkPrevAllFiltered(b *testing.B) {
  function BenchmarkNextUntil (line 522) | func BenchmarkNextUntil(b *testing.B) {
  function BenchmarkNextUntilSelection (line 540) | func BenchmarkNextUntilSelection(b *testing.B) {
  function BenchmarkNextUntilNodes (line 559) | func BenchmarkNextUntilNodes(b *testing.B) {
  function BenchmarkPrevUntil (line 579) | func BenchmarkPrevUntil(b *testing.B) {
  function BenchmarkPrevUntilSelection (line 597) | func BenchmarkPrevUntilSelection(b *testing.B) {
  function BenchmarkPrevUntilNodes (line 616) | func BenchmarkPrevUntilNodes(b *testing.B) {
  function BenchmarkNextFilteredUntil (line 636) | func BenchmarkNextFilteredUntil(b *testing.B) {
  function BenchmarkNextFilteredUntilSelection (line 654) | func BenchmarkNextFilteredUntilSelection(b *testing.B) {
  function BenchmarkNextFilteredUntilNodes (line 673) | func BenchmarkNextFilteredUntilNodes(b *testing.B) {
  function BenchmarkPrevFilteredUntil (line 693) | func BenchmarkPrevFilteredUntil(b *testing.B) {
  function BenchmarkPrevFilteredUntilSelection (line 711) | func BenchmarkPrevFilteredUntilSelection(b *testing.B) {
  function BenchmarkPrevFilteredUntilNodes (line 730) | func BenchmarkPrevFilteredUntilNodes(b *testing.B) {
  function BenchmarkClosest (line 750) | func BenchmarkClosest(b *testing.B) {
  function BenchmarkClosestSelection (line 768) | func BenchmarkClosestSelection(b *testing.B) {
  function BenchmarkClosestNodes (line 787) | func BenchmarkClosestNodes(b *testing.B) {
  function BenchmarkSingleMatcher (line 806) | func BenchmarkSingleMatcher(b *testing.B) {

FILE: example_test.go
  function Example (line 14) | func Example() {
  function ExampleNewDocumentFromReader_file (line 46) | func ExampleNewDocumentFromReader_file() {
  function ExampleNewDocumentFromReader_string (line 62) | func ExampleNewDocumentFromReader_string() {
  function ExampleSingle (line 84) | func ExampleSingle() {

FILE: expand.go
  method Add (line 9) | func (s *Selection) Add(selector string) *Selection {
  method AddMatcher (line 17) | func (s *Selection) AddMatcher(m Matcher) *Selection {
  method AddSelection (line 23) | func (s *Selection) AddSelection(sel *Selection) *Selection {
  method Union (line 31) | func (s *Selection) Union(sel *Selection) *Selection {
  method AddNodes (line 37) | func (s *Selection) AddNodes(nodes ...*html.Node) *Selection {
  method AndSelf (line 45) | func (s *Selection) AndSelf() *Selection {
  method AddBack (line 52) | func (s *Selection) AddBack() *Selection {
  method AddBackFiltered (line 60) | func (s *Selection) AddBackFiltered(selector string) *Selection {
  method AddBackMatcher (line 68) | func (s *Selection) AddBackMatcher(m Matcher) *Selection {

FILE: expand_test.go
  function TestAdd (line 7) | func TestAdd(t *testing.T) {
  function TestAddInvalid (line 12) | func TestAddInvalid(t *testing.T) {
  function TestAddRollback (line 22) | func TestAddRollback(t *testing.T) {
  function TestAddSelection (line 28) | func TestAddSelection(t *testing.T) {
  function TestAddSelectionNil (line 35) | func TestAddSelectionNil(t *testing.T) {
  function TestAddSelectionRollback (line 43) | func TestAddSelectionRollback(t *testing.T) {
  function TestAddNodes (line 50) | func TestAddNodes(t *testing.T) {
  function TestAddNodesNone (line 57) | func TestAddNodesNone(t *testing.T) {
  function TestAddNodesRollback (line 62) | func TestAddNodesRollback(t *testing.T) {
  function TestAddNodesBig (line 69) | func TestAddNodesBig(t *testing.T) {
  function TestAndSelf (line 87) | func TestAndSelf(t *testing.T) {
  function TestAndSelfRollback (line 92) | func TestAndSelfRollback(t *testing.T) {
  function TestAddBack (line 98) | func TestAddBack(t *testing.T) {
  function TestAddBackRollback (line 103) | func TestAddBackRollback(t *testing.T) {
  function TestAddBackFiltered (line 109) | func TestAddBackFiltered(t *testing.T) {
  function TestAddBackFilteredRollback (line 114) | func TestAddBackFilteredRollback(t *testing.T) {

FILE: filter.go
  method Filter (line 7) | func (s *Selection) Filter(selector string) *Selection {
  method FilterMatcher (line 14) | func (s *Selection) FilterMatcher(m Matcher) *Selection {
  method Not (line 20) | func (s *Selection) Not(selector string) *Selection {
  method NotMatcher (line 26) | func (s *Selection) NotMatcher(m Matcher) *Selection {
  method FilterFunction (line 32) | func (s *Selection) FilterFunction(f func(int, *Selection) bool) *Select...
  method NotFunction (line 38) | func (s *Selection) NotFunction(f func(int, *Selection) bool) *Selection {
  method FilterNodes (line 44) | func (s *Selection) FilterNodes(nodes ...*html.Node) *Selection {
  method NotNodes (line 50) | func (s *Selection) NotNodes(nodes ...*html.Node) *Selection {
  method FilterSelection (line 57) | func (s *Selection) FilterSelection(sel *Selection) *Selection {
  method NotSelection (line 66) | func (s *Selection) NotSelection(sel *Selection) *Selection {
  method Intersection (line 74) | func (s *Selection) Intersection(sel *Selection) *Selection {
  method Has (line 81) | func (s *Selection) Has(selector string) *Selection {
  method HasMatcher (line 88) | func (s *Selection) HasMatcher(m Matcher) *Selection {
  method HasNodes (line 95) | func (s *Selection) HasNodes(nodes ...*html.Node) *Selection {
  method HasSelection (line 110) | func (s *Selection) HasSelection(sel *Selection) *Selection {
  method End (line 119) | func (s *Selection) End() *Selection {
  function winnow (line 128) | func winnow(sel *Selection, m Matcher, keep bool) []*html.Node {
  function winnowNodes (line 141) | func winnowNodes(sel *Selection, nodes []*html.Node, keep bool) []*html....
  function winnowFunction (line 159) | func winnowFunction(sel *Selection, f func(int, *Selection) bool, keep b...

FILE: filter_test.go
  function TestFilter (line 7) | func TestFilter(t *testing.T) {
  function TestFilterNone (line 12) | func TestFilterNone(t *testing.T) {
  function TestFilterInvalid (line 17) | func TestFilterInvalid(t *testing.T) {
  function TestFilterRollback (line 22) | func TestFilterRollback(t *testing.T) {
  function TestFilterFunction (line 28) | func TestFilterFunction(t *testing.T) {
  function TestFilterFunctionRollback (line 35) | func TestFilterFunctionRollback(t *testing.T) {
  function TestFilterNode (line 43) | func TestFilterNode(t *testing.T) {
  function TestFilterNodeRollback (line 49) | func TestFilterNodeRollback(t *testing.T) {
  function TestFilterSelection (line 55) | func TestFilterSelection(t *testing.T) {
  function TestFilterSelectionRollback (line 62) | func TestFilterSelectionRollback(t *testing.T) {
  function TestFilterSelectionNil (line 69) | func TestFilterSelectionNil(t *testing.T) {
  function TestNot (line 77) | func TestNot(t *testing.T) {
  function TestNotInvalid (line 82) | func TestNotInvalid(t *testing.T) {
  function TestNotRollback (line 87) | func TestNotRollback(t *testing.T) {
  function TestNotNone (line 93) | func TestNotNone(t *testing.T) {
  function TestNotFunction (line 98) | func TestNotFunction(t *testing.T) {
  function TestNotFunctionRollback (line 105) | func TestNotFunctionRollback(t *testing.T) {
  function TestNotNode (line 113) | func TestNotNode(t *testing.T) {
  function TestNotNodeRollback (line 119) | func TestNotNodeRollback(t *testing.T) {
  function TestNotSelection (line 125) | func TestNotSelection(t *testing.T) {
  function TestNotSelectionRollback (line 132) | func TestNotSelectionRollback(t *testing.T) {
  function TestIntersection (line 139) | func TestIntersection(t *testing.T) {
  function TestIntersectionRollback (line 145) | func TestIntersectionRollback(t *testing.T) {
  function TestHas (line 152) | func TestHas(t *testing.T) {
  function TestHasInvalid (line 158) | func TestHasInvalid(t *testing.T) {
  function TestHasRollback (line 163) | func TestHasRollback(t *testing.T) {
  function TestHasNodes (line 169) | func TestHasNodes(t *testing.T) {
  function TestHasNodesRollback (line 177) | func TestHasNodesRollback(t *testing.T) {
  function TestHasSelection (line 184) | func TestHasSelection(t *testing.T) {
  function TestHasSelectionRollback (line 191) | func TestHasSelectionRollback(t *testing.T) {
  function TestEnd (line 198) | func TestEnd(t *testing.T) {
  function TestEndToTop (line 203) | func TestEndToTop(t *testing.T) {

FILE: iteration.go
  method Each (line 10) | func (s *Selection) Each(f func(int, *Selection)) *Selection {
  method EachIter (line 19) | func (s *Selection) EachIter() iter.Seq2[int, *Selection] {
  method EachWithBreak (line 33) | func (s *Selection) EachWithBreak(f func(int, *Selection) bool) *Selecti...
  method Map (line 47) | func (s *Selection) Map(f func(int, *Selection) string) (result []string) {
  function Map (line 53) | func Map[E any](s *Selection, f func(int, *Selection) E) (result []E) {

FILE: iteration_test.go
  function TestEach (line 9) | func TestEach(t *testing.T) {
  function TestEachWithBreak (line 23) | func TestEachWithBreak(t *testing.T) {
  function TestEachEmptySelection (line 38) | func TestEachEmptySelection(t *testing.T) {
  function TestMap (line 52) | func TestMap(t *testing.T) {
  function TestForRange (line 71) | func TestForRange(t *testing.T) {
  function TestGenericMap (line 90) | func TestGenericMap(t *testing.T) {
  function TestEachIter (line 109) | func TestEachIter(t *testing.T) {
  function TestEachIterWithBreak (line 127) | func TestEachIterWithBreak(t *testing.T) {

FILE: manipulation.go
  method After (line 16) | func (s *Selection) After(selector string) *Selection {
  method AfterMatcher (line 27) | func (s *Selection) AfterMatcher(m Matcher) *Selection {
  method AfterSelection (line 35) | func (s *Selection) AfterSelection(sel *Selection) *Selection {
  method AfterHtml (line 42) | func (s *Selection) AfterHtml(htmlStr string) *Selection {
  method AfterNodes (line 56) | func (s *Selection) AfterNodes(ns ...*html.Node) *Selection {
  method Append (line 74) | func (s *Selection) Append(selector string) *Selection {
  method AppendMatcher (line 82) | func (s *Selection) AppendMatcher(m Matcher) *Selection {
  method AppendSelection (line 90) | func (s *Selection) AppendSelection(sel *Selection) *Selection {
  method AppendHtml (line 95) | func (s *Selection) AppendHtml(htmlStr string) *Selection {
  method AppendNodes (line 106) | func (s *Selection) AppendNodes(ns ...*html.Node) *Selection {
  method Before (line 115) | func (s *Selection) Before(selector string) *Selection {
  method BeforeMatcher (line 122) | func (s *Selection) BeforeMatcher(m Matcher) *Selection {
  method BeforeSelection (line 130) | func (s *Selection) BeforeSelection(sel *Selection) *Selection {
  method BeforeHtml (line 137) | func (s *Selection) BeforeHtml(htmlStr string) *Selection {
  method BeforeNodes (line 150) | func (s *Selection) BeforeNodes(ns ...*html.Node) *Selection {
  method Clone (line 160) | func (s *Selection) Clone() *Selection {
  method Empty (line 168) | func (s *Selection) Empty() *Selection {
  method Prepend (line 183) | func (s *Selection) Prepend(selector string) *Selection {
  method PrependMatcher (line 191) | func (s *Selection) PrependMatcher(m Matcher) *Selection {
  method PrependSelection (line 199) | func (s *Selection) PrependSelection(sel *Selection) *Selection {
  method PrependHtml (line 204) | func (s *Selection) PrependHtml(htmlStr string) *Selection {
  method PrependNodes (line 217) | func (s *Selection) PrependNodes(ns ...*html.Node) *Selection {
  method Remove (line 227) | func (s *Selection) Remove() *Selection {
  method RemoveFiltered (line 243) | func (s *Selection) RemoveFiltered(selector string) *Selection {
  method RemoveMatcher (line 250) | func (s *Selection) RemoveMatcher(m Matcher) *Selection {
  method ReplaceWith (line 259) | func (s *Selection) ReplaceWith(selector string) *Selection {
  method ReplaceWithMatcher (line 268) | func (s *Selection) ReplaceWithMatcher(m Matcher) *Selection {
  method ReplaceWithSelection (line 277) | func (s *Selection) ReplaceWithSelection(sel *Selection) *Selection {
  method ReplaceWithHtml (line 286) | func (s *Selection) ReplaceWithHtml(htmlStr string) *Selection {
  method ReplaceWithNodes (line 303) | func (s *Selection) ReplaceWithNodes(ns ...*html.Node) *Selection {
  method SetHtml (line 310) | func (s *Selection) SetHtml(htmlStr string) *Selection {
  method SetText (line 325) | func (s *Selection) SetText(text string) *Selection {
  method Unwrap (line 332) | func (s *Selection) Unwrap() *Selection {
  method Wrap (line 350) | func (s *Selection) Wrap(selector string) *Selection {
  method WrapMatcher (line 359) | func (s *Selection) WrapMatcher(m Matcher) *Selection {
  method WrapSelection (line 368) | func (s *Selection) WrapSelection(sel *Selection) *Selection {
  method WrapHtml (line 376) | func (s *Selection) WrapHtml(htmlStr string) *Selection {
  method WrapNode (line 400) | func (s *Selection) WrapNode(n *html.Node) *Selection {
  method wrapNodes (line 404) | func (s *Selection) wrapNodes(ns ...*html.Node) *Selection {
  method WrapAll (line 417) | func (s *Selection) WrapAll(selector string) *Selection {
  method WrapAllMatcher (line 426) | func (s *Selection) WrapAllMatcher(m Matcher) *Selection {
  method WrapAllSelection (line 435) | func (s *Selection) WrapAllSelection(sel *Selection) *Selection {
  method WrapAllHtml (line 444) | func (s *Selection) WrapAllHtml(htmlStr string) *Selection {
  method wrapAllNodes (line 458) | func (s *Selection) wrapAllNodes(ns ...*html.Node) *Selection {
  method WrapAllNode (line 470) | func (s *Selection) WrapAllNode(n *html.Node) *Selection {
  method WrapInner (line 497) | func (s *Selection) WrapInner(selector string) *Selection {
  method WrapInnerMatcher (line 506) | func (s *Selection) WrapInnerMatcher(m Matcher) *Selection {
  method WrapInnerSelection (line 515) | func (s *Selection) WrapInnerSelection(sel *Selection) *Selection {
  method WrapInnerHtml (line 524) | func (s *Selection) WrapInnerHtml(htmlStr string) *Selection {
  method WrapInnerNode (line 542) | func (s *Selection) WrapInnerNode(n *html.Node) *Selection {
  method wrapInnerNodes (line 546) | func (s *Selection) wrapInnerNodes(ns ...*html.Node) *Selection {
  function parseHtml (line 564) | func parseHtml(h string) []*html.Node {
  function parseHtmlWithContext (line 574) | func parseHtmlWithContext(h string, context *html.Node) []*html.Node {
  function getFirstChildEl (line 585) | func getFirstChildEl(n *html.Node) *html.Node {
  function cloneNodes (line 594) | func cloneNodes(ns []*html.Node) []*html.Node {
  function cloneNode (line 606) | func cloneNode(n *html.Node) *html.Node {
  method manipulateNodes (line 622) | func (s *Selection) manipulateNodes(ns []*html.Node, reverse bool,
  method eachNodeHtml (line 656) | func (s *Selection) eachNodeHtml(htmlStr string, isParent bool, mergeFn ...

FILE: manipulation_test.go
  constant wrapHtml (line 9) | wrapHtml = "<div id=\"ins\">test string<div><p><em><b></b></em></p></div...
  function TestAfter (line 12) | func TestAfter(t *testing.T) {
  function TestAfterMany (line 22) | func TestAfterMany(t *testing.T) {
  function TestAfterWithRemoved (line 32) | func TestAfterWithRemoved(t *testing.T) {
  function TestAfterSelection (line 42) | func TestAfterSelection(t *testing.T) {
  function TestAfterHtml (line 52) | func TestAfterHtml(t *testing.T) {
  function TestAfterHtmlContext (line 60) | func TestAfterHtmlContext(t *testing.T) {
  function TestAppend (line 80) | func TestAppend(t *testing.T) {
  function TestAppendBody (line 89) | func TestAppendBody(t *testing.T) {
  function TestAppendSelection (line 99) | func TestAppendSelection(t *testing.T) {
  function TestAppendSelectionExisting (line 110) | func TestAppendSelectionExisting(t *testing.T) {
  function TestAppendClone (line 120) | func TestAppendClone(t *testing.T) {
  function TestAppendHtml (line 129) | func TestAppendHtml(t *testing.T) {
  function TestAppendHtmlContext (line 137) | func TestAppendHtmlContext(t *testing.T) {
  function TestBefore (line 158) | func TestBefore(t *testing.T) {
  function TestBeforeWithRemoved (line 168) | func TestBeforeWithRemoved(t *testing.T) {
  function TestBeforeSelection (line 178) | func TestBeforeSelection(t *testing.T) {
  function TestBeforeHtml (line 188) | func TestBeforeHtml(t *testing.T) {
  function TestBeforeHtmlContext (line 196) | func TestBeforeHtmlContext(t *testing.T) {
  function TestEmpty (line 217) | func TestEmpty(t *testing.T) {
  function TestPrepend (line 226) | func TestPrepend(t *testing.T) {
  function TestPrependBody (line 235) | func TestPrependBody(t *testing.T) {
  function TestPrependSelection (line 245) | func TestPrependSelection(t *testing.T) {
  function TestPrependSelectionExisting (line 256) | func TestPrependSelectionExisting(t *testing.T) {
  function TestPrependClone (line 267) | func TestPrependClone(t *testing.T) {
  function TestPrependHtml (line 276) | func TestPrependHtml(t *testing.T) {
  function TestPrependHtmlContext (line 284) | func TestPrependHtmlContext(t *testing.T) {
  function TestRemove (line 305) | func TestRemove(t *testing.T) {
  function TestRemoveAll (line 313) | func TestRemoveAll(t *testing.T) {
  function TestRemoveRoot (line 321) | func TestRemoveRoot(t *testing.T) {
  function TestRemoveFiltered (line 329) | func TestRemoveFiltered(t *testing.T) {
  function TestReplaceWith (line 342) | func TestReplaceWith(t *testing.T) {
  function TestReplaceWithHtml (line 356) | func TestReplaceWithHtml(t *testing.T) {
  function TestReplaceWithHtmlContext (line 365) | func TestReplaceWithHtmlContext(t *testing.T) {
  function TestSetHtml (line 387) | func TestSetHtml(t *testing.T) {
  function TestSetHtmlNoMatch (line 402) | func TestSetHtmlNoMatch(t *testing.T) {
  function TestSetHtmlEmpty (line 412) | func TestSetHtmlEmpty(t *testing.T) {
  function TestSetHtmlContext (line 422) | func TestSetHtmlContext(t *testing.T) {
  function TestSetText (line 444) | func TestSetText(t *testing.T) {
  function TestReplaceWithSelection (line 469) | func TestReplaceWithSelection(t *testing.T) {
  function TestUnwrap (line 480) | func TestUnwrap(t *testing.T) {
  function TestUnwrapBody (line 501) | func TestUnwrapBody(t *testing.T) {
  function TestUnwrapHead (line 511) | func TestUnwrapHead(t *testing.T) {
  function TestUnwrapHtml (line 522) | func TestUnwrapHtml(t *testing.T) {
  function TestWrap (line 533) | func TestWrap(t *testing.T) {
  function TestWrapEmpty (line 545) | func TestWrapEmpty(t *testing.T) {
  function TestWrapHtml (line 559) | func TestWrapHtml(t *testing.T) {
  function TestWrapSelection (line 567) | func TestWrapSelection(t *testing.T) {
  function TestWrapAll (line 579) | func TestWrapAll(t *testing.T) {
  function TestWrapAllHtml (line 591) | func TestWrapAllHtml(t *testing.T) {
  function TestWrapInnerNoContent (line 599) | func TestWrapInnerNoContent(t *testing.T) {
  function TestWrapInnerWithContent (line 610) | func TestWrapInnerWithContent(t *testing.T) {
  function TestWrapInnerNoWrapper (line 621) | func TestWrapInnerNoWrapper(t *testing.T) {
  function TestWrapInnerHtml (line 633) | func TestWrapInnerHtml(t *testing.T) {
  function TestParsingRespectsVaryingContext (line 643) | func TestParsingRespectsVaryingContext(t *testing.T) {
  function TestHtmlWithNonElementNode (line 694) | func TestHtmlWithNonElementNode(t *testing.T) {

FILE: property.go
  method Attr (line 15) | func (s *Selection) Attr(attrName string) (val string, exists bool) {
  method AttrOr (line 23) | func (s *Selection) AttrOr(attrName, defaultValue string) string {
  method RemoveAttr (line 37) | func (s *Selection) RemoveAttr(attrName string) *Selection {
  method SetAttr (line 46) | func (s *Selection) SetAttr(attrName, val string) *Selection {
  method Text (line 61) | func (s *Selection) Text() string {
  method Size (line 85) | func (s *Selection) Size() int {
  method Length (line 90) | func (s *Selection) Length() int {
  method Html (line 96) | func (s *Selection) Html() (ret string, e error) {
  method AddClass (line 116) | func (s *Selection) AddClass(class ...string) *Selection {
  method HasClass (line 140) | func (s *Selection) HasClass(class string) bool {
  method RemoveClass (line 154) | func (s *Selection) RemoveClass(class ...string) *Selection {
  method ToggleClass (line 182) | func (s *Selection) ToggleClass(class ...string) *Selection {
  function getAttributePtr (line 208) | func getAttributePtr(attrName string, n *html.Node) *html.Attribute {
  function getAttributeValue (line 222) | func getAttributeValue(attrName string, n *html.Node) (val string, exist...
  function getClassesAndAttr (line 231) | func getClassesAndAttr(n *html.Node, create bool) (classes string, attr ...
  function getClassesSlice (line 253) | func getClassesSlice(classes string) []string {
  function removeAttr (line 257) | func removeAttr(n *html.Node, attrName string) {
  function setClasses (line 267) | func setClasses(n *html.Node, attr *html.Attribute, classes string) {

FILE: property_test.go
  function TestAttrExists (line 9) | func TestAttrExists(t *testing.T) {
  function TestAttrOr (line 17) | func TestAttrOr(t *testing.T) {
  function TestAttrNotExist (line 30) | func TestAttrNotExist(t *testing.T) {
  function TestRemoveAttr (line 36) | func TestRemoveAttr(t *testing.T) {
  function TestSetAttr (line 47) | func TestSetAttr(t *testing.T) {
  function TestSetAttr2 (line 62) | func TestSetAttr2(t *testing.T) {
  function TestText (line 77) | func TestText(t *testing.T) {
  function TestText2 (line 84) | func TestText2(t *testing.T) {
  function TestText3 (line 94) | func TestText3(t *testing.T) {
  function TestHtml (line 105) | func TestHtml(t *testing.T) {
  function TestNbsp (line 119) | func TestNbsp(t *testing.T) {
  function TestAddClass (line 141) | func TestAddClass(t *testing.T) {
  function TestAddClassSimilar (line 151) | func TestAddClassSimilar(t *testing.T) {
  function TestAddEmptyClass (line 160) | func TestAddEmptyClass(t *testing.T) {
  function TestAddClasses (line 170) | func TestAddClasses(t *testing.T) {
  function TestHasClass (line 180) | func TestHasClass(t *testing.T) {
  function TestHasClassNone (line 187) | func TestHasClassNone(t *testing.T) {
  function TestHasClassNotFirst (line 194) | func TestHasClassNotFirst(t *testing.T) {
  function TestRemoveClass (line 201) | func TestRemoveClass(t *testing.T) {
  function TestRemoveClassSimilar (line 211) | func TestRemoveClassSimilar(t *testing.T) {
  function TestRemoveAllClasses (line 220) | func TestRemoveAllClasses(t *testing.T) {
  function TestToggleClass (line 235) | func TestToggleClass(t *testing.T) {

FILE: query.go
  method Is (line 7) | func (s *Selection) Is(selector string) bool {
  method IsMatcher (line 13) | func (s *Selection) IsMatcher(m Matcher) bool {
  method IsFunction (line 26) | func (s *Selection) IsFunction(f func(int, *Selection) bool) bool {
  method IsSelection (line 32) | func (s *Selection) IsSelection(sel *Selection) bool {
  method IsNodes (line 38) | func (s *Selection) IsNodes(nodes ...*html.Node) bool {
  method Contains (line 47) | func (s *Selection) Contains(n *html.Node) bool {

FILE: query_test.go
  function TestIs (line 7) | func TestIs(t *testing.T) {
  function TestIsInvalid (line 14) | func TestIsInvalid(t *testing.T) {
  function TestIsPositional (line 21) | func TestIsPositional(t *testing.T) {
  function TestIsPositionalNot (line 28) | func TestIsPositionalNot(t *testing.T) {
  function TestIsFunction (line 35) | func TestIsFunction(t *testing.T) {
  function TestIsFunctionRollback (line 45) | func TestIsFunctionRollback(t *testing.T) {
  function TestIsSelection (line 55) | func TestIsSelection(t *testing.T) {
  function TestIsSelectionNot (line 64) | func TestIsSelectionNot(t *testing.T) {
  function TestIsNodes (line 73) | func TestIsNodes(t *testing.T) {
  function TestDocContains (line 82) | func TestDocContains(t *testing.T) {
  function TestSelContains (line 89) | func TestSelContains(t *testing.T) {
  function TestSelNotContains (line 97) | func TestSelNotContains(t *testing.T) {

FILE: traversal.go
  type siblingType (line 5) | type siblingType
  constant siblingPrevUntil (line 10) | siblingPrevUntil siblingType = iota - 3
  constant siblingPrevAll (line 11) | siblingPrevAll
  constant siblingPrev (line 12) | siblingPrev
  constant siblingAll (line 13) | siblingAll
  constant siblingNext (line 14) | siblingNext
  constant siblingNextAll (line 15) | siblingNextAll
  constant siblingNextUntil (line 16) | siblingNextUntil
  constant siblingAllIncludingNonElements (line 17) | siblingAllIncludingNonElements
  method Find (line 29) | func (s *Selection) Find(selector string) *Selection {
  method FindMatcher (line 36) | func (s *Selection) FindMatcher(m Matcher) *Selection {
  method FindSelection (line 43) | func (s *Selection) FindSelection(sel *Selection) *Selection {
  method FindNodes (line 53) | func (s *Selection) FindNodes(nodes ...*html.Node) *Selection {
  method Contents (line 65) | func (s *Selection) Contents() *Selection {
  method ContentsFiltered (line 74) | func (s *Selection) ContentsFiltered(selector string) *Selection {
  method ContentsMatcher (line 85) | func (s *Selection) ContentsMatcher(m Matcher) *Selection {
  method Children (line 91) | func (s *Selection) Children() *Selection {
  method ChildrenFiltered (line 98) | func (s *Selection) ChildrenFiltered(selector string) *Selection {
  method ChildrenMatcher (line 105) | func (s *Selection) ChildrenMatcher(m Matcher) *Selection {
  method Parent (line 111) | func (s *Selection) Parent() *Selection {
  method ParentFiltered (line 117) | func (s *Selection) ParentFiltered(selector string) *Selection {
  method ParentMatcher (line 123) | func (s *Selection) ParentMatcher(m Matcher) *Selection {
  method Closest (line 129) | func (s *Selection) Closest(selector string) *Selection {
  method ClosestMatcher (line 136) | func (s *Selection) ClosestMatcher(m Matcher) *Selection {
  method ClosestNodes (line 151) | func (s *Selection) ClosestNodes(nodes ...*html.Node) *Selection {
  method ClosestSelection (line 171) | func (s *Selection) ClosestSelection(sel *Selection) *Selection {
  method Parents (line 180) | func (s *Selection) Parents() *Selection {
  method ParentsFiltered (line 186) | func (s *Selection) ParentsFiltered(selector string) *Selection {
  method ParentsMatcher (line 192) | func (s *Selection) ParentsMatcher(m Matcher) *Selection {
  method ParentsUntil (line 199) | func (s *Selection) ParentsUntil(selector string) *Selection {
  method ParentsUntilMatcher (line 206) | func (s *Selection) ParentsUntilMatcher(m Matcher) *Selection {
  method ParentsUntilSelection (line 213) | func (s *Selection) ParentsUntilSelection(sel *Selection) *Selection {
  method ParentsUntilNodes (line 223) | func (s *Selection) ParentsUntilNodes(nodes ...*html.Node) *Selection {
  method ParentsFilteredUntil (line 230) | func (s *Selection) ParentsFilteredUntil(filterSelector, untilSelector s...
  method ParentsFilteredUntilMatcher (line 236) | func (s *Selection) ParentsFilteredUntilMatcher(filter, until Matcher) *...
  method ParentsFilteredUntilSelection (line 243) | func (s *Selection) ParentsFilteredUntilSelection(filterSelector string,...
  method ParentsMatcherUntilSelection (line 250) | func (s *Selection) ParentsMatcherUntilSelection(filter Matcher, sel *Se...
  method ParentsFilteredUntilNodes (line 260) | func (s *Selection) ParentsFilteredUntilNodes(filterSelector string, nod...
  method ParentsMatcherUntilNodes (line 267) | func (s *Selection) ParentsMatcherUntilNodes(filter Matcher, nodes ...*h...
  method Siblings (line 273) | func (s *Selection) Siblings() *Selection {
  method SiblingsFiltered (line 280) | func (s *Selection) SiblingsFiltered(selector string) *Selection {
  method SiblingsMatcher (line 287) | func (s *Selection) SiblingsMatcher(m Matcher) *Selection {
  method Next (line 293) | func (s *Selection) Next() *Selection {
  method NextFiltered (line 300) | func (s *Selection) NextFiltered(selector string) *Selection {
  method NextMatcher (line 307) | func (s *Selection) NextMatcher(m Matcher) *Selection {
  method NextAll (line 313) | func (s *Selection) NextAll() *Selection {
  method NextAllFiltered (line 320) | func (s *Selection) NextAllFiltered(selector string) *Selection {
  method NextAllMatcher (line 327) | func (s *Selection) NextAllMatcher(m Matcher) *Selection {
  method Prev (line 333) | func (s *Selection) Prev() *Selection {
  method PrevFiltered (line 340) | func (s *Selection) PrevFiltered(selector string) *Selection {
  method PrevMatcher (line 347) | func (s *Selection) PrevMatcher(m Matcher) *Selection {
  method PrevAll (line 353) | func (s *Selection) PrevAll() *Selection {
  method PrevAllFiltered (line 360) | func (s *Selection) PrevAllFiltered(selector string) *Selection {
  method PrevAllMatcher (line 367) | func (s *Selection) PrevAllMatcher(m Matcher) *Selection {
  method NextUntil (line 374) | func (s *Selection) NextUntil(selector string) *Selection {
  method NextUntilMatcher (line 382) | func (s *Selection) NextUntilMatcher(m Matcher) *Selection {
  method NextUntilSelection (line 390) | func (s *Selection) NextUntilSelection(sel *Selection) *Selection {
  method NextUntilNodes (line 400) | func (s *Selection) NextUntilNodes(nodes ...*html.Node) *Selection {
  method PrevUntil (line 408) | func (s *Selection) PrevUntil(selector string) *Selection {
  method PrevUntilMatcher (line 416) | func (s *Selection) PrevUntilMatcher(m Matcher) *Selection {
  method PrevUntilSelection (line 424) | func (s *Selection) PrevUntilSelection(sel *Selection) *Selection {
  method PrevUntilNodes (line 434) | func (s *Selection) PrevUntilNodes(nodes ...*html.Node) *Selection {
  method NextFilteredUntil (line 442) | func (s *Selection) NextFilteredUntil(filterSelector, untilSelector stri...
  method NextFilteredUntilMatcher (line 450) | func (s *Selection) NextFilteredUntilMatcher(filter, until Matcher) *Sel...
  method NextFilteredUntilSelection (line 458) | func (s *Selection) NextFilteredUntilSelection(filterSelector string, se...
  method NextMatcherUntilSelection (line 465) | func (s *Selection) NextMatcherUntilSelection(filter Matcher, sel *Selec...
  method NextFilteredUntilNodes (line 475) | func (s *Selection) NextFilteredUntilNodes(filterSelector string, nodes ...
  method NextMatcherUntilNodes (line 483) | func (s *Selection) NextMatcherUntilNodes(filter Matcher, nodes ...*html...
  method PrevFilteredUntil (line 491) | func (s *Selection) PrevFilteredUntil(filterSelector, untilSelector stri...
  method PrevFilteredUntilMatcher (line 499) | func (s *Selection) PrevFilteredUntilMatcher(filter, until Matcher) *Sel...
  method PrevFilteredUntilSelection (line 507) | func (s *Selection) PrevFilteredUntilSelection(filterSelector string, se...
  method PrevMatcherUntilSelection (line 514) | func (s *Selection) PrevMatcherUntilSelection(filter Matcher, sel *Selec...
  method PrevFilteredUntilNodes (line 524) | func (s *Selection) PrevFilteredUntilNodes(filterSelector string, nodes ...
  method PrevMatcherUntilNodes (line 532) | func (s *Selection) PrevMatcherUntilNodes(filter Matcher, nodes ...*html...
  function filterAndPush (line 539) | func filterAndPush(srcSel *Selection, nodes []*html.Node, m Matcher) *Se...
  function findWithMatcher (line 547) | func findWithMatcher(nodes []*html.Node, m Matcher) []*html.Node {
  function getParentsNodes (line 562) | func getParentsNodes(nodes []*html.Node, stopm Matcher, stopNodes []*htm...
  function getSiblingNodes (line 584) | func getSiblingNodes(nodes []*html.Node, st siblingType, untilm Matcher,...
  function getChildrenNodes (line 611) | func getChildrenNodes(nodes []*html.Node, st siblingType) []*html.Node {
  function getChildrenWithSiblingType (line 619) | func getChildrenWithSiblingType(parent *html.Node, st siblingType, skipN...
  function getParentNodes (line 683) | func getParentNodes(nodes []*html.Node) []*html.Node {
  function mapNodes (line 696) | func mapNodes(nodes []*html.Node, f func(int, *html.Node) []*html.Node) ...

FILE: traversal_test.go
  function TestFind (line 8) | func TestFind(t *testing.T) {
  function TestFindRollback (line 13) | func TestFindRollback(t *testing.T) {
  function TestFindNotSelf (line 19) | func TestFindNotSelf(t *testing.T) {
  function TestFindInvalid (line 24) | func TestFindInvalid(t *testing.T) {
  function TestFindBig (line 29) | func TestFindBig(t *testing.T) {
  function TestChainedFind (line 39) | func TestChainedFind(t *testing.T) {
  function TestChainedFindInvalid (line 44) | func TestChainedFindInvalid(t *testing.T) {
  function TestChildren (line 49) | func TestChildren(t *testing.T) {
  function TestChildrenRollback (line 54) | func TestChildrenRollback(t *testing.T) {
  function TestContents (line 60) | func TestContents(t *testing.T) {
  function TestContentsRollback (line 65) | func TestContentsRollback(t *testing.T) {
  function TestChildrenFiltered (line 71) | func TestChildrenFiltered(t *testing.T) {
  function TestChildrenFilteredInvalid (line 76) | func TestChildrenFilteredInvalid(t *testing.T) {
  function TestChildrenFilteredRollback (line 81) | func TestChildrenFilteredRollback(t *testing.T) {
  function TestContentsFiltered (line 87) | func TestContentsFiltered(t *testing.T) {
  function TestContentsFilteredInvalid (line 92) | func TestContentsFilteredInvalid(t *testing.T) {
  function TestContentsFilteredRollback (line 97) | func TestContentsFilteredRollback(t *testing.T) {
  function TestChildrenFilteredNone (line 103) | func TestChildrenFilteredNone(t *testing.T) {
  function TestParent (line 108) | func TestParent(t *testing.T) {
  function TestParentRollback (line 113) | func TestParentRollback(t *testing.T) {
  function TestParentBody (line 119) | func TestParentBody(t *testing.T) {
  function TestParentFiltered (line 124) | func TestParentFiltered(t *testing.T) {
  function TestParentFilteredInvalid (line 130) | func TestParentFilteredInvalid(t *testing.T) {
  function TestParentFilteredRollback (line 135) | func TestParentFilteredRollback(t *testing.T) {
  function TestParents (line 141) | func TestParents(t *testing.T) {
  function TestParentsOrder (line 146) | func TestParentsOrder(t *testing.T) {
  function TestParentsRollback (line 152) | func TestParentsRollback(t *testing.T) {
  function TestParentsFiltered (line 158) | func TestParentsFiltered(t *testing.T) {
  function TestParentsFilteredInvalid (line 163) | func TestParentsFilteredInvalid(t *testing.T) {
  function TestParentsFilteredRollback (line 168) | func TestParentsFilteredRollback(t *testing.T) {
  function TestParentsUntil (line 174) | func TestParentsUntil(t *testing.T) {
  function TestParentsUntilInvalid (line 179) | func TestParentsUntilInvalid(t *testing.T) {
  function TestParentsUntilRollback (line 184) | func TestParentsUntilRollback(t *testing.T) {
  function TestParentsUntilSelection (line 190) | func TestParentsUntilSelection(t *testing.T) {
  function TestParentsUntilSelectionRollback (line 197) | func TestParentsUntilSelectionRollback(t *testing.T) {
  function TestParentsUntilNodes (line 204) | func TestParentsUntilNodes(t *testing.T) {
  function TestParentsUntilNodesRollback (line 211) | func TestParentsUntilNodesRollback(t *testing.T) {
  function TestParentsFilteredUntil (line 218) | func TestParentsFilteredUntil(t *testing.T) {
  function TestParentsFilteredUntilInvalid (line 223) | func TestParentsFilteredUntilInvalid(t *testing.T) {
  function TestParentsFilteredUntilRollback (line 228) | func TestParentsFilteredUntilRollback(t *testing.T) {
  function TestParentsFilteredUntilSelection (line 234) | func TestParentsFilteredUntilSelection(t *testing.T) {
  function TestParentsFilteredUntilSelectionRollback (line 241) | func TestParentsFilteredUntilSelectionRollback(t *testing.T) {
  function TestParentsFilteredUntilNodes (line 248) | func TestParentsFilteredUntilNodes(t *testing.T) {
  function TestParentsFilteredUntilNodesRollback (line 255) | func TestParentsFilteredUntilNodesRollback(t *testing.T) {
  function TestSiblings (line 262) | func TestSiblings(t *testing.T) {
  function TestSiblingsRollback (line 267) | func TestSiblingsRollback(t *testing.T) {
  function TestSiblings2 (line 273) | func TestSiblings2(t *testing.T) {
  function TestSiblings3 (line 278) | func TestSiblings3(t *testing.T) {
  function TestSiblingsFiltered (line 283) | func TestSiblingsFiltered(t *testing.T) {
  function TestSiblingsFilteredInvalid (line 288) | func TestSiblingsFilteredInvalid(t *testing.T) {
  function TestSiblingsFilteredRollback (line 293) | func TestSiblingsFilteredRollback(t *testing.T) {
  function TestNext (line 299) | func TestNext(t *testing.T) {
  function TestNextRollback (line 304) | func TestNextRollback(t *testing.T) {
  function TestNext2 (line 310) | func TestNext2(t *testing.T) {
  function TestNextNone (line 315) | func TestNextNone(t *testing.T) {
  function TestNextFiltered (line 320) | func TestNextFiltered(t *testing.T) {
  function TestNextFilteredInvalid (line 325) | func TestNextFilteredInvalid(t *testing.T) {
  function TestNextFilteredRollback (line 330) | func TestNextFilteredRollback(t *testing.T) {
  function TestNextFiltered2 (line 336) | func TestNextFiltered2(t *testing.T) {
  function TestPrev (line 341) | func TestPrev(t *testing.T) {
  function TestPrevRollback (line 347) | func TestPrevRollback(t *testing.T) {
  function TestPrev2 (line 353) | func TestPrev2(t *testing.T) {
  function TestPrevNone (line 358) | func TestPrevNone(t *testing.T) {
  function TestPrevFiltered (line 363) | func TestPrevFiltered(t *testing.T) {
  function TestPrevFilteredInvalid (line 368) | func TestPrevFilteredInvalid(t *testing.T) {
  function TestPrevFilteredRollback (line 373) | func TestPrevFilteredRollback(t *testing.T) {
  function TestNextAll (line 379) | func TestNextAll(t *testing.T) {
  function TestNextAllRollback (line 384) | func TestNextAllRollback(t *testing.T) {
  function TestNextAll2 (line 390) | func TestNextAll2(t *testing.T) {
  function TestNextAllNone (line 395) | func TestNextAllNone(t *testing.T) {
  function TestNextAllFiltered (line 400) | func TestNextAllFiltered(t *testing.T) {
  function TestNextAllFilteredInvalid (line 405) | func TestNextAllFilteredInvalid(t *testing.T) {
  function TestNextAllFilteredRollback (line 410) | func TestNextAllFilteredRollback(t *testing.T) {
  function TestNextAllFiltered2 (line 416) | func TestNextAllFiltered2(t *testing.T) {
  function TestPrevAll (line 421) | func TestPrevAll(t *testing.T) {
  function TestPrevAllOrder (line 426) | func TestPrevAllOrder(t *testing.T) {
  function TestPrevAllRollback (line 432) | func TestPrevAllRollback(t *testing.T) {
  function TestPrevAll2 (line 438) | func TestPrevAll2(t *testing.T) {
  function TestPrevAllFiltered (line 443) | func TestPrevAllFiltered(t *testing.T) {
  function TestPrevAllFilteredInvalid (line 448) | func TestPrevAllFilteredInvalid(t *testing.T) {
  function TestPrevAllFilteredRollback (line 453) | func TestPrevAllFilteredRollback(t *testing.T) {
  function TestNextUntil (line 459) | func TestNextUntil(t *testing.T) {
  function TestNextUntilInvalid (line 465) | func TestNextUntilInvalid(t *testing.T) {
  function TestNextUntil2 (line 470) | func TestNextUntil2(t *testing.T) {
  function TestNextUntilOrder (line 476) | func TestNextUntilOrder(t *testing.T) {
  function TestNextUntilRollback (line 482) | func TestNextUntilRollback(t *testing.T) {
  function TestNextUntilSelection (line 488) | func TestNextUntilSelection(t *testing.T) {
  function TestNextUntilSelectionRollback (line 496) | func TestNextUntilSelectionRollback(t *testing.T) {
  function TestNextUntilNodes (line 503) | func TestNextUntilNodes(t *testing.T) {
  function TestNextUntilNodesRollback (line 511) | func TestNextUntilNodesRollback(t *testing.T) {
  function TestPrevUntil (line 518) | func TestPrevUntil(t *testing.T) {
  function TestPrevUntilInvalid (line 524) | func TestPrevUntilInvalid(t *testing.T) {
  function TestPrevUntil2 (line 529) | func TestPrevUntil2(t *testing.T) {
  function TestPrevUntilOrder (line 535) | func TestPrevUntilOrder(t *testing.T) {
  function TestPrevUntilRollback (line 541) | func TestPrevUntilRollback(t *testing.T) {
  function TestPrevUntilSelection (line 547) | func TestPrevUntilSelection(t *testing.T) {
  function TestPrevUntilSelectionRollback (line 555) | func TestPrevUntilSelectionRollback(t *testing.T) {
  function TestPrevUntilNodes (line 562) | func TestPrevUntilNodes(t *testing.T) {
  function TestPrevUntilNodesRollback (line 570) | func TestPrevUntilNodesRollback(t *testing.T) {
  function TestNextFilteredUntil (line 577) | func TestNextFilteredUntil(t *testing.T) {
  function TestNextFilteredUntilInvalid (line 583) | func TestNextFilteredUntilInvalid(t *testing.T) {
  function TestNextFilteredUntilRollback (line 588) | func TestNextFilteredUntilRollback(t *testing.T) {
  function TestNextFilteredUntilSelection (line 594) | func TestNextFilteredUntilSelection(t *testing.T) {
  function TestNextFilteredUntilSelectionRollback (line 602) | func TestNextFilteredUntilSelectionRollback(t *testing.T) {
  function TestNextFilteredUntilNodes (line 609) | func TestNextFilteredUntilNodes(t *testing.T) {
  function TestNextFilteredUntilNodesRollback (line 617) | func TestNextFilteredUntilNodesRollback(t *testing.T) {
  function TestPrevFilteredUntil (line 624) | func TestPrevFilteredUntil(t *testing.T) {
  function TestPrevFilteredUntilInvalid (line 630) | func TestPrevFilteredUntilInvalid(t *testing.T) {
  function TestPrevFilteredUntilRollback (line 635) | func TestPrevFilteredUntilRollback(t *testing.T) {
  function TestPrevFilteredUntilSelection (line 641) | func TestPrevFilteredUntilSelection(t *testing.T) {
  function TestPrevFilteredUntilSelectionRollback (line 649) | func TestPrevFilteredUntilSelectionRollback(t *testing.T) {
  function TestPrevFilteredUntilNodes (line 656) | func TestPrevFilteredUntilNodes(t *testing.T) {
  function TestPrevFilteredUntilNodesRollback (line 664) | func TestPrevFilteredUntilNodesRollback(t *testing.T) {
  function TestClosestItself (line 671) | func TestClosestItself(t *testing.T) {
  function TestClosestNoDupes (line 678) | func TestClosestNoDupes(t *testing.T) {
  function TestClosestNone (line 685) | func TestClosestNone(t *testing.T) {
  function TestClosestInvalid (line 691) | func TestClosestInvalid(t *testing.T) {
  function TestClosestMany (line 697) | func TestClosestMany(t *testing.T) {
  function TestClosestRollback (line 704) | func TestClosestRollback(t *testing.T) {
  function TestClosestSelectionItself (line 710) | func TestClosestSelectionItself(t *testing.T) {
  function TestClosestSelectionNoDupes (line 716) | func TestClosestSelectionNoDupes(t *testing.T) {
  function TestClosestSelectionNone (line 723) | func TestClosestSelectionNone(t *testing.T) {
  function TestClosestSelectionMany (line 729) | func TestClosestSelectionMany(t *testing.T) {
  function TestClosestSelectionRollback (line 736) | func TestClosestSelectionRollback(t *testing.T) {
  function TestClosestNodesItself (line 742) | func TestClosestNodesItself(t *testing.T) {
  function TestClosestNodesNoDupes (line 748) | func TestClosestNodesNoDupes(t *testing.T) {
  function TestClosestNodesNone (line 755) | func TestClosestNodesNone(t *testing.T) {
  function TestClosestNodesMany (line 761) | func TestClosestNodesMany(t *testing.T) {
  function TestClosestNodesRollback (line 768) | func TestClosestNodesRollback(t *testing.T) {
  function TestIssue26 (line 774) | func TestIssue26(t *testing.T) {

FILE: type.go
  type Document (line 18) | type Document struct
  function NewDocumentFromNode (line 26) | func NewDocumentFromNode(root *html.Node) *Document {
  function NewDocument (line 37) | func NewDocument(url string) (*Document, error) {
  function NewDocumentFromReader (line 51) | func NewDocumentFromReader(r io.Reader) (*Document, error) {
  function NewDocumentFromResponse (line 64) | func NewDocumentFromResponse(res *http.Response) (*Document, error) {
  function CloneDocument (line 84) | func CloneDocument(doc *Document) *Document {
  function newDocument (line 89) | func newDocument(root *html.Node, url *url.URL) *Document {
  type Selection (line 99) | type Selection struct
  function newEmptySelection (line 106) | func newEmptySelection(doc *Document) *Selection {
  function newSingleSelection (line 111) | func newSingleSelection(node *html.Node, doc *Document) *Selection {
  type Matcher (line 118) | type Matcher interface
  function Single (line 147) | func Single(selector string) Matcher {
  function SingleMatcher (line 155) | func SingleMatcher(m Matcher) Matcher {
  function compileMatcher (line 166) | func compileMatcher(s string) Matcher {
  type singleMatcher (line 174) | type singleMatcher struct
    method MatchAll (line 178) | func (m singleMatcher) MatchAll(n *html.Node) []*html.Node {
  type invalidMatcher (line 199) | type invalidMatcher struct
    method Match (line 201) | func (invalidMatcher) Match(n *html.Node) bool             { return fa...
    method MatchAll (line 202) | func (invalidMatcher) MatchAll(n *html.Node) []*html.Node  { return nil }
    method Filter (line 203) | func (invalidMatcher) Filter(ns []*html.Node) []*html.Node { return nil }

FILE: type_test.go
  function Doc (line 21) | func Doc() *Document {
  function Doc2 (line 28) | func Doc2() *Document {
  function Doc2Clone (line 35) | func Doc2Clone() *Document {
  function Doc3 (line 39) | func Doc3() *Document {
  function Doc3Clone (line 46) | func Doc3Clone() *Document {
  function DocB (line 50) | func DocB() *Document {
  function DocW (line 57) | func DocW() *Document {
  function assertLength (line 64) | func assertLength(t *testing.T, nodes []*html.Node, length int) {
  function assertClass (line 73) | func assertClass(t *testing.T, sel *Selection, class string) {
  function assertPanic (line 79) | func assertPanic(t *testing.T) {
  function assertEqual (line 85) | func assertEqual(t *testing.T, s1 *Selection, s2 *Selection) {
  function assertSelectionIs (line 91) | func assertSelectionIs(t *testing.T, sel *Selection, is ...string) {
  function printSel (line 99) | func printSel(t *testing.T, sel *Selection) {
  function loadDoc (line 109) | func loadDoc(page string) *Document {
  function loadString (line 125) | func loadString(t *testing.T, doc string) *Document {
  function TestNewDocument (line 133) | func TestNewDocument(t *testing.T) {
  function TestNewDocumentFromReader (line 146) | func TestNewDocumentFromReader(t *testing.T) {
  function TestNewDocumentFromResponseNil (line 194) | func TestNewDocumentFromResponseNil(t *testing.T) {
  function TestIssue103 (line 201) | func TestIssue103(t *testing.T) {
  function TestSingle (line 213) | func TestSingle(t *testing.T) {

FILE: utilities.go
  constant minNodesForSet (line 13) | minNodesForSet = 1000
  function NodeName (line 35) | func NodeName(s *Selection) string {
  function nodeName (line 44) | func nodeName(node *html.Node) string {
  function Render (line 63) | func Render(w io.Writer, s *Selection) error {
  function OuterHtml (line 78) | func OuterHtml(s *Selection) (string, error) {
  function sliceContains (line 87) | func sliceContains(container []*html.Node, contained *html.Node) bool {
  function nodeContains (line 98) | func nodeContains(container *html.Node, contained *html.Node) bool {
  function isInSlice (line 110) | func isInSlice(slice []*html.Node, node *html.Node) bool {
  function indexInSlice (line 115) | func indexInSlice(slice []*html.Node, node *html.Node) int {
  function appendWithoutDuplicates (line 131) | func appendWithoutDuplicates(target []*html.Node, nodes []*html.Node, ta...
  function grep (line 163) | func grep(sel *Selection, predicate func(i int, s *Selection) bool) (res...
  function pushStack (line 174) | func pushStack(fromSel *Selection, nodes []*html.Node) *Selection {

FILE: utilities_test.go
  function TestNodeName (line 27) | func TestNodeName(t *testing.T) {
  function TestNodeNameMultiSel (line 65) | func TestNodeNameMultiSel(t *testing.T) {
  function TestOuterHtml (line 84) | func TestOuterHtml(t *testing.T) {
Condensed preview — 59 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (650K chars).
[
  {
    "path": ".gitattributes",
    "chars": 29,
    "preview": "testdata/* linguist-vendored\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 59,
    "preview": "github: [mna]\ncustom: [\"https://www.buymeacoffee.com/mna\"]\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 293,
    "preview": "version: 2\nupdates:\n  # Maintain dependencies for Go\n  - package-ecosystem: \"gomod\"\n    directory: \"/\"\n    schedule:\n   "
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 505,
    "preview": "name: test\non: [push, pull_request]\n\nenv:\n  GOPROXY: https://proxy.golang.org,direct\n\njobs:\n  test:\n    strategy:\n      "
  },
  {
    "path": ".gitignore",
    "chars": 151,
    "preview": "# editor temporary files\n*.sublime-*\n.DS_Store\n*.swp\n#*.*#\ntags\n\n# direnv config\n.env*\n\n# test binaries\n*.test\n\n# covera"
  },
  {
    "path": "LICENSE",
    "chars": 1491,
    "preview": "Copyright (c) 2012-2021, Martin Angers & Contributors\nAll rights reserved.\n\nRedistribution and use in source and binary "
  },
  {
    "path": "README.md",
    "chars": 16764,
    "preview": "# goquery - a little like that j-thing, only in Go\n\n[![Build Status](https://github.com/PuerkitoBio/goquery/actions/work"
  },
  {
    "path": "array.go",
    "chars": 3849,
    "preview": "package goquery\n\nimport (\n\t\"golang.org/x/net/html\"\n)\n\nconst (\n\tmaxUint = ^uint(0)\n\tmaxInt  = int(maxUint >> 1)\n\n\t// ToEn"
  },
  {
    "path": "array_test.go",
    "chars": 5408,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc TestFirst(t *testing.T) {\n\tsel := Doc().Find(\".pvk-content\").First()\n\tasser"
  },
  {
    "path": "bench/v0.1.0",
    "chars": 18552,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        92.9 ns/op\nBenchmarkLast\t20000000\t        91.6 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v0.1.1",
    "chars": 18647,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        96.2 ns/op\nBenchmarkLast\t20000000\t        95.8 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v0.2.0",
    "chars": 19592,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        94.3 ns/op\nBenchmarkLast\t20000000\t        94.7 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v0.2.1-go1.1rc1",
    "chars": 20136,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        96.3 ns/op\nBenchmarkLast\t20000000\t        95.7 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v0.3.0",
    "chars": 20367,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        95.5 ns/op\nBenchmarkLast\t20000000\t        94.9 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v0.3.2-go1.2",
    "chars": 20440,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        88.4 ns/op\nBenchmarkLast\t20000000\t        88.2 ns/op\nBenchmarkEq\t20000000\t        8"
  },
  {
    "path": "bench/v0.3.2-go1.2-take2",
    "chars": 20400,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        88.3 ns/op\nBenchmarkLast\t20000000\t        88.9 ns/op\nBenchmarkEq\t20000000\t        8"
  },
  {
    "path": "bench/v0.3.2-go1.2rc1",
    "chars": 20400,
    "preview": "PASS\nBenchmarkFirst\t20000000\t        91.0 ns/op\nBenchmarkLast\t20000000\t        90.5 ns/op\nBenchmarkEq\t20000000\t        9"
  },
  {
    "path": "bench/v1.0.0-go1.7",
    "chars": 8639,
    "preview": "BenchmarkFirst-4                           \t30000000\t        50.7 ns/op\t      48 B/op\t       1 allocs/op\nBenchmarkLast-4"
  },
  {
    "path": "bench/v1.0.1a-go1.7",
    "chars": 8639,
    "preview": "BenchmarkFirst-4                           \t30000000\t        50.9 ns/op\t      48 B/op\t       1 allocs/op\nBenchmarkLast-4"
  },
  {
    "path": "bench/v1.0.1b-go1.7",
    "chars": 8639,
    "preview": "BenchmarkFirst-4                           \t30000000\t        51.8 ns/op\t      48 B/op\t       1 allocs/op\nBenchmarkLast-4"
  },
  {
    "path": "bench/v1.0.1c-go1.7",
    "chars": 8742,
    "preview": "BenchmarkFirst-4                           \t30000000\t        51.7 ns/op\t      48 B/op\t       1 allocs/op\nBenchmarkLast-4"
  },
  {
    "path": "bench_array_test.go",
    "chars": 1922,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkFirst(b *testing.B) {\n\tb.StopTimer()\n\tsel := DocB().Find(\"dd\")\n\tb."
  },
  {
    "path": "bench_example_test.go",
    "chars": 939,
    "preview": "package goquery\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc BenchmarkMetalReviewExample(b *testing.B) {\n\tv"
  },
  {
    "path": "bench_expand_test.go",
    "chars": 1677,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkAdd(b *testing.B) {\n\tvar n int\n\n\tb.StopTimer()\n\tsel := DocB().Find"
  },
  {
    "path": "bench_filter_test.go",
    "chars": 3919,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkFilter(b *testing.B) {\n\tvar n int\n\n\tb.StopTimer()\n\tsel := DocW().F"
  },
  {
    "path": "bench_iteration_test.go",
    "chars": 1564,
    "preview": "package goquery\n\nimport (\n\t\"strconv\"\n\t\"testing\"\n)\n\nfunc BenchmarkEach(b *testing.B) {\n\tvar tmp, n int\n\n\tb.StopTimer()\n\ts"
  },
  {
    "path": "bench_property_test.go",
    "chars": 770,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkAttr(b *testing.B) {\n\tvar s string\n\n\tb.StopTimer()\n\tsel := DocW()."
  },
  {
    "path": "bench_query_test.go",
    "chars": 1718,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkIs(b *testing.B) {\n\tvar y bool\n\n\tb.StopTimer()\n\tsel := DocW().Find"
  },
  {
    "path": "bench_traversal_test.go",
    "chars": 14443,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n\n\t\"github.com/andybalholm/cascadia\"\n)\n\nfunc BenchmarkFind(b *testing.B) {\n\tvar n in"
  },
  {
    "path": "doc/tips.md",
    "chars": 2079,
    "preview": "# Tips and tricks\n\n## Handle Non-UTF8 html Pages\n\nThe `go.net/html` package used by `goquery` requires that the html doc"
  },
  {
    "path": "doc.go",
    "chars": 4707,
    "preview": "// Copyright (c) 2012-2016, Martin Angers & Contributors\n// All rights reserved.\n//\n// Redistribution and use in source "
  },
  {
    "path": "example_test.go",
    "chars": 2435,
    "preview": "package goquery_test\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/PuerkitoBio/goquery\"\n)\n\n// This "
  },
  {
    "path": "expand.go",
    "chars": 2750,
    "preview": "package goquery\n\nimport \"golang.org/x/net/html\"\n\n// Add adds the selector string's matching nodes to those in the curren"
  },
  {
    "path": "expand_test.go",
    "chars": 2820,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc TestAdd(t *testing.T) {\n\tsel := Doc().Find(\"div.row-fluid\").Add(\"a\")\n\tasser"
  },
  {
    "path": "filter.go",
    "chars": 5922,
    "preview": "package goquery\n\nimport \"golang.org/x/net/html\"\n\n// Filter reduces the set of matched elements to those that match the s"
  },
  {
    "path": "filter_test.go",
    "chars": 5039,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc TestFilter(t *testing.T) {\n\tsel := Doc().Find(\".span12\").Filter(\".alert\")\n\t"
  },
  {
    "path": "go.mod",
    "chars": 128,
    "preview": "module github.com/PuerkitoBio/goquery\n\nrequire (\n\tgithub.com/andybalholm/cascadia v1.3.3\n\tgolang.org/x/net v0.52.0\n)\n\ngo"
  },
  {
    "path": "go.sum",
    "chars": 6146,
    "preview": "github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=\ngithub.com/andybalholm/cascadia v"
  },
  {
    "path": "iteration.go",
    "chars": 2030,
    "preview": "package goquery\n\nimport \"iter\"\n\n// Each iterates over a Selection object, executing a function for each\n// matched eleme"
  },
  {
    "path": "iteration_test.go",
    "chars": 3090,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n\n\t\"golang.org/x/net/html\"\n)\n\nfunc TestEach(t *testing.T) {\n\tvar cnt int\n\n\tsel := Do"
  },
  {
    "path": "manipulation.go",
    "chars": 21783,
    "preview": "package goquery\n\nimport (\n\t\"strings\"\n\n\t\"golang.org/x/net/html\"\n)\n\n// After applies the selector from the root document a"
  },
  {
    "path": "manipulation_test.go",
    "chars": 17976,
    "preview": "package goquery\n\nimport (\n\t\"log\"\n\t\"testing\"\n)\n\nconst (\n\twrapHtml = \"<div id=\\\"ins\\\">test string<div><p><em><b></b></em><"
  },
  {
    "path": "misc/git/pre-commit",
    "chars": 815,
    "preview": "#!/bin/sh\n\necho \">>> golint\"\nfor dir in $(go list ./... | grep -v /vendor/)\ndo\n    golint \"${dir}\"\ndone\necho \"<<< golint"
  },
  {
    "path": "property.go",
    "chars": 6624,
    "preview": "package goquery\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\n\t\"golang.org/x/net/html\"\n)\n\nvar rxClassTrim = regexp.MustCompile(\"[\\t\\r\\"
  },
  {
    "path": "property_test.go",
    "chars": 6017,
    "preview": "package goquery\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestAttrExists(t *testing.T) {\n\tif val, ok := Doc().Fi"
  },
  {
    "path": "query.go",
    "chars": 1730,
    "preview": "package goquery\n\nimport \"golang.org/x/net/html\"\n\n// Is checks the current matched set of elements against a selector and"
  },
  {
    "path": "query_test.go",
    "chars": 2315,
    "preview": "package goquery\n\nimport (\n\t\"testing\"\n)\n\nfunc TestIs(t *testing.T) {\n\tsel := Doc().Find(\".footer p:nth-child(1)\")\n\tif !se"
  },
  {
    "path": "testdata/gotesting.html",
    "chars": 21393,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\n  <title>testing - Th"
  },
  {
    "path": "testdata/gowiki.html",
    "chars": 127818,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "testdata/metalreview.html",
    "chars": 40565,
    "preview": "\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional."
  },
  {
    "path": "testdata/page.html",
    "chars": 5591,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\" ng-app=\"app\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-C"
  },
  {
    "path": "testdata/page2.html",
    "chars": 747,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Tests for siblings</title>\n  </head>\n  <BODY>\n    <div id=\"main\">\n      <div "
  },
  {
    "path": "testdata/page3.html",
    "chars": 756,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Tests for siblings</title>\n  </head>\n  <BODY>\n    <div id=\"main\">\n      <div "
  },
  {
    "path": "traversal.go",
    "chars": 28603,
    "preview": "package goquery\n\nimport \"golang.org/x/net/html\"\n\ntype siblingType int\n\n// Sibling type, used internally when iterating o"
  },
  {
    "path": "traversal_test.go",
    "chars": 20871,
    "preview": "package goquery\n\nimport (\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestFind(t *testing.T) {\n\tsel := Doc().Find(\"div.row-fluid\")\n\tas"
  },
  {
    "path": "type.go",
    "chars": 6603,
    "preview": "package goquery\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/andybalholm/cascadia\"\n\t\"golang.org/x/net/"
  },
  {
    "path": "type_test.go",
    "chars": 5000,
    "preview": "package goquery\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/andybalholm/cascadia\"\n\t\"golang.org/x"
  },
  {
    "path": "utilities.go",
    "chars": 5166,
    "preview": "package goquery\n\nimport (\n\t\"io\"\n\t\"strings\"\n\n\t\"golang.org/x/net/html\"\n)\n\n// used to determine if a set (map[*html.Node]bo"
  },
  {
    "path": "utilities_test.go",
    "chars": 2679,
    "preview": "package goquery\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"golang.org/x/net/html\"\n)\n\nvar allNodes = `<!doctyp"
  }
]

About this extraction

This page contains the full source code of the PuerkitoBio/goquery GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 59 files (594.6 KB), approximately 182.4k tokens, and a symbol index with 668 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!