translator: add support parallel run tests, rearrangement test files
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
||||
.idea/shelf
|
||||
dependencies
|
||||
dist
|
||||
translator/src/test/kotlin/tests/linked
|
||||
translator/src/test/kotlin/tests/*/linked
|
||||
out
|
||||
tmp
|
||||
workspace.xml
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
DIRECTORY = "src/test/kotlin/tests"
|
||||
OUTPUT = $(shell ls ${DIRECTORY}/*/*.txt)
|
||||
OBJECTS = $(OUTPUT:.txt=.out)
|
||||
green = '\033[0;32m'
|
||||
red = '\033[0;31m'
|
||||
lightRed = '\033[1;31m'
|
||||
orange = '\033[0;33m'
|
||||
nc = '\033[0m'
|
||||
|
||||
|
||||
%.out: %.txt
|
||||
@./run_one_test.sh $(@:.out=.txt)
|
||||
|
||||
all: $(OBJECTS)
|
||||
@echo "ok"
|
||||
|
||||
.PHONY: all
|
||||
Executable
+76
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
green='\033[0;32m'
|
||||
red='\033[0;31m'
|
||||
lightRed='\033[1;31m'
|
||||
orange='\033[0;33m'
|
||||
|
||||
cd ../translator
|
||||
|
||||
i=$1
|
||||
TEST=`basename $i ".txt"`
|
||||
DIRECTORY="src/test/kotlin/tests"
|
||||
MAIN="$DIRECTORY/$TEST/linked/main.c"
|
||||
rm -f $DIRECTORY/$TEST/linked/*
|
||||
|
||||
echo "#include <stdlib.h>" >> $MAIN
|
||||
echo "#include <stdio.h>" >> $MAIN
|
||||
echo "#include <assert.h>" >> $MAIN
|
||||
|
||||
echo "int main(){" >> $MAIN
|
||||
echo "printf(\"%stest: $TEST%s\n\", \"\x1B[33m\", \"\x1B[0m\");" >> $MAIN
|
||||
cat "$i" | while read LINE
|
||||
do
|
||||
echo " assert($LINE);" >> $MAIN
|
||||
echo " printf(\"%s[OK]:%s $LINE\n\", \"\x1B[32m\", \"\x1B[0m\");" >> $MAIN
|
||||
done
|
||||
|
||||
echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN
|
||||
echo "return 0;}" >> $MAIN
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Error somewhere in main.c generation${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Error building main.c${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$DIRECTORY/$TEST/$TEST.c" ]
|
||||
then
|
||||
clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}"
|
||||
fi
|
||||
fi
|
||||
|
||||
java -jar build/libs/translator-1.0.jar -I ../kotstd/include $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}"
|
||||
fi
|
||||
|
||||
llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${red}Error linking with llvm${nc}"
|
||||
fi
|
||||
|
||||
lli-3.6 $DIRECTORY/$TEST/linked/run.ll
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo -e "${lightRed}Error running test${nc}"
|
||||
fi
|
||||
+16
-24
@@ -5,15 +5,6 @@ lightRed='\033[1;31m'
|
||||
orange='\033[0;33m'
|
||||
nc='\033[0m'
|
||||
|
||||
if [ ! -d "src/test/kotlin/tests/linked" ]; then
|
||||
mkdir -p "src/test/kotlin/tests/linked"
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Error creating folder \"src/test/kotlin/tests/linked\"${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$3" == "--debug" ]; then
|
||||
cd ../kotstd && make clean && make debug
|
||||
else
|
||||
@@ -28,18 +19,18 @@ fi
|
||||
cd ../translator
|
||||
|
||||
DIRECTORY="src/test/kotlin/tests"
|
||||
MAIN="$DIRECTORY/linked/main.c"
|
||||
TESTS=$( ls $DIRECTORY/input/* $1) # Note that "ls $DIRECTORY/input $1" is wrong. Why? Because it's bash.
|
||||
TESTS=$( ls $DIRECTORY/*/*.txt $1) # Note that "ls $DIRECTORY/input $1" is wrong. Why? Because it's bash.
|
||||
|
||||
if [ "$2" == "--proto" ]; then
|
||||
TESTS=$( ls $DIRECTORY/input/proto* $1)
|
||||
TESTS=$( ls $DIRECTORY/*/proto*.txt $1)
|
||||
fi
|
||||
total_scripts=0
|
||||
successful_scripts=0
|
||||
|
||||
for i in $TESTS; do
|
||||
rm -f $DIRECTORY/linked/*
|
||||
TEST=`basename $i ".txt"`
|
||||
TEST=`basename $i ".txt"`
|
||||
MAIN="$DIRECTORY/$TEST/linked/main.c"
|
||||
rm -f $DIRECTORY/$TEST/linked/*
|
||||
successful=1
|
||||
echo -e "${orange}test: ${TEST}${nc}"
|
||||
echo "#include <stdlib.h>" >> $MAIN
|
||||
@@ -61,40 +52,41 @@ for i in $TESTS; do
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clang-3.6 -S -emit-llvm $DIRECTORY/linked/main.c -o $DIRECTORY/linked/main.ll -Wno-implicit-function-declaration
|
||||
clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Error building main.c${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/linked/
|
||||
cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/linked/${nc}"
|
||||
echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$DIRECTORY/c/$TEST.c" ]
|
||||
if [ -f "$DIRECTORY/$TEST/$TEST.c" ]
|
||||
then
|
||||
clang-3.6 -S -emit-llvm "$DIRECTORY/c/$TEST.c" -o $DIRECTORY/linked/$TEST"_c.ll" -Wno-implicit-function-declaration
|
||||
clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Error building: ${DIRECTORY}/linked/${TEST}_c.ll${nc}"
|
||||
echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}"
|
||||
fi
|
||||
fi
|
||||
|
||||
java -jar build/libs/translator-1.0.jar -I ../kotstd/include $DIRECTORY/kotlin/$TEST.kt > $DIRECTORY/linked/$TEST.ll
|
||||
java -jar build/libs/translator-1.0.jar -I ../kotstd/include $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Translation error: ${DIRECTORY}/kotlin/${TEST}.kt${nc}"
|
||||
echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}"
|
||||
successful=0
|
||||
fi
|
||||
|
||||
llvm-link-3.6 -S $DIRECTORY/linked/*.ll > $DIRECTORY/linked/run.ll
|
||||
llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}Error linking with llvm${nc}"
|
||||
successful=0
|
||||
fi
|
||||
|
||||
lli-3.6 $DIRECTORY/linked/run.ll
|
||||
lli-3.6 $DIRECTORY/$TEST/linked/run.ll
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${lightRed}Error running test${nc}"
|
||||
successful=0
|
||||
|
||||
@@ -34,7 +34,6 @@ abstract class StructCodegen(val state: TranslationState,
|
||||
var methods = HashMap<String, FunctionCodegen>()
|
||||
abstract val structName: String
|
||||
val fullName: String
|
||||
//get() = "${if (type.location.size > 0) "${type.location.joinToString(".")}." else ""}$structName"
|
||||
get() = structName
|
||||
|
||||
open fun prepareForGenerate() {
|
||||
@@ -106,8 +105,6 @@ abstract class StructCodegen(val state: TranslationState,
|
||||
enumFields.put(name, field)
|
||||
}
|
||||
is KtClass -> {
|
||||
//declaration.fqName?.asString() ?: declaration.name!!
|
||||
//declaration.fqName!!.asString()
|
||||
nestedClasses.put(declaration.fqName!!.asString(),
|
||||
ClassCodegen(state,
|
||||
VariableManager(state.globalVariableCollection),
|
||||
@@ -176,7 +173,6 @@ abstract class StructCodegen(val state: TranslationState,
|
||||
|
||||
private fun generatePrimaryConstructor() {
|
||||
val argFields = ArrayList<LLVMVariable>()
|
||||
|
||||
val classVal = LLVMVariable("classvariable.this", type, pointer = 1)
|
||||
variableManager.addVariable("this", classVal, 0)
|
||||
|
||||
@@ -253,17 +249,10 @@ abstract class StructCodegen(val state: TranslationState,
|
||||
|
||||
protected fun resolveType(field: KtNamedDeclaration, ktType: KotlinType): LLVMClassVariable {
|
||||
val annotations = parseFieldAnnotations(field)
|
||||
/*val fieldName = when(field) {
|
||||
is KtParameter->
|
||||
else ->
|
||||
}*/
|
||||
|
||||
//}
|
||||
val fieldName = state.bindingContext.get(BindingContext.VALUE_PARAMETER, field as?KtParameter)?.fqNameSafe?.asString()?.replace(".<init>", "")
|
||||
?: field.fqName?.asString() ?: field.name!!
|
||||
|
||||
val result = LLVMInstanceOfStandardType(fieldName, ktType, LLVMRegisterScope(), state = state)
|
||||
//throw RuntimeException("Unknown field " + field.name!!)
|
||||
|
||||
if (result.type is LLVMReferenceType) {
|
||||
val type = result.type as LLVMReferenceType
|
||||
|
||||
@@ -36,8 +36,7 @@ fun LLVMInstanceOfStandardType(name: String, type: KotlinType, scope: LLVMScope
|
||||
else -> {
|
||||
val declarationDescriptor = type.constructor.declarationDescriptor!!
|
||||
val refName = declarationDescriptor.fqNameSafe.asString()
|
||||
val targetPackage = declarationDescriptor.fqNameSafe.parent().asString()
|
||||
val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(refName, packageName = targetPackage, align = TranslationState.pointerAlign, prefix = "class")
|
||||
val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(refName, align = TranslationState.pointerAlign, prefix = "class")
|
||||
|
||||
val result = LLVMVariable(name, refType, name, scope, pointer = 1)
|
||||
var currentPrefix = ""
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
|
||||
class LLVMBooleanType() : LLVMType("kotlin") {
|
||||
class LLVMBooleanType() : LLVMType() {
|
||||
|
||||
//TODO switch by types: int + double = int
|
||||
override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.kotlinnative.translator.llvm.types
|
||||
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
class LLVMByteType() : LLVMType("kotlin") {
|
||||
class LLVMByteType() : LLVMType() {
|
||||
override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp")
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.kotlinnative.translator.llvm.types
|
||||
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
class LLVMCharType() : LLVMType("kotlin") {
|
||||
class LLVMCharType() : LLVMType() {
|
||||
override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp")
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
|
||||
class LLVMDoubleType() : LLVMType("kotlin") {
|
||||
class LLVMDoubleType() : LLVMType() {
|
||||
|
||||
//TODO switch by types: int + double = int
|
||||
override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
|
||||
class LLVMFloatType() : LLVMType("kotlin") {
|
||||
class LLVMFloatType() : LLVMType() {
|
||||
|
||||
//TODO switch by types: int + double = int
|
||||
override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
|
||||
class LLVMIntType() : LLVMType("kotlin") {
|
||||
class LLVMIntType() : LLVMType() {
|
||||
|
||||
override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
LLVMExpression(LLVMIntType(), "or i32 $firstOp, $secondOp")
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
|
||||
class LLVMLongType() : LLVMType("kotlin") {
|
||||
class LLVMLongType() : LLVMType() {
|
||||
|
||||
override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
LLVMExpression(LLVMLongType(), "or i64 $firstOp, $secondOp")
|
||||
|
||||
+1
-2
@@ -9,8 +9,7 @@ class LLVMReferenceType(val type: String,
|
||||
var prefix: String = "",
|
||||
override var align: Int = TranslationState.pointerAlign,
|
||||
override var size: Int = TranslationState.pointerSize,
|
||||
packageName: String = "",
|
||||
var byRef: Boolean = true) : LLVMReferred, LLVMType(packageName) {
|
||||
var byRef: Boolean = true) : LLVMReferred, LLVMType() {
|
||||
|
||||
override val defaultValue: String = "null"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.kotlinnative.translator.llvm.types
|
||||
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
class LLVMShortType() : LLVMType("kotlin") {
|
||||
class LLVMShortType() : LLVMType() {
|
||||
override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||
LLVMExpression(LLVMBooleanType(), "icmp slt i16 $firstOp, $secondOp")
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.kotlinnative.translator.llvm.types
|
||||
|
||||
class LLVMStringType(override val length: Int, var isLoaded: Boolean = true) : LLVMArray, LLVMType("kotlin") {
|
||||
class LLVMStringType(override val length: Int, var isLoaded: Boolean = true) : LLVMArray, LLVMType() {
|
||||
|
||||
override var size: Int = 1
|
||||
override val align = 8
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.kotlinnative.translator.exceptions.UnimplementedException
|
||||
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||
|
||||
abstract class LLVMType(val packageName: String = "") : Cloneable {
|
||||
abstract class LLVMType() : Cloneable {
|
||||
|
||||
open fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||
open fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user