2023-11-17 03:04:56 +00:00
|
|
|
package generator
|
|
|
|
|
|
|
|
import "io"
|
|
|
|
import "testing"
|
|
|
|
import "strings"
|
2024-02-09 09:02:55 +00:00
|
|
|
import "git.tebibyte.media/sashakoshka/fspl/lexer"
|
2023-11-17 03:04:56 +00:00
|
|
|
import "git.tebibyte.media/sashakoshka/fspl/analyzer"
|
2024-02-01 06:59:17 +00:00
|
|
|
import "git.tebibyte.media/sashakoshka/fspl/testcommon"
|
2024-02-13 18:12:53 +00:00
|
|
|
import "git.tebibyte.media/sashakoshka/fspl/parser/fspl"
|
2023-11-17 03:04:56 +00:00
|
|
|
|
|
|
|
func testString (test *testing.T, correct string, input string) {
|
2024-02-13 18:12:53 +00:00
|
|
|
ast := fsplParser.Tree { }
|
2024-02-09 09:02:55 +00:00
|
|
|
lx, err := lexer.LexReader("input.fspl", strings.NewReader(input))
|
|
|
|
if err != nil {
|
|
|
|
test.Error("lexer returned error:", err)
|
|
|
|
return
|
|
|
|
}
|
2024-02-14 06:44:25 +00:00
|
|
|
err = ast.Parse(fsplParser.UnitInfo { }, lx)
|
2024-01-28 19:46:47 +00:00
|
|
|
if err != nil && err != io.EOF{
|
|
|
|
test.Error("parser returned error:", err)
|
|
|
|
return
|
2023-11-17 03:04:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
tree := analyzer.Tree { }
|
2024-01-28 19:46:47 +00:00
|
|
|
err = tree.Analyze(ast)
|
2023-11-17 03:04:56 +00:00
|
|
|
if err != nil {
|
2023-11-26 09:02:22 +00:00
|
|
|
test.Error("analyzer returned error:", err)
|
2023-11-17 03:04:56 +00:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-12-01 06:18:10 +00:00
|
|
|
module, err := (&Target {
|
|
|
|
WordSize: 64,
|
|
|
|
Arch: "x86_64",
|
|
|
|
}).Generate(tree)
|
2023-11-23 06:26:14 +00:00
|
|
|
if err != nil {
|
2023-11-26 09:02:22 +00:00
|
|
|
test.Error("generator returned error:", err)
|
2023-11-23 06:26:14 +00:00
|
|
|
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 {
|
2023-11-26 09:02:22 +00:00
|
|
|
test.Error("generator returned error:", err)
|
2023-11-17 03:04:56 +00:00
|
|
|
return
|
|
|
|
}
|
2024-01-27 23:07:49 +00:00
|
|
|
|
2023-11-17 03:04:56 +00:00
|
|
|
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")
|
2024-02-01 06:59:17 +00:00
|
|
|
testcommon.Compare(test, correct, got)
|
2024-01-28 19:46:47 +00:00
|
|
|
test.Log("SOURCE FSPL CODE:")
|
|
|
|
test.Log("\033[32m" + input + "\033[0m")
|
2023-11-17 03:04:56 +00:00
|
|
|
test.Fail()
|
|
|
|
}
|
|
|
|
}
|