fspl/generator/test-common.go

51 lines
1.1 KiB
Go
Raw Normal View History

2023-11-17 03:04:56 +00:00
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
}
2023-11-23 06:26:14 +00:00
module, err := NativeTarget().Generate(tree)
if err != nil {
test.Error("generator returned error: ", err)
return
}
2023-11-17 03:04:56 +00:00
output := new(strings.Builder)
2023-11-23 06:26:14 +00:00
_, err = module.WriteTo(output)
2023-11-17 03:04:56 +00:00
if err != nil {
test.Error("generator returned error: ", err)
return
}
got := output.String()
2023-11-23 06:26:14 +00:00
if got != correct {
2023-11-17 03:04:56 +00:00
test.Logf("results do not match")
test.Logf("got:\n%v", got)
test.Logf("correct:\n%v", correct)
test.Fail()
}
}