package generator import "io" import "fmt" import "testing" import "strings" import "git.tebibyte.media/sashakoshka/fspl/parser" import "git.tebibyte.media/sashakoshka/fspl/analyzer" func testString (test *testing.T, correct string, input string) { testReader(test, correct, strings.NewReader(input)) } func testReader (test *testing.T, correct string, inputs ...io.Reader) { ast := parser.Tree { } for index, stream := range inputs { err := ast.Parse(fmt.Sprintf("stream%d.fspl", index), stream) if err != nil && err != io.EOF{ test.Error("parser returned error: ", err) return } } tree := analyzer.Tree { } err := tree.Analyze(ast) if err != nil { test.Error("analyzer returned error: ", err) return } output := new(strings.Builder) err = NativeTarget().Generate(tree, output) if err != nil { test.Error("generator returned error: ", err) return } got := output.String() if got != correct { test.Logf("results do not match") test.Logf("got:\n%v", got) test.Logf("correct:\n%v", correct) test.Fail() } }