func main() { flag.Usage = usage flag.Parse() if *origin != 0 && *origin != 1 { fmt.Fprintf(os.Stderr, "ivy: illegal origin value %d\n", *origin) os.Exit(2) } if *gformat { *format = "%g" } conf.SetFormat(*format) conf.SetOrigin(*origin) conf.SetPrompt(*prompt) value.SetConfig(&conf) context := parse.NewContext() if *execute { runArgs(context) return } if flag.NArg() > 0 { for i := 0; i < flag.NArg(); i++ { name := flag.Arg(i) var fd io.Reader var err error interactive := false if name == "-" { interactive = true fd = os.Stdin } else { interactive = false fd, err = os.Open(name) } if err != nil { fmt.Fprintf(os.Stderr, "ivy: %s\n", err) os.Exit(1) } scanner := scan.New(&conf, name, bufio.NewReader(fd)) parser := parse.NewParser(&conf, name, scanner, context) if !run(parser, os.Stdout, context, interactive) { break } } return } scanner := scan.New(&conf, "<stdin>", bufio.NewReader(os.Stdin)) parser := parse.NewParser(&conf, "<stdin>", scanner, context) for !run(parser, os.Stdout, context, true) { } }
// Reset clears all state to the initial value. func Reset() { conf.SetFormat("") conf.SetMaxBits(1e9) conf.SetMaxDigits(1e4) conf.SetOrigin(1) conf.SetPrompt("") conf.SetBase(0, 0) conf.SetRandomSeed(0) value.SetConfig(&conf) context = exec.NewContext() value.SetContext(context) run.SetConfig(&conf) }
func TestAll(t *testing.T) { initConf() value.SetConfig(&conf) var err error check := func() { if err != nil { t.Fatal(err) } } dir, err := os.Open("testdata") check() names, err := dir.Readdirnames(0) check() for _, name := range names { if !strings.HasSuffix(name, ".ivy") { continue } var data []byte path := filepath.Join("testdata", name) data, err = ioutil.ReadFile(path) check() text := string(data) lines := strings.Split(text, "\n") // Will have a trailing empty string. if len(lines) > 0 && lines[len(lines)-1] == "" { lines = lines[:len(lines)-1] } lineNum := 1 errCount := 0 for len(lines) > 0 { // Assemble the input to one example. input, output, length := getText(t, path, lineNum, lines) if input == nil { break } if !runTest(t, path, lineNum, input, output) { errCount++ if errCount > 3 { t.Fatal("too many errors") } } lines = lines[length:] lineNum += length } } }
func main() { flag.Usage = usage flag.Parse() if *origin != 0 && *origin != 1 { fmt.Fprintf(os.Stderr, "ivy: illegal origin value %d\n", *origin) os.Exit(2) } if *gformat { *format = "%.12g" } conf.SetFormat(*format) conf.SetMaxBits(*maxbits) conf.SetMaxDigits(*maxdigits) conf.SetOrigin(*origin) conf.SetPrompt(*prompt) if len(*debugFlag) > 0 { for _, debug := range strings.Split(*debugFlag, ",") { if !conf.SetDebug(debug, true) { fmt.Fprintf(os.Stderr, "ivy: unknown debug flag %q", debug) os.Exit(2) } } } value.SetConfig(&conf) context = parse.NewContext() value.SetContext(context) if *execute { runArgs(context) return } if flag.NArg() > 0 { for i := 0; i < flag.NArg(); i++ { name := flag.Arg(i) var fd io.Reader var err error interactive := false if name == "-" { interactive = true fd = os.Stdin } else { interactive = false fd, err = os.Open(name) } if err != nil { fmt.Fprintf(os.Stderr, "ivy: %s\n", err) os.Exit(1) } scanner := scan.New(&conf, name, bufio.NewReader(fd)) parser := parse.NewParser(&conf, name, scanner, context) if !run(parser, context, interactive) { break } } return } scanner := scan.New(&conf, "<stdin>", bufio.NewReader(os.Stdin)) parser := parse.NewParser(&conf, "<stdin>", scanner, context) for !run(parser, context, true) { } }