translator: improve test engine, starts compile tests separately
This commit is contained in:
+33
-6
@@ -3,13 +3,40 @@ if [ ! -d "src/test/kotlin/tests/linked" ]; then
|
||||
mkdir src/test/kotlin/tests/linked
|
||||
fi
|
||||
|
||||
rm -f src/test/kotlin/tests/linked/*
|
||||
DIRECTORY="src/test/kotlin/tests"
|
||||
MAIN="$DIRECTORY/linked/main.c"
|
||||
for i in $( ls "$DIRECTORY/input"); do
|
||||
rm -f $DIRECTORY/linked/*
|
||||
TEST=`basename $i ".txt"`
|
||||
echo test: $TEST
|
||||
echo "#include <stdlib.h>" >> $MAIN
|
||||
echo "#include <stdio.h>" >> $MAIN
|
||||
echo "#include <assert.h>" >> $MAIN
|
||||
|
||||
/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7540 -Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/test:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain TestmainKt
|
||||
echo "int main(){" >> $MAIN
|
||||
cat "$DIRECTORY/input/$i" | while read LINE
|
||||
do
|
||||
echo " assert($LINE);" >> $MAIN
|
||||
echo " printf(\"OK: $LINE\n\");" >> $MAIN
|
||||
done
|
||||
|
||||
echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN
|
||||
|
||||
|
||||
echo "return 0;}" >> $MAIN
|
||||
|
||||
clang -S -emit-llvm $DIRECTORY/linked/main.c -o $DIRECTORY/linked/main.ll -Wno-implicit-function-declaration
|
||||
rm -f $DIRECTORY/linked/main.c
|
||||
|
||||
if [ -f "$DIRECTORY/c/$TEST.c" ]
|
||||
then
|
||||
clang -S -emit-llvm "$DIRECTORY/c/$TEST.c" -o $DIRECTORY/linked/$TEST"_c.ll" -Wno-implicit-function-declaration
|
||||
fi
|
||||
|
||||
/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7533 -Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain MainKt $DIRECTORY/kotlin/$TEST.kt > $DIRECTORY/linked/$TEST.ll
|
||||
llvm-link $DIRECTORY/linked/* > $DIRECTORY/linked/run.ll
|
||||
lli $DIRECTORY/linked/run.ll
|
||||
|
||||
done
|
||||
|
||||
|
||||
cd src/test/kotlin/tests/linked
|
||||
rm -f main.c
|
||||
llvm-link * > run.ll
|
||||
lli run.ll
|
||||
|
||||
@@ -335,6 +335,10 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction
|
||||
}
|
||||
}
|
||||
|
||||
private fun evaluateTypeReferenceAssignment(type: KtUserType, expr: KtConstantExpression) {
|
||||
|
||||
}
|
||||
|
||||
private fun evaluateLeafPsiElement(element: LeafPsiElement, scopeDepth: Int): LLVMVariable? {
|
||||
return when (element.elementType) {
|
||||
KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element, scopeDepth)
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
import java.io.InputStreamReader
|
||||
|
||||
val directory = "src/test/kotlin/tests"
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val mainFileWriter = File("$directory/linked/main.c").printWriter()
|
||||
mainFileWriter.println("#include <stdlib.h>\n" +
|
||||
"#include <stdio.h>\n" +
|
||||
"#include <assert.h>\n\n");
|
||||
|
||||
|
||||
mainFileWriter.println("\n")
|
||||
mainFileWriter.println("int main(){")
|
||||
|
||||
for (input in File("$directory/input").listFiles()) {
|
||||
val inputLine = input.readLines()
|
||||
val outputLine = File("$directory/output/" + input.name).readLines()
|
||||
|
||||
for (line in 0..inputLine.count() - 1) {
|
||||
mainFileWriter.println("\tassert (${inputLine.get(line)} == ${outputLine.get(line)} );")
|
||||
mainFileWriter.println("\tprintf(\"OK: ${inputLine.get(line)} == ${outputLine.get(line)} \\n\");")
|
||||
}
|
||||
}
|
||||
mainFileWriter.println("printf(\"TEST RESULT: OK\\n\");")
|
||||
mainFileWriter.println("\treturn 0;")
|
||||
mainFileWriter.println("}")
|
||||
mainFileWriter.flush()
|
||||
|
||||
|
||||
Runtime.getRuntime().exec("clang -S -emit-llvm $directory/linked/main.c -o $directory/linked/main.ll").waitFor()
|
||||
Runtime.getRuntime().exec("rm -f $directory/linked/main.c").waitFor()
|
||||
|
||||
for (file in File("$directory/source").listFiles()) {
|
||||
val res = Runtime.getRuntime().exec("/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7539 " +
|
||||
"-Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 " +
|
||||
"-classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar " +
|
||||
"com.intellij.rt.execution.application.AppMain MainKt " + file.absoluteFile)
|
||||
res.waitFor()
|
||||
val reader = BufferedReader(InputStreamReader(res.getInputStream()))
|
||||
val currentFileWriter = File("$directory/linked/" + file.nameWithoutExtension + ".ll").printWriter()
|
||||
for (line in reader.lines()) {
|
||||
currentFileWriter.println(line)
|
||||
}
|
||||
currentFileWriter.flush()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
int link_example(){
|
||||
return 5;
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
if_test_1(11)
|
||||
if_test_1(0)
|
||||
if_test_1(11) == 10
|
||||
if_test_1(0) == 0
|
||||
|
||||
@@ -1 +1 @@
|
||||
return_test_1(101)
|
||||
return_test_1(101) == 101
|
||||
|
||||
@@ -1 +1 @@
|
||||
while_test_1(6)
|
||||
while_test_1(6) == 10
|
||||
|
||||
@@ -1 +1 @@
|
||||
while_test_2(77)
|
||||
while_test_2(77) == 78
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
10
|
||||
0
|
||||
@@ -1 +0,0 @@
|
||||
101
|
||||
@@ -1 +0,0 @@
|
||||
10
|
||||
@@ -1 +0,0 @@
|
||||
78
|
||||
Reference in New Issue
Block a user