import scala.tools.partest.DirectTest
// Test of Constant#equals, which must must account for floating point intricacies.
object Test extends DirectTest {
override def code = ""
override def show() {
val global = newCompiler()
import global._
def check(c1: Any, c2: Any): Unit = {
val const1 = Constant(c1)
val const2 = Constant(c2)
val equal = const1 == const2
def show(a: Any) = "" + a + (a match {
case _: Byte => ".toByte"
case _: Short => ".toShort"
case _: Long => "L"
case _: Float => "f"
case _: Double => "d"
case _ => ""
})
val op = if (equal) "==" else "!="
println(f"${show(c1)}%12s $op ${show(c2)}")
val hash1 = const1.hashCode
val hash2 = const2.hashCode
val hashesEqual = hash1 == hash2
val hashBroken = equal && !hashesEqual
if (hashBroken) println(f"$hash1%12s != $hash2 // hash codes differ for equal objects!!")
}
check((), ())
check(true, true)
check(true, false)
check(false, true)
check(0.toByte, 0.toByte)
check(0.toByte, 1.toByte)
check(0.toShort, 0.toShort)
check(0.toShort, 1.toShort)
check(0, 0)
check(0, 1)
check(0L, 0L)
check(0L, 1L)
check(0f, 0f)
check(0f, -0f)
check(-0f, 0f)
check(Float.NaN, Float.NaN)
check(0d, 0d)
check(0d, -0d)
check(-0d, 0d)
check(Double.NaN, Double.NaN)
check(0, 0d)
check(0, 0L)
check(0d, 0f)
}
}