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
|
mkdir src/test/kotlin/tests/linked
|
||||||
fi
|
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? {
|
private fun evaluateLeafPsiElement(element: LeafPsiElement, scopeDepth: Int): LLVMVariable? {
|
||||||
return when (element.elementType) {
|
return when (element.elementType) {
|
||||||
KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element, scopeDepth)
|
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(11) == 10
|
||||||
if_test_1(0)
|
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