fspl/generator/test-common.go

49 lines
1.1 KiB
Go

package generator
import "io"
import "testing"
import "strings"
import "git.tebibyte.media/sashakoshka/fspl/parser"
import "git.tebibyte.media/sashakoshka/fspl/analyzer"
import "git.tebibyte.media/sashakoshka/fspl/testcommon"
func testString (test *testing.T, correct string, input string) {
ast := parser.Tree { }
err := ast.Parse("input.fspl", strings.NewReader(input))
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
}
module, err := (&Target {
WordSize: 64,
Arch: "x86_64",
}).Generate(tree)
if err != nil {
test.Error("generator returned error:", err)
return
}
output := new(strings.Builder)
_, err = module.WriteTo(output)
if err != nil {
test.Error("generator returned error:", err)
return
}
got := output.String()
if got != correct {
test.Logf("results do not match")
testcommon.Compare(test, correct, got)
test.Log("SOURCE FSPL CODE:")
test.Log("\033[32m" + input + "\033[0m")
test.Fail()
}
}