translator: improve test engine, starts compile tests separately

This commit is contained in:
Alexey Stepanov
2016-07-15 16:48:03 +03:00
parent d958125c4b
commit 25ebc88961
16 changed files with 45 additions and 64 deletions
+33 -6
View File
@@ -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)
-48
View File
@@ -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