inltest

package module
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 18, 2018 License: MIT Imports: 6 Imported by: 0

README

Go Report Card GoDoc

inltest

Package inltest helps you to test that performance-sensitive funcs are inlineable.

Usually should be used inside your tests, so you can see that some functions are not inlineable anymore due to, for example, cost increase during the last refactoring.

Installation

go get -v github.com/Quasilyte/inltest

Example

package main

import (
	"fmt"
	"log"

	"github.com/Quasilyte/inltest"
)

func main() {
	issues, err := inltest.CheckInlineable(map[string][]string{
		"github.com/Quasilyte/inltest": {
			"CheckInlineable",
			"nonexisting",
		},

		// errors.New is inlineable => gives no issue.
		"errors": {
			"New",
		},

		"strings": {
			"(*Builder).WriteRune",
		},
	})
	if err != nil {
		log.Fatalf("inltest failed: %v", err)
	}
	for _, issue := range issues {
		fmt.Println(issue)
	}
}

For tests, you can do something like:

func TestInlining(t *testing.T) {
	if testing.Short() {
		t.Skip("skipping in short mode")
	}
	issues, err := CheckInlineable(map[string][]string{
		"my/important/pkg": {
			"func1",
			"func2",
			"(*Value).Set",
		},
	})
	if err != nil {
		t.Fatalf("inltest failed: %v", err)
	}
	for _, issue := range issues {
		t.Error(issue)
	}
}

Documentation

Overview

Package inltest helps you to test that performance-sensitive funcs are inlineable.

Example
package main

import (
	"fmt"
	"log"

	"github.com/Quasilyte/inltest"
)

func main() {
	issues, err := inltest.CheckInlineable(map[string][]string{
		"github.com/Quasilyte/inltest": {
			"CheckInlineable",
			"nonexisting",
		},

		// errors.New is inlineable => gives no issue.
		"errors": {
			"New",
		},

		"strings": {
			"(*Builder).WriteRune",
		},
	})
	if err != nil {
		log.Fatalf("inltest failed: %v", err)
	}
	for _, issue := range issues {
		fmt.Println(issue)
	}

}
Output:

github.com/Quasilyte/inltest.CheckInlineable: unhandled op RANGE
github.com/Quasilyte/inltest.nonexisting: unknown reason
strings.(*Builder).WriteRune: function too complex: cost 178 exceeds budget 80

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckInlineable

func CheckInlineable(candidates map[string][]string) ([]string, error)

CheckInlineable tries to find whether provided candidates are inlineable.

Returns a list of reasons for symbols that were not proven to be inlineable. If it's nil, then all symbols in candidates map are inlineable.

The candidates maps import path to the symbols that should be checked.

Here are some examples:

"io/ioutil": {"ReadAll"}       // Check bytes.ReadAll function
"bytes":     {"(*Buffer).Len"} // Check bytes.Buffer Len method

Note that you can check several symbols from the same package.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL