Documentation
¶
Index ¶
- Variables
- type Fuzz
- type Named
- type Option
- type Subject
- func (s *Subject) AddCompileResult(cid id.ID, c compilation.CompileResult) error
- func (s *Subject) AddName(name string) *Named
- func (s *Subject) AddRecipe(arch id.ID, r recipe.Recipe) error
- func (s *Subject) AddRun(cid id.ID, r compilation.RunResult) error
- func (s *Subject) BestLitmus() (*litmus.Litmus, error)
- func (s *Subject) Compilation(cid id.ID) (compilation.Compilation, error)
- func (s *Subject) CompileResult(cid id.ID) (*compilation.CompileResult, error)
- func (s *Subject) HasFuzzFile() bool
- func (s *Subject) Recipe(arch id.ID) (id.ID, recipe.Recipe, error)
- func (s *Subject) RunResult(cid id.ID) (*compilation.RunResult, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMissingCompilation occurs on requests for compile results for a compiler that do not have them. ErrMissingCompilation = errors.New("no such compilation") // ErrDuplicateCompile occurs when one tries to insert a compile result that already exists. ErrDuplicateCompile = errors.New("duplicate compile result") // ErrDuplicateRecipe occurs when one tries to insert a recipe that already exists. ErrDuplicateRecipe = errors.New("duplicate recipe") // ErrDuplicateRun occurs when one tries to insert a run that already exists. ErrDuplicateRun = errors.New("duplicate run") // ErrMissingCompile occurs on requests for compile results for a compiler that do not have them. ErrMissingCompile = errors.New("no such compile result") // ErrMissingRecipe occurs on requests for recipe paths for an arch that do not have them. ErrMissingRecipe = errors.New("no such recipe") // ErrMissingRun occurs on requests for runs for a compiler that do not have them. ErrMissingRun = errors.New("no such run") // ErrNoBestLitmus occurs when asking for a BestLitmus() on a test with no valid Litmus file paths. ErrNoBestLitmus = errors.New("no valid litmus file for this subject") )
Functions ¶
This section is empty.
Types ¶
type Fuzz ¶
type Fuzz struct {
// Duration is the length of time it took to fuzz this file.
Duration time.Duration `toml:"duration,omitzero" json:"duration,omitempty"`
// Litmus holds information about this subject's fuzzed Litmus file.
Litmus litmus.Litmus `toml:"litmus,omitempty" json:"litmus,omitempty"`
// Trace is the slashpath to this subject's fuzzer trace file.
Trace string `toml:"trace,omitempty" json:"trace,omitempty"`
}
Fuzz is the set of file paths, and other metadata, associated with a fuzzer output.
type Named ¶
type Named struct {
// Name is the name of the subject.
Name string
// Normalise embeds the subject itself.
Subject
}
Named wraps a Subject with its name.
type Option ¶
Option is the type of (functional) options to the New constructor.
func WithCompile ¶
func WithCompile(cid id.ID, c compilation.CompileResult) Option
WithCompile is an option that tries to preload a compile result for compiler ID cid onto a subject.
func WithRecipe ¶
WithRecipe is an option that tries to preload a recipe for architecture ID arch onto a subject.
type Subject ¶
type Subject struct {
// Fuzz is the fuzzer output for this subject, if it has been fuzzed.
Fuzz *Fuzz `toml:"fuzz,omitempty" json:"fuzz,omitempty"`
// Source refers to the original litmus test for this subject.
Source litmus.Litmus `toml:"source,omitempty" json:"source,omitempty"`
// Compilations contains information about this subject's compilations, organised by compiler ID.
// If nil, this subject hasn't had any compilations.
Compilations compilation.Map `toml:"compilations,omitempty" json:"compilations,omitempty"`
// Recipes contains information about this subject's lifted test recipes.
// If nil, this subject hasn't had any recipes generated.
Recipes recipe.Map `toml:"recipes,omitempty" json:"recipes,omitempty"`
}
Subject represents a single test subject in a corpus.
func NewOrPanic ¶
NewOrPanic is like New, but panics if there is an error. Use in tests only.
func (*Subject) AddCompileResult ¶
func (s *Subject) AddCompileResult(cid id.ID, c compilation.CompileResult) error
AddCompileResult sets the compilation information for compiler ID cid to c in this subject. It fails if there already _is_ a compilation.
func (*Subject) AddRecipe ¶
AddRecipe sets the recipe information for arch to r in this subject. It fails if there already _is_ a recipe for arch.
func (*Subject) AddRun ¶
AddRun sets the run information for cid to r in this subject. It fails if there already _is_ a run for cid.
func (*Subject) BestLitmus ¶
BestLitmus tries to get the 'best' litmus test for further development.
When there is a fuzzing record for this subject, the fuzz output is the best path. Otherwise, if there is a non-empty Litmus file for this subject, that file is the best path. Else, BestLitmus returns an error.
Example ¶
ExampleSubject_BestLitmus is a testable example for BestLitmus.
package main
import (
"fmt"
"github.com/c4-project/c4t/internal/model/litmus"
"github.com/c4-project/c4t/internal/subject"
)
func main() {
l, _ := litmus.New("foo.litmus")
s1, _ := subject.New(l)
b1, _ := s1.BestLitmus()
// This subject has a fuzzed litmus file, which takes priority.
f, _ := litmus.New("bar.litmus")
s2, _ := subject.New(l, subject.WithFuzz(&subject.Fuzz{Litmus: *f}))
b2, _ := s2.BestLitmus()
fmt.Println("s1:", b1.Path)
fmt.Println("s2:", b2.Path)
}
Output: s1: foo.litmus s2: bar.litmus
func (*Subject) Compilation ¶
func (s *Subject) Compilation(cid id.ID) (compilation.Compilation, error)
Compilation gets the compilation information for the compiler ID cid.
func (*Subject) CompileResult ¶
func (s *Subject) CompileResult(cid id.ID) (*compilation.CompileResult, error)
CompileResult gets the compilation result for the compiler ID cid.
Example ¶
ExampleSubject_CompileResult is a testable example for CompileResult.
package main
import (
"fmt"
"github.com/c4-project/c4t/internal/subject/compilation"
"github.com/c4-project/c4t/internal/subject/status"
"github.com/c4-project/c4t/internal/id"
"github.com/c4-project/c4t/internal/subject"
)
func main() {
s := subject.Subject{Compilations: compilation.Map{
id.FromString("gcc"): {
Compile: &compilation.CompileResult{
Result: compilation.Result{Status: status.Ok}, Files: compilation.CompileFileset{Bin: "a.out", Log: "gcc.log"},
}},
id.FromString("clang"): {
Compile: &compilation.CompileResult{
Result: compilation.Result{Status: status.CompileFail}, Files: compilation.CompileFileset{Bin: "a.out", Log: "clang.log"},
}},
}}
gr, _ := s.CompileResult(id.FromString("gcc"))
cr, _ := s.CompileResult(id.FromString("clang"))
fmt.Println("gcc:", gr.Status, gr.Files.Bin, gr.Files.Log)
fmt.Println("clang:", cr.Status, cr.Files.Bin, cr.Files.Log)
}
Output: gcc: Ok a.out gcc.log clang: CompileFail a.out clang.log
func (*Subject) HasFuzzFile ¶
HasFuzzFile gets whether this subject has a fuzzed testcase file.
func (*Subject) Recipe ¶
Recipe gets the recipe for the architecture with id arch. It returns the ID of the recipe as well as the recipe contents.
Example ¶
ExampleSubject_Recipe is a testable example for Recipe.
package main
import (
"fmt"
"github.com/c4-project/c4t/internal/model/recipe"
"github.com/c4-project/c4t/internal/id"
"github.com/c4-project/c4t/internal/subject"
)
func main() {
s := subject.Subject{Recipes: recipe.Map{
id.ArchX8664: {Dir: "foo", Files: []string{"bar", "baz"}},
id.ArchArm: {Dir: "foobar", Files: []string{"barbaz"}},
}}
xsn, xs, _ := s.Recipe(id.ArchX8664)
asn, as, _ := s.Recipe(id.ArchArm)
fmt.Println("#", xsn)
for _, r := range xs.Files {
fmt.Println(r)
}
fmt.Println("#", asn)
for _, r := range as.Files {
fmt.Println(r)
}
}
Output: # x86.64 bar baz # arm barbaz
func (*Subject) RunResult ¶
RunResult gets the run result for the compiler with id cid.
Example ¶
ExampleSubject_RunResult is a testable example for Subject.RunResult.
package main
import (
"fmt"
"github.com/c4-project/c4t/internal/subject/compilation"
"github.com/c4-project/c4t/internal/subject/status"
"github.com/c4-project/c4t/internal/id"
"github.com/c4-project/c4t/internal/subject"
)
func main() {
s := subject.Subject{Compilations: compilation.Map{
id.FromString("gcc"): {
Run: &compilation.RunResult{
Result: compilation.Result{Status: status.Ok},
}},
id.FromString("clang"): {
Run: &compilation.RunResult{
Result: compilation.Result{Status: status.RunTimeout},
}},
}}
gr, _ := s.RunResult(id.FromString("gcc"))
cr, _ := s.RunResult(id.FromString("clang"))
fmt.Println("gcc:", gr.Status)
fmt.Println("clang:", cr.Status)
}
Output: gcc: Ok clang: RunTimeout
Directories
¶
| Path | Synopsis |
|---|---|
|
Package compilation contains types and functions for dealing with 'compilations': subject/compiler products.
|
Package compilation contains types and functions for dealing with 'compilations': subject/compiler products. |
|
Package corpus concerns test corpora (collections of named subjects).
|
Package corpus concerns test corpora (collections of named subjects). |
|
builder
Package builder describes a set of types and methods for building corpora asynchronously.
|
Package builder describes a set of types and methods for building corpora asynchronously. |
|
Package normaliser provides utilities for archiving and transferring plans, corpora, and subjects.
|
Package normaliser provides utilities for archiving and transferring plans, corpora, and subjects. |
|
Package normpath contains various 'normalised path' fragments, and functions for constructing them.
|
Package normpath contains various 'normalised path' fragments, and functions for constructing them. |
|
Package obs concerns 'observations': the end result of running a test on a particular machine.
|
Package obs concerns 'observations': the end result of running a test on a particular machine. |