func runTest(t *testing.T, name string, lineNum int, input, output []string) bool { shouldFail := strings.HasSuffix(name, "_fail.ivy") initConf() scanner := scan.New(&conf, "", strings.NewReader(strings.Join(input, "\n")+"\n")) context := parse.NewContext() value.SetContext(context) parser := parse.NewParser(&conf, name, scanner, context) testBuf.Reset() if !run(parser, context, false) != shouldFail { if shouldFail { t.Fatalf("\nexpected execution failure at %s:%d:\n%s", name, lineNum, strings.Join(input, "\n")) } else { t.Fatalf("\nexecution failure at %s:%d:\n%s", name, lineNum, strings.Join(input, "\n")) } return false } if shouldFail { return true } result := testBuf.String() if !equal(strings.Split(result, "\n"), output) { t.Errorf("\n%s:%d:\n%s\ngot:\n%swant:\n%s", name, lineNum, strings.Join(input, "\n"), result, strings.Join(output, "\n")) return false } return true }
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) { } }
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) { } }