From bb6ceffbbb90d9c51f0fb3458bbd8e2d06af6e40 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 5 Dec 2013 21:06:29 +0400 Subject: [PATCH] Missing tests added --- .../box/functions/tailRecursion/infixCall.kt | 8 +++++ .../box/functions/tailRecursion/returnIf.kt | 12 +++++++ .../tests/tailCalls/extensionTailCall.kt | 4 +++ .../tests/tailCalls/infixRecursiveCall.kt | 4 +++ .../tests/tailCalls/recursiveCallInLambda.kt | 8 +++++ .../tailCalls/recursiveCallInLocalFunction.kt | 5 +++ .../tests/tailCalls/returnInParentheses.kt | 3 ++ .../tailCalls/tailCallInBlockInParentheses.kt | 6 ++++ .../tests/tailCalls/tailCallInParentheses.kt | 3 ++ .../checkers/JetDiagnosticsTestGenerated.java | 35 +++++++++++++++++++ .../TailRecursionDetectorTestGenerated.java | 10 ++++++ .../BlackBoxCodegenTestGenerated.java | 10 ++++++ 12 files changed, 108 insertions(+) create mode 100644 compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt create mode 100644 compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/extensionTailCall.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/infixRecursiveCall.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLambda.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLocalFunction.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/returnInParentheses.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/tailCallInBlockInParentheses.kt create mode 100644 compiler/testData/diagnostics/tests/tailCalls/tailCallInParentheses.kt diff --git a/compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt b/compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt new file mode 100644 index 00000000000..30b97057ad3 --- /dev/null +++ b/compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt @@ -0,0 +1,8 @@ +tailRecursive fun Int.test(x : Int) : Int { + if (this > 1) { + return (this - 1) test x + } + return this +} + +fun box() : String = if (1000000.test(1000000) == 1) "OK" else "FAIL" \ No newline at end of file diff --git a/compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt b/compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt new file mode 100644 index 00000000000..6a6b85964c6 --- /dev/null +++ b/compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt @@ -0,0 +1,12 @@ +tailRecursive fun test(x : Int) : Int { + return if (x == 1) { + test(x - 1) + 1 + test(x - 1) + } else if (x > 0) { + test(x - 1) + } else { + 0 + } +} + +fun box() : String = if (test(1000000) == 1) "OK" else "FAIL" \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/extensionTailCall.kt b/compiler/testData/diagnostics/tests/tailCalls/extensionTailCall.kt new file mode 100644 index 00000000000..e15e51e06c0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/extensionTailCall.kt @@ -0,0 +1,4 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +tailRecursive fun Int.foo(x: Int) { + return 1.foo(2) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/infixRecursiveCall.kt b/compiler/testData/diagnostics/tests/tailCalls/infixRecursiveCall.kt new file mode 100644 index 00000000000..9bc8b071873 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/infixRecursiveCall.kt @@ -0,0 +1,4 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +tailRecursive fun Int.foo(x: Int) { + return 1 foo 2 +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLambda.kt b/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLambda.kt new file mode 100644 index 00000000000..929910effb9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLambda.kt @@ -0,0 +1,8 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +tailRecursive fun foo() { + run { + foo() + } +} + +fun run(a: Any) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLocalFunction.kt b/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLocalFunction.kt new file mode 100644 index 00000000000..b8ced88f0c3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/recursiveCallInLocalFunction.kt @@ -0,0 +1,5 @@ +tailRecursive fun foo() { + fun bar() { + foo() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/returnInParentheses.kt b/compiler/testData/diagnostics/tests/tailCalls/returnInParentheses.kt new file mode 100644 index 00000000000..3c715674e65 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/returnInParentheses.kt @@ -0,0 +1,3 @@ +tailRecursive fun foo() { + (return foo()) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/tailCallInBlockInParentheses.kt b/compiler/testData/diagnostics/tests/tailCalls/tailCallInBlockInParentheses.kt new file mode 100644 index 00000000000..f7333e21184 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/tailCallInBlockInParentheses.kt @@ -0,0 +1,6 @@ +tailRecursive fun foo() { + return if (true) { + (foo()) + } + else Unit.VALUE +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/tailCalls/tailCallInParentheses.kt b/compiler/testData/diagnostics/tests/tailCalls/tailCallInParentheses.kt new file mode 100644 index 00000000000..cc42dc712f5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/tailCalls/tailCallInParentheses.kt @@ -0,0 +1,3 @@ +tailRecursive fun foo() { + return (foo()) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 681e2b7a6e6..559a355cd04 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -6462,6 +6462,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage 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"); @@ -6477,6 +6482,36 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage 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"); diff --git a/compiler/tests/org/jetbrains/jet/checkers/TailRecursionDetectorTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/TailRecursionDetectorTestGenerated.java index 9ccfcaca53f..63f9e2377af 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/TailRecursionDetectorTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/TailRecursionDetectorTestGenerated.java @@ -41,6 +41,11 @@ public class TailRecursionDetectorTestGenerated extends AbstractTailRecursionTes doTest("compiler/testData/codegen/box/functions/tailRecursion/defaultArgs.kt"); } + @TestMetadata("infixCall.kt") + public void testInfixCall() throws Exception { + doTest("compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt"); + } + @TestMetadata("insideElvis.kt") public void testInsideElvis() throws Exception { doTest("compiler/testData/codegen/box/functions/tailRecursion/insideElvis.kt"); @@ -81,6 +86,11 @@ public class TailRecursionDetectorTestGenerated extends AbstractTailRecursionTes doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveInnerFunction.kt"); } + @TestMetadata("returnIf.kt") + public void testReturnIf() throws Exception { + doTest("compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt"); + } + @TestMetadata("returnInCatch.kt") public void testReturnInCatch() throws Exception { doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInCatch.kt"); diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 3bb6185ffa8..a297b99e3fb 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -2634,6 +2634,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/functions/tailRecursion/defaultArgs.kt"); } + @TestMetadata("infixCall.kt") + public void testInfixCall() throws Exception { + doTest("compiler/testData/codegen/box/functions/tailRecursion/infixCall.kt"); + } + @TestMetadata("insideElvis.kt") public void testInsideElvis() throws Exception { doTest("compiler/testData/codegen/box/functions/tailRecursion/insideElvis.kt"); @@ -2674,6 +2679,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/functions/tailRecursion/recursiveInnerFunction.kt"); } + @TestMetadata("returnIf.kt") + public void testReturnIf() throws Exception { + doTest("compiler/testData/codegen/box/functions/tailRecursion/returnIf.kt"); + } + @TestMetadata("returnInCatch.kt") public void testReturnInCatch() throws Exception { doTest("compiler/testData/codegen/box/functions/tailRecursion/returnInCatch.kt");