69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
|
// Copyright 2014 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// +build generate
|
||
|
|
||
|
package triegen_test
|
||
|
|
||
|
// The code in this file generates captures and writes the tries generated in
|
||
|
// the examples to data_test.go. To invoke it, run:
|
||
|
// go test -tags=generate
|
||
|
//
|
||
|
// Making the generation code a "test" allows us to link in the necessary test
|
||
|
// code.
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
const tmpfile = "tmpout"
|
||
|
const dstfile = "data_test.go"
|
||
|
|
||
|
f, err := os.Create(tmpfile)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Could not create output file: %v", err)
|
||
|
}
|
||
|
defer os.Remove(tmpfile)
|
||
|
defer f.Close()
|
||
|
|
||
|
// We exit before this function returns, regardless of success or failure,
|
||
|
// so there's no need to save (and later restore) the existing genWriter
|
||
|
// value.
|
||
|
genWriter = f
|
||
|
|
||
|
f.Write([]byte(header))
|
||
|
|
||
|
Example_build()
|
||
|
ExampleGen_build()
|
||
|
|
||
|
if err := exec.Command("gofmt", "-w", tmpfile).Run(); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
os.Remove(dstfile)
|
||
|
os.Rename(tmpfile, dstfile)
|
||
|
|
||
|
os.Exit(0)
|
||
|
}
|
||
|
|
||
|
const header = `// This file is generated with "go test -tags generate". DO NOT EDIT!
|
||
|
// +build !generate
|
||
|
|
||
|
package triegen_test
|
||
|
`
|
||
|
|
||
|
// Stubs for generated tries. These are needed as we exclude data_test.go if
|
||
|
// the generate flag is set. This will clearly make the tests fail, but that
|
||
|
// is okay. It allows us to bootstrap.
|
||
|
|
||
|
type trie struct{}
|
||
|
|
||
|
func (t *trie) lookupString(string) (uint8, int) { return 0, 1 }
|
||
|
func (t *trie) lookupStringUnsafe(string) uint64 { return 0 }
|
||
|
|
||
|
func newRandTrie(i int) *trie { return &trie{} }
|
||
|
func newMultiTrie(i int) *trie { return &trie{} }
|