From 544a8db54eec4fb9272526773a8cb083003751db Mon Sep 17 00:00:00 2001 From: Laxystem Date: Wed, 3 Apr 2024 12:21:32 +0300 Subject: [PATCH 1/4] Renamed empty creation methods; Added map conversion methods Additionally, prevented replaced-withs from ignoring type-paremeters, and added some gradle properties as the library didn't build. --- .../src/benchmarks/immutableList/AddAll.kt | 3 +- .../src/benchmarks/immutableList/Get.kt | 3 +- .../src/benchmarks/immutableList/Iterate.kt | 3 +- .../src/benchmarks/immutableList/Remove.kt | 3 +- .../src/benchmarks/immutableList/RemoveAll.kt | 5 +- .../immutableList/RemoveAllPredicate.kt | 5 +- .../src/benchmarks/immutableList/Set.kt | 3 +- .../immutableList/builder/AddAll.kt | 3 +- .../benchmarks/immutableList/builder/Get.kt | 3 +- .../immutableList/builder/Iterate.kt | 3 +- .../immutableList/builder/RemoveAll.kt | 3 +- .../benchmarks/immutableList/builder/Set.kt | 3 +- .../src/benchmarks/immutableList/utils.kt | 3 +- .../immutableMap/Canonicalization.kt | 5 +- .../src/benchmarks/immutableMap/Equals.kt | 11 +- .../src/benchmarks/immutableMap/Get.kt | 3 +- .../src/benchmarks/immutableMap/Iterate.kt | 3 +- .../src/benchmarks/immutableMap/PutAll.kt | 9 +- .../src/benchmarks/immutableMap/Remove.kt | 3 +- .../benchmarks/immutableMap/builder/Equals.kt | 11 +- .../benchmarks/immutableMap/builder/Get.kt | 3 +- .../immutableMap/builder/Iterate.kt | 3 +- .../src/benchmarks/immutableMap/utils.kt | 8 +- .../immutableSet/Canonicalization.kt | 5 +- .../src/benchmarks/immutableSet/Contains.kt | 3 +- .../src/benchmarks/immutableSet/Equals.kt | 11 +- .../src/benchmarks/immutableSet/Iterate.kt | 3 +- .../src/benchmarks/immutableSet/Remove.kt | 3 +- .../immutableSet/builder/Contains.kt | 3 +- .../benchmarks/immutableSet/builder/Equals.kt | 11 +- .../immutableSet/builder/Iterate.kt | 3 +- .../src/benchmarks/immutableSet/utils.kt | 8 +- benchmarks/gradle.properties | 6 + core/api/kotlinx-collections-immutable.api | 17 ++ core/commonMain/src/extensions.kt | 196 +++++++++++++++--- .../src/contract/list/ImmutableListTest.kt | 32 +-- .../src/contract/map/ImmutableMapTest.kt | 4 +- .../src/contract/map/KT41278Test.kt | 12 +- .../src/contract/set/ImmutableSetTest.kt | 4 +- .../stress/list/PersistentListBuilderTest.kt | 33 +-- .../src/stress/list/PersistentListTest.kt | 53 ++--- .../map/PersistentHashMapBuilderTest.kt | 23 +- .../src/stress/map/PersistentHashMapTest.kt | 19 +- .../set/PersistentHashSetBuilderTest.kt | 21 +- .../src/stress/set/PersistentHashSetTest.kt | 19 +- .../contract/list/PersistentListGenerator.kt | 51 ++--- .../contract/map/PersistentMapGenerator.kt | 38 ++-- .../contract/set/PersistentSetGenerator.kt | 28 ++- gradle.properties | 2 + 49 files changed, 467 insertions(+), 243 deletions(-) create mode 100644 benchmarks/gradle.properties diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/AddAll.kt b/benchmarks/commonMain/src/benchmarks/immutableList/AddAll.kt index b3688706..5c0f0906 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/AddAll.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/AddAll.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class AddAll { @@ -35,7 +36,7 @@ open class AddAll { */ @Benchmark fun addAllLast(): ImmutableList { - return persistentListOf().addAll(listToAdd) + return emptyPersistentList().addAll(listToAdd) } /** diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/Get.kt b/benchmarks/commonMain/src/benchmarks/immutableList/Get.kt index 3f0264b3..d3d10992 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/Get.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/Get.kt @@ -9,13 +9,14 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Get { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList: PersistentList = persistentListOf() + private var persistentList: PersistentList = emptyPersistentList() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableList/Iterate.kt index cb00a701..58169b56 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/Iterate.kt @@ -9,13 +9,14 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Iterate { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList: PersistentList = persistentListOf() + private var persistentList: PersistentList = emptyPersistentList() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/Remove.kt b/benchmarks/commonMain/src/benchmarks/immutableList/Remove.kt index 6e1e3c07..574957b5 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/Remove.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/Remove.kt @@ -10,13 +10,14 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Remove { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList: PersistentList = persistentListOf() + private var persistentList: PersistentList = emptyPersistentList() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAll.kt b/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAll.kt index 9edff485..c952881e 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAll.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAll.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList import kotlin.random.Random @State(Scope.Benchmark) @@ -16,11 +17,11 @@ open class RemoveAll { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList: PersistentList = persistentListOf() + private var persistentList: PersistentList = emptyPersistentList() @Setup fun prepare() { - persistentList = persistentListOf().addAll(List(size) { it }) + persistentList = emptyPersistentList().addAll(List(size) { it }) } // Results of the following benchmarks do not indicate memory or time spent per operation, diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAllPredicate.kt b/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAllPredicate.kt index 46f3aae2..b93567cc 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAllPredicate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/RemoveAllPredicate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableList import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList import kotlinx.collections.immutable.persistentListOf import kotlin.random.Random @@ -16,7 +17,7 @@ open class RemoveAllPredicate { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList = persistentListOf() + private var persistentList = emptyPersistentList() private val truePredicate: (String) -> Boolean = { true } private val falsePredicate: (String) -> Boolean = { false } private var randomHalfElementsPredicate: (String) -> Boolean = truePredicate @@ -39,7 +40,7 @@ open class RemoveAllPredicate { tailElementsPredicate = { it in tailElements } val allElements = List(size) { it.toString() } - persistentList = persistentListOf().addAll(allElements) + persistentList = emptyPersistentList().addAll(allElements) } // The benchmarks measure (time and memory spent in `removeAll` operation) / size diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/Set.kt b/benchmarks/commonMain/src/benchmarks/immutableList/Set.kt index e7282aff..a3cf0988 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/Set.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/Set.kt @@ -10,13 +10,14 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Set { @Param(BM_1, BM_10, BM_100, BM_1000, BM_10000, BM_100000, BM_1000000, BM_10000000) var size: Int = 0 - private var persistentList: PersistentList = persistentListOf() + private var persistentList: PersistentList = emptyPersistentList() private var randomIndices = listOf() @Setup diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/builder/AddAll.kt b/benchmarks/commonMain/src/benchmarks/immutableList/builder/AddAll.kt index f2b10e48..f5790af3 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/builder/AddAll.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/builder/AddAll.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class AddAll { @@ -38,7 +39,7 @@ open class AddAll { */ @Benchmark fun addAllLast(): PersistentList.Builder { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() builder.addAll(listToAdd) return builder } diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Get.kt b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Get.kt index 91eb251b..263db1a4 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Get.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Get.kt @@ -8,6 +8,7 @@ package benchmarks.immutableList.builder import benchmarks.* import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Get { @@ -17,7 +18,7 @@ open class Get { @Param(IP_100, IP_99_09, IP_95, IP_70, IP_50, IP_30, IP_0) var immutablePercentage: Double = 0.0 - private var builder = persistentListOf().builder() + private var builder = emptyPersistentList().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Iterate.kt index a641e35e..6c398099 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Iterate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableList.builder import benchmarks.* import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Iterate { @@ -17,7 +18,7 @@ open class Iterate { @Param(IP_100, IP_99_09, IP_95, IP_70, IP_50, IP_30, IP_0) var immutablePercentage: Double = 0.0 - private var builder = persistentListOf().builder() + private var builder = emptyPersistentList().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/builder/RemoveAll.kt b/benchmarks/commonMain/src/benchmarks/immutableList/builder/RemoveAll.kt index f2c994f3..2bd80f7c 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/builder/RemoveAll.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/builder/RemoveAll.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList import kotlin.random.Random @State(Scope.Benchmark) @@ -84,7 +85,7 @@ open class RemoveAll { private fun persistentListBuilderAddIndexes(): PersistentList.Builder { val immutableSize = immutableSize(size, immutablePercentage) - var list = persistentListOf() + var list = emptyPersistentList() for (i in 0 until immutableSize) { list = list.add(i) } diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Set.kt b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Set.kt index ff353267..e599c37e 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/builder/Set.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/builder/Set.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentList @State(Scope.Benchmark) open class Set { @@ -18,7 +19,7 @@ open class Set { @Param(IP_100, IP_99_09, IP_95, IP_70, IP_50, IP_30, IP_0) var immutablePercentage: Double = 0.0 - private var builder = persistentListOf().builder() + private var builder = emptyPersistentList().builder() private var randomIndices = listOf() @Setup diff --git a/benchmarks/commonMain/src/benchmarks/immutableList/utils.kt b/benchmarks/commonMain/src/benchmarks/immutableList/utils.kt index e2865b49..e4fac569 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableList/utils.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableList/utils.kt @@ -6,10 +6,11 @@ package benchmarks.immutableList import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.emptyPersistentList import kotlinx.collections.immutable.persistentListOf fun persistentListAdd(size: Int): PersistentList { - var list = persistentListOf() + var list = emptyPersistentList() repeat(times = size) { list = list.add("some element") } diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/Canonicalization.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/Canonicalization.kt index ad7c2338..8c8c52a6 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/Canonicalization.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/Canonicalization.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentMap import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap /** @@ -35,13 +36,13 @@ open class Canonicalization { private var keys = listOf() private var keysToRemove = listOf() - private var persistentMap = persistentMapOf() + private var persistentMap = emptyPersistentMap() /** * Expected height of this persistent map is equal to the [persistentMap]'s expected height divided by 2. * Obtained by removing some entries of the [persistentMap]. */ - private var halfHeightPersistentMap = persistentMapOf() + private var halfHeightPersistentMap = emptyPersistentMap() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/Equals.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/Equals.kt index 1c3dc746..de6abad2 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/Equals.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/Equals.kt @@ -7,6 +7,7 @@ package benchmarks.immutableMap import benchmarks.* import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap import kotlinx.collections.immutable.persistentMapOf @State(Scope.Benchmark) @@ -20,10 +21,10 @@ open class Equals { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE, NON_EXISTING_HASH_CODE) var hashCodeType = "" - private var persistentMap = persistentMapOf() - private var sameMap = persistentMapOf() - private var slightlyDifferentMap = persistentMapOf() - private var veryDifferentMap = persistentMapOf() + private var persistentMap = emptyPersistentMap() + private var sameMap = emptyPersistentMap() + private var slightlyDifferentMap = emptyPersistentMap() + private var veryDifferentMap = emptyPersistentMap() @Setup fun prepare() { @@ -36,8 +37,10 @@ open class Equals { @Benchmark fun equalsTrue() = persistentMap == sameMap + @Benchmark fun nearlyEquals() = persistentMap == slightlyDifferentMap + @Benchmark fun notEquals() = persistentMap == veryDifferentMap } \ No newline at end of file diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/Get.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/Get.kt index f63867d2..8b6aae79 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/Get.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/Get.kt @@ -8,6 +8,7 @@ package benchmarks.immutableMap import benchmarks.* import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap @State(Scope.Benchmark) open class Get { @@ -21,7 +22,7 @@ open class Get { var hashCodeType = "" private var keys = listOf() - private var persistentMap = persistentMapOf() + private var persistentMap = emptyPersistentMap() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/Iterate.kt index 80c62a79..d8b14e22 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/Iterate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableMap import benchmarks.* import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap @State(Scope.Benchmark) open class Iterate { @@ -20,7 +21,7 @@ open class Iterate { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE) var hashCodeType = "" - private var persistentMap = persistentMapOf() + private var persistentMap = emptyPersistentMap() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/PutAll.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/PutAll.kt index be432bef..8805a288 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/PutAll.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/PutAll.kt @@ -8,6 +8,7 @@ package benchmarks.immutableMap import benchmarks.* import kotlinx.collections.immutable.PersistentMap import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap import kotlinx.collections.immutable.persistentMapOf @State(Scope.Benchmark) @@ -21,10 +22,10 @@ open class PutAll { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE) var hashCodeType = "" - private var lhs = persistentMapOf() - private var lhsSmall = persistentMapOf() - private var rhs = persistentMapOf() - private var rhsSmall = persistentMapOf() + private var lhs = emptyPersistentMap() + private var lhsSmall = emptyPersistentMap() + private var rhs = emptyPersistentMap() + private var rhsSmall = emptyPersistentMap() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/Remove.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/Remove.kt index 345c0d2b..4bcb6011 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/Remove.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/Remove.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentMap import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap @State(Scope.Benchmark) open class Remove { @@ -22,7 +23,7 @@ open class Remove { var hashCodeType = "" private var keys = listOf() - private var persistentMap = persistentMapOf() + private var persistentMap = emptyPersistentMap() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Equals.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Equals.kt index c001a15a..8dda07d4 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Equals.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Equals.kt @@ -7,6 +7,7 @@ package benchmarks.immutableMap.builder import benchmarks.* import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap import kotlinx.collections.immutable.persistentMapOf @State(Scope.Benchmark) @@ -20,10 +21,10 @@ open class Equals { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE, NON_EXISTING_HASH_CODE) var hashCodeType = "" - private var persistentMap = persistentMapOf().builder() - private var sameMap = persistentMapOf().builder() - private var slightlyDifferentMap = persistentMapOf().builder() - private var veryDifferentMap = persistentMapOf().builder() + private var persistentMap = emptyPersistentMap().builder() + private var sameMap = emptyPersistentMap().builder() + private var slightlyDifferentMap = emptyPersistentMap().builder() + private var veryDifferentMap = emptyPersistentMap().builder() @Setup fun prepare() { @@ -38,8 +39,10 @@ open class Equals { @Benchmark fun equalsTrue() = persistentMap == sameMap + @Benchmark fun nearlyEquals() = persistentMap == slightlyDifferentMap + @Benchmark fun notEquals() = persistentMap == veryDifferentMap diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Get.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Get.kt index d34b6da5..40e63bf5 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Get.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Get.kt @@ -8,6 +8,7 @@ package benchmarks.immutableMap.builder import benchmarks.* import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap @State(Scope.Benchmark) open class Get { @@ -24,7 +25,7 @@ open class Get { var immutablePercentage: Double = 0.0 private var keys = listOf() - private var builder = persistentMapOf().builder() + private var builder = emptyPersistentMap().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Iterate.kt index 9de1c51b..daa5be5c 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/builder/Iterate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableMap.builder import benchmarks.* import kotlinx.collections.immutable.persistentMapOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentMap @State(Scope.Benchmark) open class Iterate { @@ -23,7 +24,7 @@ open class Iterate { @Param(IP_100, IP_99_09, IP_95, IP_70, IP_50, IP_30, IP_0) var immutablePercentage: Double = 0.0 - private var builder = persistentMapOf().builder() + private var builder = emptyPersistentMap().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableMap/utils.kt b/benchmarks/commonMain/src/benchmarks/immutableMap/utils.kt index d2f9f08e..ce9238dd 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableMap/utils.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableMap/utils.kt @@ -6,16 +6,14 @@ package benchmarks.immutableMap import benchmarks.* -import kotlinx.collections.immutable.PersistentMap -import kotlinx.collections.immutable.persistentHashMapOf -import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.* import kotlin.math.ceil import kotlin.math.log fun emptyPersistentMap(implementation: String): PersistentMap = when (implementation) { - HASH_IMPL -> persistentHashMapOf() - ORDERED_IMPL -> persistentMapOf() + HASH_IMPL -> emptyPersistentHashMap() + ORDERED_IMPL -> emptyPersistentMap() else -> throw AssertionError("Unknown PersistentMap implementation: $implementation") } diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/Canonicalization.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/Canonicalization.kt index e2099c68..f01bff6b 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/Canonicalization.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/Canonicalization.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.PersistentSet import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet /** @@ -35,13 +36,13 @@ open class Canonicalization { private var elements = listOf() private var elementsToRemove = listOf() - private var persistentSet = persistentSetOf() + private var persistentSet = emptyPersistentSet() /** * Expected height of this persistent set is equal to the [persistentSet]'s expected height divided by 2. * Obtained by removing some elements of the [persistentSet]. */ - private var halfHeightPersistentSet = persistentSetOf() + private var halfHeightPersistentSet = emptyPersistentSet() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/Contains.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/Contains.kt index 1a7dbdff..36de6d17 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/Contains.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/Contains.kt @@ -8,6 +8,7 @@ package benchmarks.immutableSet import benchmarks.* import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet @State(Scope.Benchmark) open class Contains { @@ -21,7 +22,7 @@ open class Contains { var hashCodeType = "" private var elements = listOf() - private var persistentSet = persistentSetOf() + private var persistentSet = emptyPersistentSet() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/Equals.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/Equals.kt index 78db8603..2419120a 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/Equals.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/Equals.kt @@ -7,6 +7,7 @@ package benchmarks.immutableSet import benchmarks.* import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet import kotlinx.collections.immutable.persistentSetOf @State(Scope.Benchmark) @@ -20,10 +21,10 @@ open class Equals { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE, NON_EXISTING_HASH_CODE) var hashCodeType = "" - private var persistentSet = persistentSetOf() - private var sameSet = persistentSetOf() - private var slightlyDifferentSet = persistentSetOf() - private var veryDifferentSet = persistentSetOf() + private var persistentSet = emptyPersistentSet() + private var sameSet = emptyPersistentSet() + private var slightlyDifferentSet = emptyPersistentSet() + private var veryDifferentSet = emptyPersistentSet() @Setup fun prepare() { @@ -36,8 +37,10 @@ open class Equals { @Benchmark fun equalsTrue() = persistentSet == sameSet + @Benchmark fun nearlyEquals() = persistentSet == slightlyDifferentSet + @Benchmark fun notEquals() = persistentSet == veryDifferentSet } \ No newline at end of file diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/Iterate.kt index 5c05262a..42811084 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/Iterate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableSet import benchmarks.* import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet @State(Scope.Benchmark) open class Iterate { @@ -20,7 +21,7 @@ open class Iterate { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE) var hashCodeType = "" - private var persistentSet = persistentSetOf() + private var persistentSet = emptyPersistentSet() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/Remove.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/Remove.kt index c2263f7a..474b38fc 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/Remove.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/Remove.kt @@ -9,6 +9,7 @@ import benchmarks.* import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet @State(Scope.Benchmark) open class Remove { @@ -22,7 +23,7 @@ open class Remove { var hashCodeType = "" private var elements = listOf() - private var persistentSet = persistentSetOf() + private var persistentSet = emptyPersistentSet() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Contains.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Contains.kt index 1f23fa24..6094e1e9 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Contains.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Contains.kt @@ -8,6 +8,7 @@ package benchmarks.immutableSet.builder import benchmarks.* import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet @State(Scope.Benchmark) open class Contains { @@ -24,7 +25,7 @@ open class Contains { var immutablePercentage: Double = 0.0 private var elements = listOf() - private var builder = persistentSetOf().builder() + private var builder = emptyPersistentSet().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Equals.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Equals.kt index 302b1578..099e24f9 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Equals.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Equals.kt @@ -7,6 +7,7 @@ package benchmarks.immutableSet.builder import benchmarks.* import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet import kotlinx.collections.immutable.persistentSetOf @State(Scope.Benchmark) @@ -20,10 +21,10 @@ open class Equals { @Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE, NON_EXISTING_HASH_CODE) var hashCodeType = "" - private var persistentSet = persistentSetOf().builder() - private var sameSet = persistentSetOf().builder() - private var slightlyDifferentSet = persistentSetOf().builder() - private var veryDifferentSet = persistentSetOf().builder() + private var persistentSet = emptyPersistentSet().builder() + private var sameSet = emptyPersistentSet().builder() + private var slightlyDifferentSet = emptyPersistentSet().builder() + private var veryDifferentSet = emptyPersistentSet().builder() @Setup fun prepare() { @@ -38,8 +39,10 @@ open class Equals { @Benchmark fun equalsTrue() = persistentSet == sameSet + @Benchmark fun nearlyEquals() = persistentSet == slightlyDifferentSet + @Benchmark fun notEquals() = persistentSet == veryDifferentSet } \ No newline at end of file diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Iterate.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Iterate.kt index 56d055ee..8af88f42 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Iterate.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/builder/Iterate.kt @@ -8,6 +8,7 @@ package benchmarks.immutableSet.builder import benchmarks.* import kotlinx.collections.immutable.persistentSetOf import kotlinx.benchmark.* +import kotlinx.collections.immutable.emptyPersistentSet @State(Scope.Benchmark) open class Iterate { @@ -23,7 +24,7 @@ open class Iterate { @Param(IP_100, IP_99_09, IP_95, IP_70, IP_50, IP_30, IP_0) var immutablePercentage: Double = 0.0 - private var builder = persistentSetOf().builder() + private var builder = emptyPersistentSet().builder() @Setup fun prepare() { diff --git a/benchmarks/commonMain/src/benchmarks/immutableSet/utils.kt b/benchmarks/commonMain/src/benchmarks/immutableSet/utils.kt index cc06827d..fbea3f9e 100644 --- a/benchmarks/commonMain/src/benchmarks/immutableSet/utils.kt +++ b/benchmarks/commonMain/src/benchmarks/immutableSet/utils.kt @@ -6,16 +6,14 @@ package benchmarks.immutableSet import benchmarks.* -import kotlinx.collections.immutable.PersistentSet -import kotlinx.collections.immutable.persistentHashSetOf -import kotlinx.collections.immutable.persistentSetOf +import kotlinx.collections.immutable.* import kotlin.math.ceil import kotlin.math.log fun emptyPersistentSet(implementation: String): PersistentSet = when (implementation) { - HASH_IMPL -> persistentHashSetOf() - ORDERED_IMPL -> persistentSetOf() + HASH_IMPL -> emptyPersistentHashSet() + ORDERED_IMPL -> emptyPersistentSet() else -> throw AssertionError("Unknown PersistentSet implementation: $implementation") } diff --git a/benchmarks/gradle.properties b/benchmarks/gradle.properties new file mode 100644 index 00000000..32a965b1 --- /dev/null +++ b/benchmarks/gradle.properties @@ -0,0 +1,6 @@ +# +# Copyright 2016-2024 JetBrains s.r.o. +# Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. +# + +kotlin.mpp.applyDefaultHierarchyTemplate=false diff --git a/core/api/kotlinx-collections-immutable.api b/core/api/kotlinx-collections-immutable.api index 09231a36..9eaca09a 100644 --- a/core/api/kotlinx-collections-immutable.api +++ b/core/api/kotlinx-collections-immutable.api @@ -1,4 +1,9 @@ public final class kotlinx/collections/immutable/ExtensionsKt { + public static final fun emptyPersistentHashMap ()Lkotlinx/collections/immutable/PersistentMap; + public static final fun emptyPersistentHashSet ()Lkotlinx/collections/immutable/PersistentSet; + public static final fun emptyPersistentList ()Lkotlinx/collections/immutable/PersistentList; + public static final fun emptyPersistentMap ()Lkotlinx/collections/immutable/PersistentMap; + public static final fun emptyPersistentSet ()Lkotlinx/collections/immutable/PersistentSet; public static final fun immutableHashMapOf ([Lkotlin/Pair;)Lkotlinx/collections/immutable/PersistentMap; public static final fun immutableHashSetOf ([Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentSet; public static final fun immutableListOf ()Lkotlinx/collections/immutable/PersistentList; @@ -58,16 +63,25 @@ public final class kotlinx/collections/immutable/ExtensionsKt { public static final fun putAll (Lkotlinx/collections/immutable/PersistentMap;Ljava/util/Map;)Lkotlinx/collections/immutable/PersistentMap; public static final fun putAll (Lkotlinx/collections/immutable/PersistentMap;Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentMap; public static final fun putAll (Lkotlinx/collections/immutable/PersistentMap;[Lkotlin/Pair;)Lkotlinx/collections/immutable/PersistentMap; + public static final fun toImmutableHashMap (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/ImmutableMap; + public static final fun toImmutableHashMap (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableMap; + public static final fun toImmutableHashMap ([Lkotlin/Pair;)Lkotlinx/collections/immutable/ImmutableMap; public static final fun toImmutableList (Ljava/lang/CharSequence;)Lkotlinx/collections/immutable/ImmutableList; public static final fun toImmutableList (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/ImmutableList; public static final fun toImmutableList (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableList; public static final fun toImmutableList ([Ljava/lang/Object;)Lkotlinx/collections/immutable/ImmutableList; + public static final fun toImmutableMap (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/ImmutableMap; public static final fun toImmutableMap (Ljava/util/Map;)Lkotlinx/collections/immutable/ImmutableMap; + public static final fun toImmutableMap (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableMap; + public static final fun toImmutableMap ([Lkotlin/Pair;)Lkotlinx/collections/immutable/ImmutableMap; public static final fun toImmutableSet (Ljava/lang/CharSequence;)Lkotlinx/collections/immutable/PersistentSet; public static final fun toImmutableSet (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/ImmutableSet; public static final fun toImmutableSet (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableSet; public static final fun toImmutableSet ([Ljava/lang/Object;)Lkotlinx/collections/immutable/ImmutableSet; + public static final fun toPersistentHashMap (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/PersistentMap; public static final fun toPersistentHashMap (Ljava/util/Map;)Lkotlinx/collections/immutable/PersistentMap; + public static final fun toPersistentHashMap (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentMap; + public static final fun toPersistentHashMap ([Lkotlin/Pair;)Lkotlinx/collections/immutable/PersistentMap; public static final fun toPersistentHashSet (Ljava/lang/CharSequence;)Lkotlinx/collections/immutable/PersistentSet; public static final fun toPersistentHashSet (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/PersistentSet; public static final fun toPersistentHashSet (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentSet; @@ -76,7 +90,10 @@ public final class kotlinx/collections/immutable/ExtensionsKt { public static final fun toPersistentList (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/PersistentList; public static final fun toPersistentList (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentList; public static final fun toPersistentList ([Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentList; + public static final fun toPersistentMap (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/PersistentMap; public static final fun toPersistentMap (Ljava/util/Map;)Lkotlinx/collections/immutable/PersistentMap; + public static final fun toPersistentMap (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentMap; + public static final fun toPersistentMap ([Lkotlin/Pair;)Lkotlinx/collections/immutable/PersistentMap; public static final fun toPersistentSet (Ljava/lang/CharSequence;)Lkotlinx/collections/immutable/PersistentSet; public static final fun toPersistentSet (Ljava/lang/Iterable;)Lkotlinx/collections/immutable/PersistentSet; public static final fun toPersistentSet (Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentSet; diff --git a/core/commonMain/src/extensions.kt b/core/commonMain/src/extensions.kt index 57d289fa..8f537ced 100644 --- a/core/commonMain/src/extensions.kt +++ b/core/commonMain/src/extensions.kt @@ -441,6 +441,13 @@ public operator fun PersistentMap.minus(keys: Sequence): Per = mutate { it.minusAssign(keys) } +/** + * Returns an empty persistent list. + * + * @since 0.4 + */ +public fun emptyPersistentList(): PersistentList = persistentVectorOf() + /** * Returns a new persistent list of the specified elements. */ @@ -449,9 +456,17 @@ public fun persistentListOf(vararg elements: E): PersistentList = persist /** * Returns an empty persistent list. */ -public fun persistentListOf(): PersistentList = persistentVectorOf() +@Deprecated("Use emptyPersistentList instead.", ReplaceWith("emptyPersistentList()")) +public fun persistentListOf(): PersistentList = emptyPersistentList() +/** + * Returns an empty persistent set. + * + * @since 0.4 + */ +public fun emptyPersistentSet(): PersistentSet = PersistentOrderedSet.emptyOf() + /** * Returns a new persistent set with the given elements. * @@ -462,9 +477,17 @@ public fun persistentSetOf(vararg elements: E): PersistentSet = Persisten /** * Returns an empty persistent set. */ -public fun persistentSetOf(): PersistentSet = PersistentOrderedSet.emptyOf() +@Deprecated("Use emptyPersistentSet instead.", ReplaceWith("emptyPersistentSet()")) +public fun persistentSetOf(): PersistentSet = emptyPersistentSet() +/** + * Returns an empty persistent set. + * + * @since 0.4 + */ +public fun emptyPersistentHashSet(): PersistentSet = PersistentHashSet.emptyOf() + /** * Returns a new persistent set with the given elements. * @@ -475,9 +498,17 @@ public fun persistentHashSetOf(vararg elements: E): PersistentSet = Persi /** * Returns an empty persistent set. */ -public fun persistentHashSetOf(): PersistentSet = PersistentHashSet.emptyOf() +@Deprecated("Use emptyPersistentHashSet instead.", ReplaceWith("emptyPersistentHashSet()")) +public fun persistentHashSetOf(): PersistentSet = emptyPersistentHashSet() +/** + * Returns an empty persistent map. + * + * @since 0.4 + */ +public fun emptyPersistentMap(): PersistentMap = PersistentOrderedMap.emptyOf() + /** * Returns a new persistent map with the specified contents, given as a list of pairs * where the first component is the key and the second is the value. @@ -491,8 +522,16 @@ public fun persistentMapOf(vararg pairs: Pair): PersistentMap /** * Returns an empty persistent map. */ -public fun persistentMapOf(): PersistentMap = PersistentOrderedMap.emptyOf() +@Deprecated("Use emptyPersistentMap instead.", ReplaceWith("emptyPersistentMap()")) +public fun persistentMapOf(): PersistentMap = emptyPersistentMap() + +/** + * Returns an empty persistent map. + * + * @since 0.4 + */ +public fun emptyPersistentHashMap(): PersistentMap = PersistentHashMap.emptyOf() /** * Returns a new persistent map with the specified contents, given as a list of pairs @@ -507,20 +546,21 @@ public fun persistentHashMapOf(vararg pairs: Pair): PersistentMap persistentHashMapOf(): PersistentMap = PersistentHashMap.emptyOf() +@Deprecated("Use emptyPersistentHashMap instead.", ReplaceWith("emptyPersistentHashMap()")) +public fun persistentHashMapOf(): PersistentMap = emptyPersistentHashMap() /** * Returns a new persistent list of the specified elements. */ -@Deprecated("Use persistentListOf instead.", ReplaceWith("persistentListOf(*elements)")) +@Deprecated("Use persistentListOf instead.", ReplaceWith("persistentListOf(*elements)")) public fun immutableListOf(vararg elements: E): PersistentList = persistentListOf(*elements) /** * Returns an empty persistent list. */ -@Deprecated("Use persistentListOf instead.", ReplaceWith("persistentListOf()")) -public fun immutableListOf(): PersistentList = persistentListOf() +@Deprecated("Use persistentListOf instead.", ReplaceWith("persistentListOf()")) +public fun immutableListOf(): PersistentList = emptyPersistentList() /** @@ -528,14 +568,14 @@ public fun immutableListOf(): PersistentList = persistentListOf() * * Elements of the returned set are iterated in the order they were specified. */ -@Deprecated("Use persistentSetOf instead.", ReplaceWith("persistentSetOf(*elements)")) +@Deprecated("Use persistentSetOf instead.", ReplaceWith("persistentSetOf(*elements)")) public fun immutableSetOf(vararg elements: E): PersistentSet = persistentSetOf(*elements) /** * Returns an empty persistent set. */ -@Deprecated("Use persistentSetOf instead.", ReplaceWith("persistentSetOf()")) -public fun immutableSetOf(): PersistentSet = persistentSetOf() +@Deprecated("Use persistentSetOf instead.", ReplaceWith("persistentSetOf()")) +public fun immutableSetOf(): PersistentSet = emptyPersistentSet() /** @@ -543,7 +583,7 @@ public fun immutableSetOf(): PersistentSet = persistentSetOf() * * Order of the elements in the returned set is unspecified. */ -@Deprecated("Use persistentHashSetOf instead.", ReplaceWith("persistentHashSetOf(*elements)")) +@Deprecated("Use persistentHashSetOf instead.", ReplaceWith("persistentHashSetOf(*elements)")) public fun immutableHashSetOf(vararg elements: E): PersistentSet = persistentHashSetOf(*elements) @@ -555,7 +595,7 @@ public fun immutableHashSetOf(vararg elements: E): PersistentSet = persis * * Entries of the map are iterated in the order they were specified. */ -@Deprecated("Use persistentMapOf instead.", ReplaceWith("persistentMapOf(*pairs)")) +@Deprecated("Use persistentMapOf instead.", ReplaceWith("persistentMapOf(*pairs)")) public fun immutableMapOf(vararg pairs: Pair): PersistentMap = persistentMapOf(*pairs) /** @@ -566,7 +606,7 @@ public fun immutableMapOf(vararg pairs: Pair): PersistentMap * * Order of the entries in the returned map is unspecified. */ -@Deprecated("Use persistentHashMapOf instead.", ReplaceWith("persistentHashMapOf(*pairs)")) +@Deprecated("Use persistentHashMapOf instead.", ReplaceWith("persistentHashMapOf(*pairs)")) public fun immutableHashMapOf(vararg pairs: Pair): PersistentMap = persistentHashMapOf(*pairs) @@ -604,23 +644,23 @@ public fun CharSequence.toImmutableList(): ImmutableList = toPersistentLis public fun Iterable.toPersistentList(): PersistentList = this as? PersistentList ?: (this as? PersistentList.Builder)?.build() - ?: persistentListOf() + this + ?: emptyPersistentList() + this /** * Returns a persistent list containing all elements of this array. */ -public fun Array.toPersistentList(): PersistentList = persistentListOf() + this +public fun Array.toPersistentList(): PersistentList = emptyPersistentList() + this /** * Returns a persistent list containing all elements of this sequence. */ -public fun Sequence.toPersistentList(): PersistentList = persistentListOf() + this +public fun Sequence.toPersistentList(): PersistentList = emptyPersistentList() + this /** * Returns a persistent list containing all characters. */ public fun CharSequence.toPersistentList(): PersistentList = - persistentListOf().mutate { this.toCollection(it) } + emptyPersistentList().mutate { this.toCollection(it) } /** @@ -633,7 +673,7 @@ public fun CharSequence.toPersistentList(): PersistentList = public fun Iterable.toImmutableSet(): ImmutableSet = this as? ImmutableSet ?: (this as? PersistentSet.Builder)?.build() - ?: persistentSetOf() + this + ?: emptyPersistentSet() + this /** * Returns an immutable set of all elements of this array. @@ -675,14 +715,14 @@ public fun Iterable.toPersistentSet(): PersistentSet = * * Elements of the returned set are iterated in the same order as in this array. */ -public fun Array.toPersistentSet(): PersistentSet = persistentSetOf() + this +public fun Array.toPersistentSet(): PersistentSet = emptyPersistentSet() + this /** * Returns a persistent set of all elements of this sequence. * * Elements of the returned set are iterated in the same order as in this sequence. */ -public fun Sequence.toPersistentSet(): PersistentSet = persistentSetOf() + this +public fun Sequence.toPersistentSet(): PersistentSet = emptyPersistentSet() + this /** * Returns a persistent set of all characters. @@ -690,7 +730,7 @@ public fun Sequence.toPersistentSet(): PersistentSet = persistentSetOf * Elements of the returned set are iterated in the same order as in this char sequence. */ public fun CharSequence.toPersistentSet(): PersistentSet = - persistentSetOf().mutate { this.toCollection(it) } + emptyPersistentSet().mutate { this.toCollection(it) } /** @@ -711,14 +751,14 @@ public fun Iterable.toPersistentHashSet(): PersistentSet * * Order of the elements in the returned set is unspecified. */ -public fun Array.toPersistentHashSet(): PersistentSet = persistentHashSetOf() + this +public fun Array.toPersistentHashSet(): PersistentSet = emptyPersistentHashSet() + this /** * Returns a persistent set of all elements of this sequence. * * Order of the elements in the returned set is unspecified. */ -public fun Sequence.toPersistentHashSet(): PersistentSet = persistentHashSetOf() + this +public fun Sequence.toPersistentHashSet(): PersistentSet = emptyPersistentHashSet() + this /** * Returns a persistent set of all characters. @@ -726,7 +766,7 @@ public fun Sequence.toPersistentHashSet(): PersistentSet = persistentH * Order of the elements in the returned set is unspecified. */ public fun CharSequence.toPersistentHashSet(): PersistentSet = - persistentHashSetOf().mutate { this.toCollection(it) } + emptyPersistentHashSet().mutate { this.toCollection(it) } /** @@ -739,7 +779,7 @@ public fun CharSequence.toPersistentHashSet(): PersistentSet = public fun Map.toImmutableMap(): ImmutableMap = this as? ImmutableMap ?: (this as? PersistentMap.Builder)?.build() - ?: persistentMapOf().putAll(this) + ?: emptyPersistentMap().putAll(this) /** * Returns a persistent map containing all entries from this map. @@ -766,3 +806,107 @@ public fun Map.toPersistentHashMap(): PersistentMap = this as? PersistentHashMap ?: (this as? PersistentHashMapBuilder)?.build() ?: PersistentHashMap.emptyOf().putAll(this) + + +/** + * Returns a persistent map of all elements in this [Sequence] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Sequence>.toPersistentMap(): PersistentMap = + emptyPersistentMap().putAll(pairs = this) + +/** + * Returns an immutable map of all elements in this [Sequence] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Sequence>.toImmutableMap(): ImmutableMap = toPersistentMap() + +/** + * Returns a persistent map of all elements in this [Iterable] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Iterable>.toPersistentMap(): PersistentMap = + emptyPersistentMap().putAll(pairs = this) + +/** + * Returns an immutable map of all elements in this [Iterable] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Iterable>.toImmutableMap(): ImmutableMap = toPersistentMap() + +/** + * Returns a persistent map of all elements in this [Array] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Array>.toPersistentMap(): PersistentMap = + emptyPersistentMap().putAll(pairs = this) + +/** + * Returns an immutable map of all elements in this [Array] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Array>.toImmutableMap(): ImmutableMap = toPersistentMap() + + +/** + * Returns a persistent hash map of all elements in this [Sequence] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Sequence>.toPersistentHashMap(): PersistentMap = + emptyPersistentHashMap().putAll(pairs = this) + +/** + * Returns an immutable hash map of all elements in this [Sequence] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Sequence>.toImmutableHashMap(): ImmutableMap = toPersistentHashMap() + +/** + * Returns a persistent hash map of all elements in this [Iterable] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Iterable>.toPersistentHashMap(): PersistentMap = + emptyPersistentHashMap().putAll(pairs = this) + +/** + * Returns an immutable hash map of all elements in this [Iterable] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Iterable>.toImmutableHashMap(): ImmutableMap = toPersistentHashMap() + +/** + * Returns a persistent hash map of all elements in this [Array] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Array>.toPersistentHashMap(): PersistentMap = + emptyPersistentHashMap().putAll(pairs = this) + +/** + * Returns an immutable hash map of all elements in this [Array] of [Pair]s, + * using [Pair.first] as [keys][ImmutableMap.keys] and [Pair.second] as [values][ImmutableMap.values]. + * + * @since 0.4 + */ +public fun Array>.toImmutableHashMap(): ImmutableMap = toPersistentHashMap() diff --git a/core/commonTest/src/contract/list/ImmutableListTest.kt b/core/commonTest/src/contract/list/ImmutableListTest.kt index 76883a04..a025d6f8 100644 --- a/core/commonTest/src/contract/list/ImmutableListTest.kt +++ b/core/commonTest/src/contract/list/ImmutableListTest.kt @@ -16,9 +16,10 @@ class ImmutableListTest { private fun compareLists(expected: List, actual: List) = compare(expected, actual) { listBehavior() } - @Test fun empty() { - val empty1 = persistentListOf() - val empty2 = persistentListOf() + @Test + fun empty() { + val empty1 = emptyPersistentList() + val empty2 = emptyPersistentList() assertEquals>(empty1, empty2) assertEquals>(listOf(), empty1) assertTrue(empty1 === empty2) @@ -75,8 +76,9 @@ class ImmutableListTest { assertSame(emptyPersistent, empty.toPersistentList()) } - @Test fun addElements() { - var list = persistentListOf() + @Test + fun addElements() { + var list = emptyPersistentList() list = list.add("x") list = list.add(0, "a") list = list.addAll(list) @@ -119,7 +121,7 @@ class ImmutableListTest { @Test fun smallPersistentListFromMutableBuffer() { val list = List(33) { it } - var vector = persistentListOf().mutate { it.addAll(list) } + var vector = emptyPersistentList().mutate { it.addAll(list) } vector = vector.removeAt(vector.lastIndex) assertEquals(list.dropLast(1), vector) } @@ -134,7 +136,7 @@ class ImmutableListTest { } @Test fun builder() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() "abcxaxyz12".toCollection(builder) val list = builder.build() assertEquals>(list, builder) @@ -193,17 +195,18 @@ class ImmutableListTest { compareLists(mutable, builder.build()) } - @Test fun noOperation() { - persistentListOf().testNoOperation({ clear() }, { clear() }) + @Test + fun noOperation() { + emptyPersistentList().testNoOperation({ clear() }, { clear() }) val list = "abcxaxyz12".toPersistentList() with(list) { testNoOperation({ remove('d') }, { remove('d') }) testNoOperation({ removeAll(listOf('d', 'e')) }, { removeAll(listOf('d', 'e')) }) testNoOperation({ removeAll { it.isUpperCase() } }, { removeAll { it.isUpperCase() } }) - testNoOperation({ removeAll(emptyList()) }, { removeAll(emptyList())}) - testNoOperation({ addAll(emptyList()) }, { addAll(emptyList())}) - testNoOperation({ addAll(2, emptyList()) }, { addAll(2, emptyList())}) + testNoOperation({ removeAll(emptyList()) }, { removeAll(emptyList()) }) + testNoOperation({ addAll(emptyList()) }, { addAll(emptyList()) }) + testNoOperation({ addAll(2, emptyList()) }, { addAll(2, emptyList()) }) } } @@ -215,8 +218,9 @@ class ImmutableListTest { assertTrue(this === buildResult) } - @Test fun covariantTyping() { - val listNothing = persistentListOf() + @Test + fun covariantTyping() { + val listNothing = emptyPersistentList() val listS: PersistentList = listNothing + "x" val listSN: PersistentList = listS + (null as String?) diff --git a/core/commonTest/src/contract/map/ImmutableMapTest.kt b/core/commonTest/src/contract/map/ImmutableMapTest.kt index 599f2c1c..b573c902 100644 --- a/core/commonTest/src/contract/map/ImmutableMapTest.kt +++ b/core/commonTest/src/contract/map/ImmutableMapTest.kt @@ -360,8 +360,8 @@ abstract class ImmutableMapTest { testEqualsAndHashCode(map, mapOf(*pairs)) testEqualsAndHashCode(map, persistentHashMapOf(*pairs)) testEqualsAndHashCode(map, persistentMapOf(*pairs)) - testEqualsAndHashCode(map, persistentHashMapOf().builder().apply { putAll(pairs) }) - testEqualsAndHashCode(map, persistentMapOf().builder().apply { putAll(pairs) }) + testEqualsAndHashCode(map, emptyPersistentHashMap().builder().apply { putAll(pairs) }) + testEqualsAndHashCode(map, emptyPersistentMap().builder().apply { putAll(pairs) }) } private fun testEquality(data: Array>, changed: Array>) { diff --git a/core/commonTest/src/contract/map/KT41278Test.kt b/core/commonTest/src/contract/map/KT41278Test.kt index 47041b4d..ec168a6e 100644 --- a/core/commonTest/src/contract/map/KT41278Test.kt +++ b/core/commonTest/src/contract/map/KT41278Test.kt @@ -5,6 +5,8 @@ package tests.contract.map +import kotlinx.collections.immutable.emptyPersistentHashMap +import kotlinx.collections.immutable.emptyPersistentMap import kotlinx.collections.immutable.persistentHashMapOf import kotlinx.collections.immutable.persistentMapOf import kotlin.test.Test @@ -41,7 +43,7 @@ class KT41278Test { @Test fun persistentOrderedMap() { - val mapLetterToIndex = ('a'..'z').mapIndexed { i, c -> "$c" to i }.fold(persistentMapOf()) { map, pair -> + val mapLetterToIndex = ('a'..'z').mapIndexed { i, c -> "$c" to i }.fold(emptyPersistentMap()) { map, pair -> map.put(pair.first, pair.second) } @@ -54,7 +56,7 @@ class KT41278Test { @Test fun persistentHashMap() { - val mapLetterToIndex = ('a'..'z').mapIndexed { i, c -> "$c" to i }.fold(persistentHashMapOf()) { map, pair -> + val mapLetterToIndex = ('a'..'z').mapIndexed { i, c -> "$c" to i }.fold(emptyPersistentHashMap()) { map, pair -> map.put(pair.first, pair.second) } @@ -67,7 +69,8 @@ class KT41278Test { @Test fun persistentOrderedMapBuilder() { - val mapLetterToIndex = persistentMapOf().builder().apply { putAll(('a'..'z').mapIndexed { i, c -> "$c" to i }) } + val mapLetterToIndex = + emptyPersistentMap().builder().apply { putAll(('a'..'z').mapIndexed { i, c -> "$c" to i }) } doContainsTest(mapLetterToIndex, "h", 7, ::TestMapEntry) doContainsTest(mapLetterToIndex, "h", 7, ::TestMutableMapEntry) @@ -78,7 +81,8 @@ class KT41278Test { @Test fun persistentHashMapBuilder() { - val mapLetterToIndex = persistentHashMapOf().builder().apply { putAll(('a'..'z').mapIndexed { i, c -> "$c" to i }) } + val mapLetterToIndex = emptyPersistentHashMap().builder() + .apply { putAll(('a'..'z').mapIndexed { i, c -> "$c" to i }) } doContainsTest(mapLetterToIndex, "h", 7, ::TestMapEntry) doContainsTest(mapLetterToIndex, "h", 7, ::TestMutableMapEntry) diff --git a/core/commonTest/src/contract/set/ImmutableSetTest.kt b/core/commonTest/src/contract/set/ImmutableSetTest.kt index f017ccae..ce6e871f 100644 --- a/core/commonTest/src/contract/set/ImmutableSetTest.kt +++ b/core/commonTest/src/contract/set/ImmutableSetTest.kt @@ -372,8 +372,8 @@ abstract class ImmutableSetTestBase { testEqualsAndHashCode(set, setOf(*elements)) testEqualsAndHashCode(set, persistentHashSetOf(*elements)) testEqualsAndHashCode(set, persistentSetOf(*elements)) - testEqualsAndHashCode(set, persistentHashSetOf().builder().apply { addAll(elements) }) - testEqualsAndHashCode(set, persistentSetOf().builder().apply { addAll(elements) }) + testEqualsAndHashCode(set, emptyPersistentHashSet().builder().apply { addAll(elements) }) + testEqualsAndHashCode(set, emptyPersistentSet().builder().apply { addAll(elements) }) } private fun testEquality(data: Array, changed: Array) { diff --git a/core/commonTest/src/stress/list/PersistentListBuilderTest.kt b/core/commonTest/src/stress/list/PersistentListBuilderTest.kt index 19ab0aef..2d1ab94c 100644 --- a/core/commonTest/src/stress/list/PersistentListBuilderTest.kt +++ b/core/commonTest/src/stress/list/PersistentListBuilderTest.kt @@ -6,6 +6,7 @@ package tests.stress.list import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.emptyPersistentList import kotlinx.collections.immutable.persistentListOf import tests.NForAlgorithmComplexity import tests.TestPlatform @@ -24,7 +25,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertTrue(builder.isEmpty()) @@ -45,7 +46,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertTrue(builder.size == 0) @@ -64,7 +65,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun firstTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertNull(builder.firstOrNull()) @@ -83,7 +84,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun lastTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertNull(builder.lastOrNull()) @@ -102,7 +103,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun toListTest() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertEquals(emptyList(), builder) @@ -119,7 +120,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun addFirstTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertNull(builder.firstOrNull()) @@ -140,7 +141,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun addLastTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() val elementsToAdd = NForAlgorithmComplexity.O_NN @@ -158,7 +159,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeFirstTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertFailsWith { builder.removeAt(0) } @@ -180,7 +181,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeLastTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertFailsWith { builder.removeAt(builder.size - 1) @@ -217,7 +218,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun getTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertFailsWith { builder[0] @@ -243,7 +244,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun setTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() assertFailsWith { builder[0] = 0 @@ -275,7 +276,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun subListTests() { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() val elementsToAdd = NForAlgorithmComplexity.O_N repeat(times = elementsToAdd) { index -> @@ -308,7 +309,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Suppress("TestFunctionName") private fun PersistentList(size: Int, producer: (Int) -> E): PersistentList { - var list = persistentListOf() + var list = emptyPersistentList() repeat(times = size) { index -> list = list.add(producer(index)) } @@ -493,7 +494,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { for (initialSize in listSizes) { val initialElements = List(initialSize) { it } - val list = initialElements.fold(persistentListOf()) { list, element -> list.add(element) } + val list = initialElements.fold(emptyPersistentList()) { list, element -> list.add(element) } val addIndex = mutableListOf( initialSize // append @@ -537,7 +538,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { for (initialSize in listSizes) { val initialElements = List(initialSize) { it } - val list = initialElements.fold(persistentListOf()) { list, element -> list.add(element) } + val list = initialElements.fold(emptyPersistentList()) { list, element -> list.add(element) } val removeElements = mutableListOf( initialElements // all @@ -575,7 +576,7 @@ class PersistentListBuilderTest : ExecutionTimeMeasuringTest() { @Test fun randomOperationsTests() { - val vectorGen = mutableListOf(List(20) { persistentListOf() }) + val vectorGen = mutableListOf(List(20) { emptyPersistentList() }) val expected = mutableListOf(List(20) { listOf() }) repeat(times = 5) { diff --git a/core/commonTest/src/stress/list/PersistentListTest.kt b/core/commonTest/src/stress/list/PersistentListTest.kt index fa17d416..c314e263 100644 --- a/core/commonTest/src/stress/list/PersistentListTest.kt +++ b/core/commonTest/src/stress/list/PersistentListTest.kt @@ -6,6 +6,7 @@ package tests.stress.list import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.emptyPersistentList import kotlinx.collections.immutable.persistentListOf import tests.NForAlgorithmComplexity import tests.distinctStringValues @@ -17,7 +18,7 @@ import kotlin.test.* class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertTrue(vector.isEmpty()) assertFalse(vector.add("last").isEmpty()) @@ -39,7 +40,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertTrue(vector.size == 0) assertEquals(1, vector.add(1).size) @@ -59,7 +60,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun firstTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertNull(vector.firstOrNull()) assertEquals(1, vector.add(0, 1).first()) @@ -80,7 +81,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun lastTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertNull(vector.lastOrNull()) assertEquals(1, vector.add(0, 1).last()) @@ -101,27 +102,27 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun toListTest() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertEquals(emptyList(), vector.toList()) assertEquals(listOf(1), vector.add(1).toList()) assertEquals( - listOf(1, 2, 3, 4, 5, 6), - vector - .add(1).add(2).add(3).add(4).add(5) - .add(6) - .toList() + listOf(1, 2, 3, 4, 5, 6), + vector + .add(1).add(2).add(3).add(4).add(5) + .add(6) + .toList() ) assertEquals( - listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), - vector - .add(1).add(2).add(3).add(4).add(5) - .add(6).add(7).add(8).add(9).add(10) - .add(11).add(12).add(13).add(14).add(15) - .add(16).add(17).add(18).add(19).add(20) - .toList() + listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), + vector + .add(1).add(2).add(3).add(4).add(5) + .add(6).add(7).add(8).add(9).add(10) + .add(11).add(12).add(13).add(14).add(15) + .add(16).add(17).add(18).add(19).add(20) + .toList() ) val elementsToAdd = NForAlgorithmComplexity.O_NN @@ -137,7 +138,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun addFirstTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertNull(vector.firstOrNull()) assertEquals(1, vector.add(0, 1).first()) @@ -160,7 +161,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun addLastTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertEquals(1, vector.add(1)[0]) @@ -181,7 +182,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun removeFirstTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertFailsWith { vector.removeAt(0) @@ -207,7 +208,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun removeLastTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertFailsWith { vector.removeAt(vector.size - 1) @@ -246,7 +247,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun getTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertFailsWith { vector[0] @@ -273,7 +274,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { @Test fun setTests() { - var vector = persistentListOf() + var vector = emptyPersistentList() assertFailsWith { vector.set(0, 0) @@ -315,7 +316,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { for (initialSize in listSizes) { val initialElements = List(initialSize) { it } - val list = initialElements.fold(persistentListOf()) { list, element -> list.add(element) } + val list = initialElements.fold(emptyPersistentList()) { list, element -> list.add(element) } val addIndex = mutableListOf( initialSize // append @@ -359,7 +360,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { for (initialSize in listSizes) { val initialElements = List(initialSize) { it } - val list = initialElements.fold(persistentListOf()) { list, element -> list.add(element) } + val list = initialElements.fold(emptyPersistentList()) { list, element -> list.add(element) } val removeElements = mutableListOf( initialElements // all @@ -409,7 +410,7 @@ class PersistentListTest : ExecutionTimeMeasuringTest() { repeat(times = 1) { val lists = List(20) { mutableListOf() } - val vectors = MutableList(20) { persistentListOf() } + val vectors = MutableList(20) { emptyPersistentList() } val operationCount = NForAlgorithmComplexity.O_NlogN diff --git a/core/commonTest/src/stress/map/PersistentHashMapBuilderTest.kt b/core/commonTest/src/stress/map/PersistentHashMapBuilderTest.kt index deb20e4b..949b81be 100644 --- a/core/commonTest/src/stress/map/PersistentHashMapBuilderTest.kt +++ b/core/commonTest/src/stress/map/PersistentHashMapBuilderTest.kt @@ -6,6 +6,7 @@ package tests.stress.map import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.emptyPersistentHashMap import kotlinx.collections.immutable.persistentHashMapOf import tests.NForAlgorithmComplexity import tests.distinctStringValues @@ -20,7 +21,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() assertTrue(builder.isEmpty()) @@ -41,7 +42,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() assertTrue(builder.size == 0) @@ -84,7 +85,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { } } - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() assertTrue(builder.keys.isEmpty()) assertTrue(builder.values.isEmpty()) @@ -110,7 +111,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { private fun testAfterRandomPut(block: (MutableMap, PersistentMap) -> Unit) { val elementsToAdd = NForAlgorithmComplexity.O_NNlogN - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() val expected = hashMapOf() repeat(times = elementsToAdd) { @@ -227,7 +228,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -245,7 +246,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeBuildTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() val elementsToAddToBuilder = NForAlgorithmComplexity.O_NlogN @@ -292,7 +293,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeEntryTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -312,7 +313,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun getTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -335,7 +336,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun putTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -367,7 +368,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun collisionTests() { - val builder = persistentHashMapOf().builder() + val builder = emptyPersistentHashMap().builder() repeat(times = 2) { removeEntryPredicate -> @@ -430,7 +431,7 @@ class PersistentHashMapBuilderTest : ExecutionTimeMeasuringTest() { @Test fun randomOperationsTests() { - val mapGen = mutableListOf(List(20) { persistentHashMapOf() }) + val mapGen = mutableListOf(List(20) { emptyPersistentHashMap() }) val expected = mutableListOf(List(20) { mapOf() }) repeat(times = 5) { diff --git a/core/commonTest/src/stress/map/PersistentHashMapTest.kt b/core/commonTest/src/stress/map/PersistentHashMapTest.kt index 6eb0c08a..a25d7862 100644 --- a/core/commonTest/src/stress/map/PersistentHashMapTest.kt +++ b/core/commonTest/src/stress/map/PersistentHashMapTest.kt @@ -6,6 +6,7 @@ package tests.stress.map import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.emptyPersistentHashMap import kotlinx.collections.immutable.persistentHashMapOf import tests.NForAlgorithmComplexity import tests.distinctStringValues @@ -20,7 +21,7 @@ import kotlin.test.* class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertTrue(map.isEmpty()) assertFalse(map.put(0, "last").isEmpty()) @@ -42,7 +43,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertTrue(map.size == 0) assertEquals(1, map.put(1, 1).size) @@ -86,7 +87,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { } } - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertTrue(map.keys.isEmpty()) assertTrue(map.values.isEmpty()) @@ -111,7 +112,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun removeTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertTrue(map.put(0, "0").remove(0).isEmpty()) val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -131,7 +132,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun removeEntryTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertTrue(map.put(0, "0").remove(0, "0").isEmpty()) assertFalse(map.put(0, "0").remove(0, "x").isEmpty()) @@ -154,7 +155,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun getTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertEquals("1", map.put(1, "1")[1]) val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -178,7 +179,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun putTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() assertEquals("2", map.put(1, "1").put(1, "2")[1]) val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -211,7 +212,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { @Test fun collisionTests() { - var map = persistentHashMapOf() + var map = emptyPersistentHashMap() val oneWrapper = IntWrapper(1, 1) val twoWrapper = IntWrapper(2, 1) @@ -284,7 +285,7 @@ class PersistentHashMapTest : ExecutionTimeMeasuringTest() { repeat(times = 1) { val mutableMaps = List(10) { hashMapOf() } - val immutableMaps = MutableList(10) { persistentHashMapOf() } + val immutableMaps = MutableList(10) { emptyPersistentHashMap() } val operationCount = NForAlgorithmComplexity.O_NlogN diff --git a/core/commonTest/src/stress/set/PersistentHashSetBuilderTest.kt b/core/commonTest/src/stress/set/PersistentHashSetBuilderTest.kt index 3978b88d..43aa68e8 100644 --- a/core/commonTest/src/stress/set/PersistentHashSetBuilderTest.kt +++ b/core/commonTest/src/stress/set/PersistentHashSetBuilderTest.kt @@ -5,6 +5,7 @@ package tests.stress.set +import kotlinx.collections.immutable.emptyPersistentHashSet import kotlinx.collections.immutable.persistentHashSetOf import tests.NForAlgorithmComplexity import tests.distinctStringValues @@ -20,7 +21,7 @@ import kotlin.test.assertTrue class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() assertTrue(builder.isEmpty()) @@ -40,7 +41,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() assertTrue(builder.size == 0) @@ -64,7 +65,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun storedElementsTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() assertTrue(builder.isEmpty()) val mutableSet = mutableSetOf() @@ -91,7 +92,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun iteratorTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() assertFalse(builder.iterator().hasNext()) val mutableSet = mutableSetOf() @@ -132,7 +133,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun removeTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -150,7 +151,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun containsTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -173,7 +174,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun addTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -192,7 +193,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { } } repeat(times = elementsToAdd) { index -> - for (i in index until elementsToAdd ) { + for (i in index until elementsToAdd) { val element = elementsToAdd - index + i assertTrue(builder.contains(element)) @@ -210,7 +211,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun collisionTests() { - val builder = persistentHashSetOf().builder() + val builder = emptyPersistentHashSet().builder() val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -260,7 +261,7 @@ class PersistentHashSetBuilderTest : ExecutionTimeMeasuringTest() { @Test fun randomOperationsTests() { - val setGen = mutableListOf(List(20) { persistentHashSetOf() }) + val setGen = mutableListOf(List(20) { emptyPersistentHashSet() }) val expected = mutableListOf(List(20) { setOf() }) repeat(times = 5) { diff --git a/core/commonTest/src/stress/set/PersistentHashSetTest.kt b/core/commonTest/src/stress/set/PersistentHashSetTest.kt index e37a31d5..5d13fe3a 100644 --- a/core/commonTest/src/stress/set/PersistentHashSetTest.kt +++ b/core/commonTest/src/stress/set/PersistentHashSetTest.kt @@ -5,6 +5,7 @@ package tests.stress.set +import kotlinx.collections.immutable.emptyPersistentHashSet import kotlinx.collections.immutable.persistentHashSetOf import tests.NForAlgorithmComplexity import tests.distinctStringValues @@ -21,7 +22,7 @@ import kotlin.test.assertTrue class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun isEmptyTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.isEmpty()) assertFalse(set.add(0).isEmpty()) @@ -42,7 +43,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun sizeTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.size == 0) assertEquals(1, set.add(1).size) @@ -67,7 +68,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun storedElementsTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.isEmpty()) val elementsToAdd = NForAlgorithmComplexity.O_NN @@ -93,7 +94,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun removeTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.add(0).remove(0).isEmpty()) val elementsToAdd = NForAlgorithmComplexity.O_NlogN @@ -113,7 +114,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun containsTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.add("1").contains("1")) val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -137,7 +138,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun addTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.add(1).add(1).contains(1)) val elementsToAdd = NForAlgorithmComplexity.O_NNlogN @@ -157,7 +158,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { } } repeat(times = elementsToAdd) { index -> - for (i in index until elementsToAdd ) { + for (i in index until elementsToAdd) { val element = elementsToAdd - index + i assertTrue(set.contains(element)) @@ -175,7 +176,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { @Test fun collisionTests() { - var set = persistentHashSetOf() + var set = emptyPersistentHashSet() assertTrue(set.add(IntWrapper(1, 1)).contains(IntWrapper(1, 1))) @@ -232,7 +233,7 @@ class PersistentHashSetTest : ExecutionTimeMeasuringTest() { repeat(times = 1) { val mutableSets = List(10) { hashSetOf() } - val immutableSets = MutableList(10) { persistentHashSetOf() } + val immutableSets = MutableList(10) { emptyPersistentHashSet() } val operationCount = NForAlgorithmComplexity.O_NlogN diff --git a/core/jvmTest/src/contract/list/PersistentListGenerator.kt b/core/jvmTest/src/contract/list/PersistentListGenerator.kt index a2d95bc7..3bcd58bb 100644 --- a/core/jvmTest/src/contract/list/PersistentListGenerator.kt +++ b/core/jvmTest/src/contract/list/PersistentListGenerator.kt @@ -6,6 +6,7 @@ package tests.contract.list import com.google.common.collect.testing.TestStringListGenerator +import kotlinx.collections.immutable.emptyPersistentList import kotlinx.collections.immutable.mutate import kotlinx.collections.immutable.persistentListOf @@ -19,50 +20,50 @@ class PersistentListGenerator { object AddAll : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf().addAll(elements.toList()) + return emptyPersistentList().addAll(elements.toList()) } } object AddEach : TestStringListGenerator() { override fun create(elements: Array): List { - return elements.fold(persistentListOf()) { list, element -> list.add(element) } + return elements.fold(emptyPersistentList()) { list, element -> list.add(element) } } } object MutateAddAll : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf().mutate { it.addAll(elements.toList()) } + return emptyPersistentList().mutate { it.addAll(elements.toList()) } } } object MutateAddEach : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf().mutate { list -> elements.forEach { list.add(it) } } + return emptyPersistentList().mutate { list -> elements.forEach { list.add(it) } } } } object HeadSubList : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf() - .addAll(listOf(*elements, "f", "g")) - .subList(0, elements.size) + return emptyPersistentList() + .addAll(listOf(*elements, "f", "g")) + .subList(0, elements.size) } } object TailSubList : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf() - .addAll(listOf("f", "g", *elements)) - .subList(2, elements.size + 2) + return emptyPersistentList() + .addAll(listOf("f", "g", *elements)) + .subList(2, elements.size + 2) } } object MiddleSubList : TestStringListGenerator() { override fun create(elements: Array): List { - return persistentListOf() - .addAll(listOf("f", "g", *elements, "h", "i")) - .subList(2, elements.size + 2) + return emptyPersistentList() + .addAll(listOf("f", "g", *elements, "h", "i")) + .subList(2, elements.size + 2) } } @@ -76,19 +77,19 @@ class PersistentListGenerator { object AddAll : TestStringListGenerator() { override fun create(elements: Array): MutableList { - return persistentListOf().builder().apply { this.addAll(elements.toList()) } + return emptyPersistentList().builder().apply { this.addAll(elements.toList()) } } } object AddEach : TestStringListGenerator() { override fun create(elements: Array): MutableList { - return persistentListOf().builder().apply { elements.forEach { this.add(it) } } + return emptyPersistentList().builder().apply { elements.forEach { this.add(it) } } } } object AddAt : TestStringListGenerator() { override fun create(elements: Array): MutableList { - val builder = persistentListOf().builder() + val builder = emptyPersistentList().builder() val list = elements.mapIndexed { i, e -> Pair(i, e) }.toMutableList().apply { shuffle() } list.forEachIndexed { index, pair -> @@ -102,25 +103,25 @@ class PersistentListGenerator { object HeadSubList : TestStringListGenerator() { override fun create(elements: Array): MutableList { - return persistentListOf().builder() - .apply { addAll(listOf(*elements, "f", "g")) } - .subList(0, elements.size) + return emptyPersistentList().builder() + .apply { addAll(listOf(*elements, "f", "g")) } + .subList(0, elements.size) } } object TailSubList : TestStringListGenerator() { override fun create(elements: Array): MutableList { - return persistentListOf().builder() - .apply { addAll(listOf("f", "g", *elements)) } - .subList(2, elements.size + 2) + return emptyPersistentList().builder() + .apply { addAll(listOf("f", "g", *elements)) } + .subList(2, elements.size + 2) } } object MiddleSubList : TestStringListGenerator() { override fun create(elements: Array): MutableList { - return persistentListOf().builder() - .apply { addAll(listOf("f", "g", *elements, "h", "i")) } - .subList(2, elements.size + 2) + return emptyPersistentList().builder() + .apply { addAll(listOf("f", "g", *elements, "h", "i")) } + .subList(2, elements.size + 2) } } } diff --git a/core/jvmTest/src/contract/map/PersistentMapGenerator.kt b/core/jvmTest/src/contract/map/PersistentMapGenerator.kt index 856596a2..449ae65f 100644 --- a/core/jvmTest/src/contract/map/PersistentMapGenerator.kt +++ b/core/jvmTest/src/contract/map/PersistentMapGenerator.kt @@ -6,9 +6,7 @@ package tests.contract.map import com.google.common.collect.testing.TestStringMapGenerator -import kotlinx.collections.immutable.mutate -import kotlinx.collections.immutable.persistentHashMapOf -import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.* class PersistentMapGenerator { object HashMap { @@ -21,26 +19,30 @@ class PersistentMapGenerator { object PutAll : TestStringMapGenerator() { override fun create(entries: Array>): Map { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentHashMapOf().putAll(map) + return emptyPersistentHashMap().putAll(map) } } object PutEach : TestStringMapGenerator() { override fun create(entries: Array>): Map { - return entries.fold(persistentHashMapOf()) { map, entry -> map.put(entry.key, entry.value) } + return entries.fold(emptyPersistentHashMap()) { map, entry -> map.put(entry.key, entry.value) } } } object MutatePutAll : TestStringMapGenerator() { override fun create(entries: Array>): Map { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentHashMapOf().mutate { it.putAll(map) } + return emptyPersistentHashMap().mutate { it.putAll(map) } } } object MutatePutEach : TestStringMapGenerator() { override fun create(entries: Array>): Map { - return persistentHashMapOf().mutate { builder -> entries.forEach { builder[it.key] = it.value } } + return emptyPersistentHashMap().mutate { builder -> + entries.forEach { + builder[it.key] = it.value + } + } } } @@ -54,13 +56,14 @@ class PersistentMapGenerator { object PutAll : TestStringMapGenerator() { override fun create(entries: Array>): MutableMap { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentHashMapOf().builder().apply { putAll(map) } + return emptyPersistentHashMap().builder().apply { putAll(map) } } } object PutEach : TestStringMapGenerator() { override fun create(entries: Array>): MutableMap { - return persistentHashMapOf().builder().apply { entries.forEach { this[it.key] = it.value } } + return emptyPersistentHashMap().builder() + .apply { entries.forEach { this[it.key] = it.value } } } } } @@ -76,26 +79,30 @@ class PersistentMapGenerator { object PutAll : TestStringMapGenerator() { override fun create(entries: Array>): Map { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentMapOf().putAll(map) + return emptyPersistentMap().putAll(map) } } object PutEach : TestStringMapGenerator() { override fun create(entries: Array>): Map { - return entries.fold(persistentMapOf()) { map, entry -> map.put(entry.key, entry.value) } + return entries.fold(emptyPersistentMap()) { map, entry -> map.put(entry.key, entry.value) } } } object MutatePutAll : TestStringMapGenerator() { override fun create(entries: Array>): Map { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentMapOf().mutate { it.putAll(map) } + return emptyPersistentMap().mutate { it.putAll(map) } } } object MutatePutEach : TestStringMapGenerator() { override fun create(entries: Array>): Map { - return persistentMapOf().mutate { builder -> entries.forEach { builder[it.key] = it.value } } + return emptyPersistentMap().mutate { builder -> + entries.forEach { + builder[it.key] = it.value + } + } } } @@ -109,13 +116,14 @@ class PersistentMapGenerator { object PutAll : TestStringMapGenerator() { override fun create(entries: Array>): MutableMap { val map = mutableMapOf().apply { entries.forEach { this[it.key] = it.value } } - return persistentMapOf().builder().apply { putAll(map) } + return emptyPersistentMap().builder().apply { putAll(map) } } } object PutEach : TestStringMapGenerator() { override fun create(entries: Array>): MutableMap { - return persistentMapOf().builder().apply { entries.forEach { this[it.key] = it.value } } + return emptyPersistentMap().builder() + .apply { entries.forEach { this[it.key] = it.value } } } } } diff --git a/core/jvmTest/src/contract/set/PersistentSetGenerator.kt b/core/jvmTest/src/contract/set/PersistentSetGenerator.kt index 2baac54a..95139a55 100644 --- a/core/jvmTest/src/contract/set/PersistentSetGenerator.kt +++ b/core/jvmTest/src/contract/set/PersistentSetGenerator.kt @@ -6,9 +6,7 @@ package tests.contract.set import com.google.common.collect.testing.TestStringSetGenerator -import kotlinx.collections.immutable.mutate -import kotlinx.collections.immutable.persistentHashSetOf -import kotlinx.collections.immutable.persistentSetOf +import kotlinx.collections.immutable.* class PersistentSetGenerator { object HashSet { @@ -20,25 +18,25 @@ class PersistentSetGenerator { object AddAll : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentHashSetOf().addAll(elements.toList()) + return emptyPersistentHashSet().addAll(elements.toList()) } } object AddEach : TestStringSetGenerator() { override fun create(elements: Array): Set { - return elements.fold(persistentHashSetOf()) { set, element -> set.add(element) } + return elements.fold(emptyPersistentHashSet()) { set, element -> set.add(element) } } } object MutateAddAll : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentHashSetOf().mutate { it.addAll(elements) } + return emptyPersistentHashSet().mutate { it.addAll(elements) } } } object MutateAddEach : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentHashSetOf().mutate { builder -> elements.forEach { builder.add(it) } } + return emptyPersistentHashSet().mutate { builder -> elements.forEach { builder.add(it) } } } } @@ -52,13 +50,13 @@ class PersistentSetGenerator { object AddAll : TestStringSetGenerator() { override fun create(elements: Array): MutableSet { - return persistentHashSetOf().builder().apply { addAll(elements) } + return emptyPersistentHashSet().builder().apply { addAll(elements) } } } object AddEach : TestStringSetGenerator() { override fun create(elements: Array): MutableSet { - return persistentHashSetOf().builder().apply { elements.forEach { add(it) } } + return emptyPersistentHashSet().builder().apply { elements.forEach { add(it) } } } } } @@ -74,25 +72,25 @@ class PersistentSetGenerator { object AddAll : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentSetOf().addAll(elements.toList()) + return emptyPersistentSet().addAll(elements.toList()) } } object AddEach : TestStringSetGenerator() { override fun create(elements: Array): Set { - return elements.fold(persistentSetOf()) { set, element -> set.add(element) } + return elements.fold(emptyPersistentSet()) { set, element -> set.add(element) } } } object MutateAddAll : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentSetOf().mutate { it.addAll(elements) } + return emptyPersistentSet().mutate { it.addAll(elements) } } } object MutateAddEach : TestStringSetGenerator() { override fun create(elements: Array): Set { - return persistentSetOf().mutate { builder -> elements.forEach { builder.add(it) } } + return emptyPersistentSet().mutate { builder -> elements.forEach { builder.add(it) } } } } @@ -106,13 +104,13 @@ class PersistentSetGenerator { object AddAll : TestStringSetGenerator() { override fun create(elements: Array): MutableSet { - return persistentSetOf().builder().apply { addAll(elements) } + return emptyPersistentSet().builder().apply { addAll(elements) } } } object AddEach : TestStringSetGenerator() { override fun create(elements: Array): MutableSet { - return persistentSetOf().builder().apply { elements.forEach { add(it) } } + return emptyPersistentSet().builder().apply { elements.forEach { add(it) } } } } } diff --git a/gradle.properties b/gradle.properties index d2050515..03a92afc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,5 @@ version=0.4 versionSuffix=SNAPSHOT org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +kotlin.native.ignoreDisabledTargets=true From 086274c7af95dc4361ec854e3a1a41d04a539679 Mon Sep 17 00:00:00 2001 From: Laxystem Date: Wed, 3 Apr 2024 12:21:32 +0300 Subject: [PATCH 2/4] Renamed empty creation methods; Added map conversion methods Additionally, prevented replaced-withs from ignoring type-paremeters, and added some gradle properties as the library didn't build. --- gradle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle.properties b/gradle.properties index 03a92afc..21c36689 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,5 @@ versionSuffix=SNAPSHOT org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# Apple targets are disabled on non-Mac machines kotlin.native.ignoreDisabledTargets=true From 80ebf6fa9e0b7e88bbfe8d3502b4d0e8c72ad55e Mon Sep 17 00:00:00 2001 From: Laxystem Date: Fri, 8 Nov 2024 14:59:12 +0200 Subject: [PATCH 3/4] Re-added persistentXxxOf() for consistency with the standard library --- core/commonMain/src/extensions.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/commonMain/src/extensions.kt b/core/commonMain/src/extensions.kt index 8f537ced..354ab357 100644 --- a/core/commonMain/src/extensions.kt +++ b/core/commonMain/src/extensions.kt @@ -456,7 +456,6 @@ public fun persistentListOf(vararg elements: E): PersistentList = persist /** * Returns an empty persistent list. */ -@Deprecated("Use emptyPersistentList instead.", ReplaceWith("emptyPersistentList()")) public fun persistentListOf(): PersistentList = emptyPersistentList() @@ -477,7 +476,6 @@ public fun persistentSetOf(vararg elements: E): PersistentSet = Persisten /** * Returns an empty persistent set. */ -@Deprecated("Use emptyPersistentSet instead.", ReplaceWith("emptyPersistentSet()")) public fun persistentSetOf(): PersistentSet = emptyPersistentSet() @@ -498,7 +496,6 @@ public fun persistentHashSetOf(vararg elements: E): PersistentSet = Persi /** * Returns an empty persistent set. */ -@Deprecated("Use emptyPersistentHashSet instead.", ReplaceWith("emptyPersistentHashSet()")) public fun persistentHashSetOf(): PersistentSet = emptyPersistentHashSet() @@ -522,7 +519,6 @@ public fun persistentMapOf(vararg pairs: Pair): PersistentMap /** * Returns an empty persistent map. */ -@Deprecated("Use emptyPersistentMap instead.", ReplaceWith("emptyPersistentMap()")) public fun persistentMapOf(): PersistentMap = emptyPersistentMap() @@ -546,7 +542,6 @@ public fun persistentHashMapOf(vararg pairs: Pair): PersistentMap()")) public fun persistentHashMapOf(): PersistentMap = emptyPersistentHashMap() From 9628a6e9a5f2380d9d24599c25f7c2bc8e6f69ef Mon Sep 17 00:00:00 2001 From: Laxystem Date: Fri, 8 Nov 2024 15:07:18 +0200 Subject: [PATCH 4/4] Fixed warnings, reformatted toXxx functions to be consistent --- core/commonMain/src/extensions.kt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/core/commonMain/src/extensions.kt b/core/commonMain/src/extensions.kt index 354ab357..d2b67b1e 100644 --- a/core/commonMain/src/extensions.kt +++ b/core/commonMain/src/extensions.kt @@ -636,10 +636,10 @@ public fun CharSequence.toImmutableList(): ImmutableList = toPersistentLis * If the receiver is already a persistent list, returns it as is. * If the receiver is a persistent list builder, calls `build` on it and returns the result. */ -public fun Iterable.toPersistentList(): PersistentList = - this as? PersistentList +public fun Iterable.toPersistentList(): PersistentList + = this as? PersistentList ?: (this as? PersistentList.Builder)?.build() - ?: emptyPersistentList() + this + ?: (emptyPersistentList() + this) /** * Returns a persistent list containing all elements of this array. @@ -665,10 +665,10 @@ public fun CharSequence.toPersistentList(): PersistentList = * * Elements of the returned set are iterated in the same order as in this collection. */ -public fun Iterable.toImmutableSet(): ImmutableSet = - this as? ImmutableSet +public fun Iterable.toImmutableSet(): ImmutableSet + = this as? ImmutableSet ?: (this as? PersistentSet.Builder)?.build() - ?: emptyPersistentSet() + this + ?: (emptyPersistentSet() + this) /** * Returns an immutable set of all elements of this array. @@ -700,10 +700,10 @@ public fun CharSequence.toImmutableSet(): PersistentSet = toPersistentSet( * * Elements of the returned set are iterated in the same order as in this collection. */ -public fun Iterable.toPersistentSet(): PersistentSet = - this as? PersistentOrderedSet +public fun Iterable.toPersistentSet(): PersistentSet + = this as? PersistentOrderedSet ?: (this as? PersistentOrderedSetBuilder)?.build() - ?: PersistentOrderedSet.emptyOf() + this + ?: (PersistentOrderedSet.emptyOf() + this) /** * Returns a persistent set of all elements of this array. @@ -737,9 +737,9 @@ public fun CharSequence.toPersistentSet(): PersistentSet = * Order of the elements in the returned set is unspecified. */ public fun Iterable.toPersistentHashSet(): PersistentSet - = this as? PersistentHashSet + = this as? PersistentHashSet ?: (this as? PersistentHashSetBuilder)?.build() - ?: PersistentHashSet.emptyOf() + this + ?: (PersistentHashSet.emptyOf() + this) /** * Returns a persistent set of all elements of this array. @@ -772,8 +772,8 @@ public fun CharSequence.toPersistentHashSet(): PersistentSet = * Entries of the returned map are iterated in the same order as in this map. */ public fun Map.toImmutableMap(): ImmutableMap - = this as? ImmutableMap - ?: (this as? PersistentMap.Builder)?.build() + = this as? ImmutableMap + ?: (this as? PersistentMap.Builder)?.build() ?: emptyPersistentMap().putAll(this) /** @@ -785,7 +785,7 @@ public fun Map.toImmutableMap(): ImmutableMap * Entries of the returned map are iterated in the same order as in this map. */ public fun Map.toPersistentMap(): PersistentMap - = this as? PersistentOrderedMap + = this as? PersistentOrderedMap ?: (this as? PersistentOrderedMapBuilder)?.build() ?: PersistentOrderedMap.emptyOf().putAll(this) @@ -797,7 +797,7 @@ public fun Map.toPersistentMap(): PersistentMap * * Order of the entries in the returned map is unspecified. */ -public fun Map.toPersistentHashMap(): PersistentMap +public fun Map.toPersistentHashMap(): PersistentMap = this as? PersistentHashMap ?: (this as? PersistentHashMapBuilder)?.build() ?: PersistentHashMap.emptyOf().putAll(this)