Beispiel #1
0
func BenchmarkHQ9_Hello(b *testing.B) {
	hq9, err := ioutil.ReadFile("hello.hq9")
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := NewWriter(&buf)
	_, err = w.Program(string(hq9))
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	b.ResetTimer()

	prog, err := bit.Parse(&buf)
	if err != nil {
		panic(err)
	}

	b.ResetTimer()

	for i := 0; i < b.N; i++ {
		err := prog.Run(bitio.Null, bitio.Null)
		if err != nil {
			panic(err)
		}
	}
}
Beispiel #2
0
func parse() bit.Program {
	f, err := os.Open(flag.Arg(0))
	if err != nil {
		handle(err)
		panic("unreachable")
	}
	defer func() {
		if err := f.Close(); err != nil {
			handle(err)
			panic("unreachable")
		}
	}()

	prog, err := bit.Parse(f)
	if err != nil {
		handle(err)
		panic("unreachable")
	}

	if !*flagNoOpt {
		prog.Optimize()
	}

	return prog
}
Beispiel #3
0
func BenchmarkHQ9_Parse(b *testing.B) {
	hq9, err := ioutil.ReadFile("hello.hq9")
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := NewWriter(&buf)
	_, err = w.Program(string(hq9))
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	b.ResetTimer()

	for i := 0; i < b.N; i++ {
		prog, err := bit.Parse(bytes.NewReader(buf.Bytes()))
		if err != nil {
			panic(err)
		}
		_ = prog
	}
}
Beispiel #4
0
func BenchmarkBF_Optimize(b *testing.B) {
	bf, err := ioutil.ReadFile("hello.bf")
	if err != nil {
		panic(err)
	}

	commands, err := Parse(Tokenize(bytes.NewReader(bf)))
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := NewWriter(&buf)
	_, err = w.Program(commands)
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	prog, err := bit.Parse(&buf)
	if err != nil {
		panic(err)
	}

	b.ResetTimer()

	for i := 0; i < b.N; i++ {
		prog.Optimize()
	}
}
Beispiel #5
0
func parse() (prog0, prog1 bit.Program) {
	ch := make(chan bit.Program)

	for i := 0; i < 2; i++ {
		go func() {
			f, err := os.Open(flag.Arg(0))
			if err != nil {
				handle(err)
				panic("unreachable")
			}

			prog, err := bit.Parse(f)
			if err != nil {
				handle(err)
				panic("unreachable")
			}

			if err = f.Close(); err != nil {
				handle(err)
				panic("unreachable")
			}

			ch <- prog
		}()
	}

	prog0, prog1 = <-ch, <-ch

	prog1.Optimize()

	return
}
Beispiel #6
0
func Example() {
	f, err := os.Open("hello.ook")
	if err != nil {
		panic(err)
	}

	commands, err := Parse(bufio.NewReader(f))
	if err != nil {
		panic(err)
	}

	err = f.Close()
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := bf.NewWriter(&buf)
	_, err = w.Program(commands)
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	prog, err := bit.Parse(&buf)
	if err != nil {
		panic(err)
	}

	bw := bufio.NewWriter(os.Stdout)

	err = prog.RunByte(bufio.NewReader(os.Stdin), bw)
	if err != nil {
		panic(err)
	}

	err = bw.Flush()
	if err != nil {
		panic(err)
	}

	// Output:
	// Hello World!
}
Beispiel #7
0
func Example() {
	b, err := ioutil.ReadFile("hello.hq9")
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := NewWriter(&buf)
	_, err = w.Program(string(b))
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	prog, err := bit.Parse(&buf)
	if err != nil {
		panic(err)
	}

	bw := bufio.NewWriter(os.Stdout)

	err = prog.RunByte(bufio.NewReader(os.Stdin), bw)
	if err != nil {
		panic(err)
	}

	err = bw.Flush()
	if err != nil {
		panic(err)
	}

	// Output:
	// Hello, World!
}