| /* | |
| * 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()) | |
| } | |
| } |