fixed mapping sort and max functions from java.util.Collections

This commit is contained in:
Zalim Bashorov
2013-03-06 18:47:04 +04:00
parent dd7d584478
commit 220682afe2
9 changed files with 135 additions and 54 deletions
-48
View File
@@ -1,48 +0,0 @@
package java.util
import java.lang.*
public object Collections {
library("collectionsMax")
public fun max<T>(col : Collection<T>, comp : Comparator<T>) : T = js.noImpl
// TODO should be immutable!
library
public val emptyList: List<Any> = ArrayList<Any>()
library
public val emptyMap: Map<Any, Any> = HashMap<Any,Any>()
library
public val <T> EMPTY_LIST: List<T>
get() = emptyList<T>()
library
public val <K,V> EMPTY_MAP: Map<K,V>
get() = emptyMap<K,V>()
library
public fun <T> emptyList(): List<T> = emptyList as List<T>
library
public fun <K,V> emptyMap(): Map<K,V> = emptyMap as Map<K,V>
library
public fun <T> sort(list: MutableList<T>): Unit {
throw UnsupportedOperationException()
}
library("sortWithComp")
public fun <T> sort(list: MutableList<T>, comparator: java.util.Comparator<T>): Unit {
throw UnsupportedOperationException()
}
library
public fun <T> reverse(list: MutableList<T>): Unit {
val size = list.size()
for (i in 0.rangeTo(size / 2)) {
val i2 = size - i
val tmp = list[i]
list[i] = list[i2]
list[i2] = tmp
}
}
}
@@ -0,0 +1,13 @@
package java.util.Collections
import java.lang.*
import java.util.*
library("collectionsMax")
public fun max<T>(col : Collection<T>, comp : Comparator<T>) : T = js.noImpl
library("collectionsSort")
public fun <T> sort(list: MutableList<T>): Unit = js.noImpl
library("collectionsSort")
public fun <T> sort(list: MutableList<T>, comparator: java.util.Comparator<T>): Unit = js.noImpl
@@ -0,0 +1,34 @@
package java.util.Collections
import java.lang.*
import java.util.*
// TODO should be immutable!
library
public val emptyList: List<Any> = ArrayList<Any>()
library
public val emptyMap: Map<Any, Any> = HashMap<Any,Any>()
library
public val <T> EMPTY_LIST: List<T>
get() = emptyList<T>()
library
public val <K,V> EMPTY_MAP: Map<K,V>
get() = emptyMap<K,V>()
library
public fun <T> emptyList(): List<T> = emptyList as List<T>
library
public fun <K,V> emptyMap(): Map<K,V> = emptyMap as Map<K,V>
library
public fun <T> reverse(list: MutableList<T>): Unit {
val size = list.size()
for (i in 0.rangeTo(size / 2)) {
val i2 = size - i
val tmp = list[i]
list[i] = list[i2]
list[i2] = tmp
}
}
@@ -0,0 +1,26 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.k2js.test.semantics;
import junit.framework.Test;
@SuppressWarnings("JUnitTestCaseWithNoTests")
public final class StdLibJavaUtilCollectionsTest extends JsUnitTestBase {
public static Test suite() throws Exception {
return createTestSuiteForFile("libraries/stdlib/test/js/javautilCollectionsTest.kt");
}
}
@@ -65,6 +65,7 @@ public abstract class Config {
"/core/javaio.kt",
"/core/javalang.kt",
"/core/javautil.kt",
"/core/javautilCollections.kt",
"/core/json.kt",
"/core/kotlin.kt",
"/core/math.kt",
@@ -83,7 +84,7 @@ public abstract class Config {
@NotNull
public static final List<String> LIB_FILES_WITH_CODE = Arrays.asList(
"/stdlib/TuplesCode.kt",
"/core/javautilCode.kt"
"/core/javautilCollectionsCode.kt"
);
@NotNull
@@ -107,8 +107,6 @@ public final class StandardClasses {
.methods("iterator", "contains").properties("start", "end", "increment");
standardClasses.declare().forFQ("jet.Any.toString").kotlinFunction("toString");
standardClasses.declare().forFQ("java.util.Collections.<no name provided>.max").kotlinFunction("collectionsMax");
}
+27 -1
View File
@@ -198,6 +198,7 @@ var kotlin = {set:function (receiver, key, value) {
}
});
//TODO: should be JS Array-like (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Predefined_Core_Objects#Working_with_Array-like_objects)
Kotlin.ArrayList = Kotlin.$createClass(Kotlin.AbstractList, {
initialize: function () {
this.array = [];
@@ -364,7 +365,7 @@ var kotlin = {set:function (receiver, key, value) {
},
next: function () {
var value = this.$i;
this.set_i(this.$i + this.$increment)
this.set_i(this.$i + this.$increment);
return value;
},
get_hasNext: function () {
@@ -446,6 +447,31 @@ var kotlin = {set:function (receiver, key, value) {
return max;
};
Kotlin.collectionsSort = function (mutableList, comparator) {
var boundComparator = undefined;
if (comparator !== undefined) {
boundComparator = comparator.compare.bind(comparator);
}
if (mutableList instanceof Array) {
mutableList.sort(boundComparator);
}
//TODO: should be deleted when List will be JS Array-like (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Predefined_Core_Objects#Working_with_Array-like_objects)
var array = [];
var it = mutableList.iterator();
while (it.hasNext()) {
array.push(it.next());
}
array.sort(boundComparator);
for (var i = 0, n = array.length; i < n; i++) {
mutableList.set(i, array[i]);
}
};
Kotlin.StringBuilder = Kotlin.$createClass(
{
initialize:function () {
+1 -2
View File
@@ -44,8 +44,7 @@ class MapJsTest {
test fun hashMapValues() {
val map = createTestHashMap()
//todo: fixme after sort() will be fixed for JS
assertEquals(VALUES, map.values())
assertEquals(VALUES.toList(), map.values().toSortedList())
}
fun createTestHashMap(): HashMap<String, Int> {
@@ -0,0 +1,32 @@
package testPackage
import java.util.Collections
import java.util.ArrayList
import kotlin.test.*
import org.junit.Test as test
fun <T> List<T>.toArrayList() = this.toCollection(ArrayList<T>())
class JavautilCollectionsTest {
val TEST_LIST = array(2, 0, 9, 7, 1).toList()
val SORTED_TEST_LIST = array(0, 1, 2, 7, 9).toList()
val MAX_ELEMENT = 9
val COMPARATOR = comparator { (x: Int, y: Int) -> if (x > y) 1 else if (x < y) -1 else 0 }
test fun maxWithComparator() {
assertEquals(MAX_ELEMENT, Collections.max(TEST_LIST, COMPARATOR))
}
test fun sort() {
val list = TEST_LIST.toArrayList()
Collections.sort(list)
assertEquals(SORTED_TEST_LIST, list)
}
test fun sortWithComparator() {
val list = TEST_LIST.toArrayList()
Collections.sort(list, COMPARATOR)
assertEquals(SORTED_TEST_LIST, list)
}
}