From a2a93a383046c349d51475ba2e23d0b8609c1e9e Mon Sep 17 00:00:00 2001 From: Ilya Ryzhenkov Date: Wed, 28 May 2014 15:50:15 +0400 Subject: [PATCH] Fix String.dropWhile & String.takeWhile --- libraries/stdlib/src/generated/_Filtering.kt | 6 +++--- libraries/stdlib/test/text/StringJVMTest.kt | 10 ++++++---- .../tools/kotlin-stdlib-gen/src/templates/Filtering.kt | 6 +++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libraries/stdlib/src/generated/_Filtering.kt b/libraries/stdlib/src/generated/_Filtering.kt index 881dd979fc1..f6e08fa2531 100644 --- a/libraries/stdlib/src/generated/_Filtering.kt +++ b/libraries/stdlib/src/generated/_Filtering.kt @@ -354,7 +354,7 @@ public fun Stream.dropWhile(predicate: (T) -> Boolean): Stream { * Returns a list containing all elements except first elements that satisfy the given *predicate* */ public inline fun String.dropWhile(predicate: (Char) -> Boolean): String { - for (index in 0..length) + for (index in 0..length - 1) if (!predicate(get(index))) { return substring(index) } @@ -1240,10 +1240,10 @@ public fun Stream.takeWhile(predicate: (T) -> Boolean): Stream { * Returns a list containing first elements satisfying the given *predicate* */ public inline fun String.takeWhile(predicate: (Char) -> Boolean): String { - for (index in 0..length) + for (index in 0..length - 1) if (!predicate(get(index))) { return substring(0, index) } - return "" + return this } diff --git a/libraries/stdlib/test/text/StringJVMTest.kt b/libraries/stdlib/test/text/StringJVMTest.kt index b90a9c1ba24..528bb07f89c 100644 --- a/libraries/stdlib/test/text/StringJVMTest.kt +++ b/libraries/stdlib/test/text/StringJVMTest.kt @@ -240,8 +240,9 @@ class StringJVMTest { test fun dropWhile() { val data = "ab1cd2" - val result = data.dropWhile { it.isJavaLetter() } - assertEquals("1cd2", result) + assertEquals("1cd2", data.dropWhile { it.isJavaLetter() }) + assertEquals("", data.dropWhile { true }) + assertEquals("ab1cd2", data.dropWhile { false }) } test fun drop() { @@ -255,8 +256,9 @@ class StringJVMTest { test fun takeWhile() { val data = "ab1cd2" - val result = data.takeWhile { it.isJavaLetter() } - assertEquals("ab", result) + assertEquals("ab", data.takeWhile { it.isJavaLetter() }) + assertEquals("", data.takeWhile { false }) + assertEquals("ab1cd2", data.takeWhile { true }) } test fun take() { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt index 949ad834695..5a17166734d 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt @@ -113,7 +113,7 @@ fun filtering(): List { returns(Strings) { "String" } body(Strings) { """ - for (index in 0..length) + for (index in 0..length - 1) if (!predicate(get(index))) { return substring(index) } @@ -161,11 +161,11 @@ fun filtering(): List { returns(Strings) { "String" } body(Strings) { """ - for (index in 0..length) + for (index in 0..length - 1) if (!predicate(get(index))) { return substring(0, index) } - return "" + return this """ }