blob: f0338eaa9e7a059920bcf1239aeedd824c71619a [file]
/*
* Copyright 2010-2018 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.utils
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class HashCodeTest {
@Test
fun hashCodeOfNull() {
assertEquals(0, null.hashCode())
val foo: Any? = null
assertEquals(0, foo.hashCode())
}
@Test
fun hashCodeOfNotNull() {
val value = "test"
val nullableValue: String? = value
assertEquals(value.hashCode(), nullableValue.hashCode())
}
// KT-86954: all NaN bit patterns must produce the same hash code, matching equals() semantics.
@Test
fun hashCodeOfNaN() {
val canonicalDoubleNaN = Double.NaN
val otherDoubleNaN = Double.fromBits(canonicalDoubleNaN.toBits() or 1L)
assertTrue(otherDoubleNaN.isNaN())
assertTrue(canonicalDoubleNaN.equals(otherDoubleNaN))
assertEquals(canonicalDoubleNaN.hashCode(), otherDoubleNaN.hashCode())
val canonicalFloatNaN = Float.NaN
val otherFloatNaN = Float.fromBits(0xFFFC0000.toInt())
assertTrue(otherFloatNaN.isNaN())
assertTrue(canonicalFloatNaN.equals(otherFloatNaN))
assertEquals(canonicalFloatNaN.hashCode(), otherFloatNaN.hashCode())
}
}