All tests for TCO moved to box (with diagnostics marked up)

This commit is contained in:
Andrey Breslav
2013-12-06 11:08:29 +04:00
parent 1849643e52
commit 71be3bcec5
19 changed files with 205 additions and 97 deletions
@@ -0,0 +1,10 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
tailRecursive fun Int.foo(x: Int) {
if (x == 0) return
return 1.foo(x - 1)
}
fun box(): String {
1.foo(1000000)
return "OK"
}
@@ -1,3 +1,8 @@
<!NO_TAIL_CALLS_FOUND!>tailRecursive fun noTails()<!> {
// nothing here
}
fun box(): String {
noTails()
return "OK"
}
@@ -1,12 +1,17 @@
tailRecursive fun badTails(x : Int) : Int {
if (x > 0) {
if (x < 50 && x != 10 && x > 0) {
return 1 + <!NON_TAIL_RECURSIVE_CALL!>badTails<!>(x - 1)
}
else if (x == 10) {
[suppress("NON_TAIL_RECURSIVE_CALL")]
return 1 + badTails(x - 1)
} else if (x == 50) {
} else if (x >= 50) {
return badTails(x - 1)
}
return 0
}
fun box(): String {
badTails(1000000)
return "OK"
}
@@ -3,4 +3,10 @@ fun withoutAnnotation(x : Int) : Int {
return 1 + withoutAnnotation(x - 1)
}
return 0
}
fun box(): String {
val r = withoutAnnotation(10)
if (r == 10) return "OK"
return "Fail $r"
}
@@ -0,0 +1,11 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
tailRecursive fun Int.foo(x: Int) {
if (x == 0) return
val xx = x - 1
return 1 foo xx
}
fun box(): String {
1 foo 1000000
return "OK"
}
@@ -5,4 +5,9 @@
}
}
fun run(a: Any) {}
fun run(a: Any) {}
fun box(): String {
foo()
return "OK"
}
@@ -2,4 +2,9 @@
fun bar() {
<!NON_TAIL_RECURSIVE_CALL!>foo<!>()
}
}
fun box(): String {
foo()
return "OK"
}
@@ -0,0 +1,9 @@
tailRecursive fun foo(x: Int) {
if (x == 0) return
(return foo(x - 1))
}
fun box(): String {
foo(1000000)
return "OK"
}
@@ -0,0 +1,11 @@
tailRecursive fun foo(x: Int) {
return if (x > 0) {
(foo(x - 1))
}
else Unit.VALUE
}
fun box(): String {
foo(1000000)
return "OK"
}
@@ -0,0 +1,9 @@
tailRecursive fun foo(x: Int) {
if (x == 0) return
return (foo(x - 1))
}
fun box(): String {
foo(1000000)
return "OK"
}
@@ -0,0 +1,15 @@
<!NO_TAIL_CALLS_FOUND!>tailRecursive fun test(go: Boolean) : Unit<!> {
if (!go) return
try {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>(false)
} catch (any : Exception) {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>(false)
} finally {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>(false)
}
}
fun box(): String {
test(true)
return "OK"
}
@@ -1,4 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
tailRecursive fun Int.foo(x: Int) {
return 1.foo(2)
}
@@ -1,4 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
tailRecursive fun Int.foo(x: Int) {
return 1 foo 2
}
@@ -1,3 +0,0 @@
tailRecursive fun foo() {
(return foo())
}
@@ -1,6 +0,0 @@
tailRecursive fun foo() {
return if (true) {
(foo())
}
else Unit.VALUE
}
@@ -1,3 +0,0 @@
tailRecursive fun foo() {
return (foo())
}
@@ -1,9 +0,0 @@
<!NO_TAIL_CALLS_FOUND!>tailRecursive fun test() : Unit<!> {
try {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>()
} catch (any : Exception) {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>()
} finally {
<!TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED!>test<!>()
}
}
@@ -33,7 +33,7 @@ import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve;
@InnerTestClasses({JetDiagnosticsTestGenerated.Tests.class, JetDiagnosticsTestGenerated.Script.class, JetDiagnosticsTestGenerated.TailRecursion.class})
public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEagerResolve {
@TestMetadata("compiler/testData/diagnostics/tests")
@InnerTestClasses({Tests.Annotations.class, Tests.BackingField.class, Tests.CallableReference.class, Tests.Cast.class, Tests.CheckArguments.class, Tests.ClassObjects.class, Tests.ControlFlowAnalysis.class, Tests.ControlStructures.class, Tests.DataClasses.class, Tests.DataFlow.class, Tests.DataFlowInfoTraversal.class, Tests.DeclarationChecks.class, Tests.DelegatedProperty.class, Tests.Deparenthesize.class, Tests.Enum.class, Tests.Evaluate.class, Tests.Extensions.class, Tests.FunctionLiterals.class, Tests.Generics.class, Tests.IncompleteCode.class, Tests.Inference.class, Tests.Infos.class, Tests.Inline.class, Tests.Inner.class, Tests.J_k.class, Tests.Jdk_annotations.class, Tests.Library.class, Tests.NullabilityAndAutoCasts.class, Tests.NullableTypes.class, Tests.Numbers.class, Tests.Objects.class, Tests.OperatorsOverloading.class, Tests.Overload.class, Tests.Override.class, Tests.Recovery.class, Tests.Redeclarations.class, Tests.Regressions.class, Tests.Resolve.class, Tests.Scopes.class, Tests.SenselessComparison.class, Tests.Shadowing.class, Tests.SmartCasts.class, Tests.Substitutions.class, Tests.Subtyping.class, Tests.Suppress.class, Tests.TailCalls.class, Tests.ThisAndSuper.class, Tests.Varargs.class, Tests.When.class})
@InnerTestClasses({Tests.Annotations.class, Tests.BackingField.class, Tests.CallableReference.class, Tests.Cast.class, Tests.CheckArguments.class, Tests.ClassObjects.class, Tests.ControlFlowAnalysis.class, Tests.ControlStructures.class, Tests.DataClasses.class, Tests.DataFlow.class, Tests.DataFlowInfoTraversal.class, Tests.DeclarationChecks.class, Tests.DelegatedProperty.class, Tests.Deparenthesize.class, Tests.Enum.class, Tests.Evaluate.class, Tests.Extensions.class, Tests.FunctionLiterals.class, Tests.Generics.class, Tests.IncompleteCode.class, Tests.Inference.class, Tests.Infos.class, Tests.Inline.class, Tests.Inner.class, Tests.J_k.class, Tests.Jdk_annotations.class, Tests.Library.class, Tests.NullabilityAndAutoCasts.class, Tests.NullableTypes.class, Tests.Numbers.class, Tests.Objects.class, Tests.OperatorsOverloading.class, Tests.Overload.class, Tests.Override.class, Tests.Recovery.class, Tests.Redeclarations.class, Tests.Regressions.class, Tests.Resolve.class, Tests.Scopes.class, Tests.SenselessComparison.class, Tests.Shadowing.class, Tests.SmartCasts.class, Tests.Substitutions.class, Tests.Subtyping.class, Tests.Suppress.class, Tests.ThisAndSuper.class, Tests.Varargs.class, Tests.When.class})
public static class Tests extends AbstractDiagnosticsTestWithEagerResolve {
@TestMetadata("Abstract.kt")
public void testAbstract() throws Exception {
@@ -6456,69 +6456,6 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
}
}
@TestMetadata("compiler/testData/diagnostics/tests/tailCalls")
public static class TailCalls extends AbstractDiagnosticsTestWithEagerResolve {
public void testAllFilesPresentInTailCalls() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/tailCalls"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("extensionTailCall.kt")
public void testExtensionTailCall() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/extensionTailCall.kt");
}
@TestMetadata("functionWithNoTails.kt")
public void testFunctionWithNoTails() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/functionWithNoTails.kt");
}
@TestMetadata("functionWithNonTailRecursions.kt")
public void testFunctionWithNonTailRecursions() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/functionWithNonTailRecursions.kt");
}
@TestMetadata("functionWithoutAnnotation.kt")
public void testFunctionWithoutAnnotation() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/functionWithoutAnnotation.kt");
}
@TestMetadata("infixRecursiveCall.kt")
public void testInfixRecursiveCall() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/infixRecursiveCall.kt");
}
@TestMetadata("recursiveCallInLambda.kt")
public void testRecursiveCallInLambda() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLambda.kt");
}
@TestMetadata("recursiveCallInLocalFunction.kt")
public void testRecursiveCallInLocalFunction() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLocalFunction.kt");
}
@TestMetadata("returnInParentheses.kt")
public void testReturnInParentheses() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/returnInParentheses.kt");
}
@TestMetadata("tailCallInBlockInParentheses.kt")
public void testTailCallInBlockInParentheses() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/tailCallInBlockInParentheses.kt");
}
@TestMetadata("tailCallInParentheses.kt")
public void testTailCallInParentheses() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/tailCallInParentheses.kt");
}
@TestMetadata("tailRecursionInFinally.kt")
public void testTailRecursionInFinally() throws Exception {
doTest("compiler/testData/diagnostics/tests/tailCalls/tailRecursionInFinally.kt");
}
}
@TestMetadata("compiler/testData/diagnostics/tests/thisAndSuper")
public static class ThisAndSuper extends AbstractDiagnosticsTestWithEagerResolve {
public void testAllFilesPresentInThisAndSuper() throws Exception {
@@ -6751,7 +6688,6 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
suite.addTestSuite(Substitutions.class);
suite.addTestSuite(Subtyping.class);
suite.addTest(Suppress.innerSuite());
suite.addTestSuite(TailCalls.class);
suite.addTestSuite(ThisAndSuper.class);
suite.addTestSuite(Varargs.class);
suite.addTestSuite(When.class);
@@ -6798,11 +6734,36 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/codegen/box/functions/tailRecursion/defaultArgs.kt");
}
@TestMetadata("extensionTailCall.kt")
public void testExtensionTailCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/extensionTailCall.kt");
}
@TestMetadata("functionWithNoTails.kt")
public void testFunctionWithNoTails() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithNoTails.kt");
}
@TestMetadata("functionWithNonTailRecursions.kt")
public void testFunctionWithNonTailRecursions() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithNonTailRecursions.kt");
}
@TestMetadata("functionWithoutAnnotation.kt")
public void testFunctionWithoutAnnotation() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithoutAnnotation.kt");
}
@TestMetadata("infixCall.kt")
public void testInfixCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt");
}
@TestMetadata("infixRecursiveCall.kt")
public void testInfixRecursiveCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/infixRecursiveCall.kt");
}
@TestMetadata("insideElvis.kt")
public void testInsideElvis() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/insideElvis.kt");
@@ -6838,6 +6799,16 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/codegen/box/functions/tailRecursion/realStringRepeat.kt");
}
@TestMetadata("recursiveCallInLambda.kt")
public void testRecursiveCallInLambda() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveCallInLambda.kt");
}
@TestMetadata("recursiveCallInLocalFunction.kt")
public void testRecursiveCallInLocalFunction() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveCallInLocalFunction.kt");
}
@TestMetadata("recursiveInnerFunction.kt")
public void testRecursiveInnerFunction() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveInnerFunction.kt");
@@ -6863,6 +6834,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInIfInFinally.kt");
}
@TestMetadata("returnInParentheses.kt")
public void testReturnInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInParentheses.kt");
}
@TestMetadata("returnInTry.kt")
public void testReturnInTry() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInTry.kt");
@@ -6888,6 +6864,21 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/codegen/box/functions/tailRecursion/sum.kt");
}
@TestMetadata("tailCallInBlockInParentheses.kt")
public void testTailCallInBlockInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailCallInBlockInParentheses.kt");
}
@TestMetadata("tailCallInParentheses.kt")
public void testTailCallInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailCallInParentheses.kt");
}
@TestMetadata("tailRecursionInFinally.kt")
public void testTailRecursionInFinally() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailRecursionInFinally.kt");
}
@TestMetadata("thisReferences.kt")
public void testThisReferences() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/thisReferences.kt");
@@ -2634,11 +2634,36 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest("compiler/testData/codegen/box/functions/tailRecursion/defaultArgs.kt");
}
@TestMetadata("extensionTailCall.kt")
public void testExtensionTailCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/extensionTailCall.kt");
}
@TestMetadata("functionWithNoTails.kt")
public void testFunctionWithNoTails() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithNoTails.kt");
}
@TestMetadata("functionWithNonTailRecursions.kt")
public void testFunctionWithNonTailRecursions() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithNonTailRecursions.kt");
}
@TestMetadata("functionWithoutAnnotation.kt")
public void testFunctionWithoutAnnotation() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/functionWithoutAnnotation.kt");
}
@TestMetadata("infixCall.kt")
public void testInfixCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt");
}
@TestMetadata("infixRecursiveCall.kt")
public void testInfixRecursiveCall() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/infixRecursiveCall.kt");
}
@TestMetadata("insideElvis.kt")
public void testInsideElvis() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/insideElvis.kt");
@@ -2674,6 +2699,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest("compiler/testData/codegen/box/functions/tailRecursion/realStringRepeat.kt");
}
@TestMetadata("recursiveCallInLambda.kt")
public void testRecursiveCallInLambda() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveCallInLambda.kt");
}
@TestMetadata("recursiveCallInLocalFunction.kt")
public void testRecursiveCallInLocalFunction() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveCallInLocalFunction.kt");
}
@TestMetadata("recursiveInnerFunction.kt")
public void testRecursiveInnerFunction() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveInnerFunction.kt");
@@ -2699,6 +2734,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInIfInFinally.kt");
}
@TestMetadata("returnInParentheses.kt")
public void testReturnInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInParentheses.kt");
}
@TestMetadata("returnInTry.kt")
public void testReturnInTry() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInTry.kt");
@@ -2724,6 +2764,21 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest("compiler/testData/codegen/box/functions/tailRecursion/sum.kt");
}
@TestMetadata("tailCallInBlockInParentheses.kt")
public void testTailCallInBlockInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailCallInBlockInParentheses.kt");
}
@TestMetadata("tailCallInParentheses.kt")
public void testTailCallInParentheses() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailCallInParentheses.kt");
}
@TestMetadata("tailRecursionInFinally.kt")
public void testTailRecursionInFinally() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/tailRecursionInFinally.kt");
}
@TestMetadata("thisReferences.kt")
public void testThisReferences() throws Exception {
doTest("compiler/testData/codegen/box/functions/tailRecursion/thisReferences.kt");