| // 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{} } |