| /* | |
| * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. | |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. | |
| */ | |
| package test.collections | |
| import kotlin.test.* | |
| class HashMapCompactTest { | |
| // KT-68298 | |
| private fun MutableMap<IntWrapper, String?>.performOperations() { | |
| put(IntWrapper(0, -817396920), null) | |
| remove(IntWrapper(0, -817396920)) | |
| put(IntWrapper(1, -916290166), null) | |
| put(IntWrapper(2, 118902548), null) | |
| put(IntWrapper(3, 1934947075), null) | |
| remove(IntWrapper(1, -916290166)) | |
| remove(IntWrapper(2, 118902548)) | |
| put(IntWrapper(4, 850555370), null) | |
| put(IntWrapper(5, -1166066571), null) | |
| remove(IntWrapper(3, 1934947075)) | |
| put(IntWrapper(6, -2124713199), null) | |
| remove(IntWrapper(4, 850555370)) | |
| put(IntWrapper(7, -89778600), null) | |
| remove(IntWrapper(5, -1166066571)) | |
| put(IntWrapper(8, -1000638164), null) | |
| put(IntWrapper(9, 2034798242), null) | |
| put(IntWrapper(10, 229182579), null) | |
| put(IntWrapper(11, -1899382535), null) | |
| put(IntWrapper(12, 1289438843), null) | |
| remove(IntWrapper(6, -2124713199)) | |
| put(IntWrapper(13, 1640889315), null) | |
| remove(IntWrapper(7, -89778600)) | |
| put(IntWrapper(14, -1496052769), null) | |
| remove(IntWrapper(8, -1000638164)) | |
| put(IntWrapper(15, -991527647), null) | |
| put(IntWrapper(16, -415676369), null) | |
| remove(IntWrapper(9, 2034798242)) | |
| put(IntWrapper(17, 319443917), null) | |
| put(IntWrapper(18, -2051627686), null) | |
| put(IntWrapper(19, 1448073074), null) | |
| remove(IntWrapper(10, 229182579)) | |
| put(IntWrapper(20, 1230791638), null) | |
| put(IntWrapper(21, 765663141), null) | |
| remove(IntWrapper(11, -1899382535)) | |
| put(IntWrapper(22, 915046512), null) | |
| put(IntWrapper(23, -1622293756), null) | |
| put(IntWrapper(24, -1359721457), null) | |
| put(IntWrapper(25, 505867256), null) | |
| put(IntWrapper(26, 682358694), null) | |
| put(IntWrapper(27, 1100100510), null) | |
| put(IntWrapper(28, -1802524149), null) | |
| put(IntWrapper(29, 513102170), null) | |
| put(IntWrapper(30, 29546930), null) | |
| remove(IntWrapper(12, 1289438843)) | |
| remove(IntWrapper(13, 1640889315)) | |
| remove(IntWrapper(14, -1496052769)) | |
| put(IntWrapper(31, -2033155453), null) | |
| put(IntWrapper(32, 1489147928), null) | |
| put(IntWrapper(33, -1535829019), null) | |
| remove(IntWrapper(15, -991527647)) | |
| put(IntWrapper(34, -721039104), null) | |
| put(IntWrapper(35, -511394113), null) | |
| put(IntWrapper(36, 1853950035), null) | |
| put(IntWrapper(37, -1820540578), null) | |
| put(IntWrapper(38, -942256591), null) | |
| put(IntWrapper(39, 846308925), null) | |
| put(IntWrapper(40, 59966988), null) | |
| put(IntWrapper(41, 2141357595), null) | |
| remove(IntWrapper(16, -415676369)) | |
| put(IntWrapper(42, 2133636554), null) | |
| remove(IntWrapper(17, 319443917)) | |
| remove(IntWrapper(18, -2051627686)) | |
| remove(IntWrapper(19, 1448073074)) | |
| put(IntWrapper(43, 801662087), null) | |
| put(IntWrapper(44, 1332044799), null) | |
| put(IntWrapper(45, 1956322459), null) | |
| put(IntWrapper(46, -1576449428), null) | |
| put(IntWrapper(47, 1979534318), null) | |
| remove(IntWrapper(20, 1230791638)) | |
| put(IntWrapper(48, 325807527), null) | |
| remove(IntWrapper(21, 765663141)) | |
| remove(IntWrapper(22, 915046512)) | |
| put(IntWrapper(49, -117048588), null) | |
| put(IntWrapper(50, -1034664289), null) | |
| put(IntWrapper(51, -331316176), null) | |
| put(IntWrapper(52, -1469321797), null) | |
| } | |
| @Test | |
| fun kt68298() { | |
| val _ = buildMap { performOperations() } | |
| HashMap<IntWrapper, String?>().performOperations() | |
| LinkedHashMap<IntWrapper, String?>().performOperations() | |
| } | |
| } | |
| private class IntWrapper(val value: Int, val hash: Int) { | |
| override fun hashCode(): Int = hash | |
| override fun equals(other: Any?): Boolean { | |
| if (other !is IntWrapper) { | |
| return false | |
| } | |
| check(value != other.value || hash == other.hash) // if elements are equal hashCodes must be equal | |
| return value == other.value | |
| } | |
| } |