object Test {
  def confirmSame(x: Any)       = assert(x.## == x.hashCode, "%s.## != %s.hashCode".format(x, x))
  def confirmDifferent(x: Any)  = assert(x.## != x.hashCode, "%s.## == %s.hashCode (but should not)".format(x, x))
    
  def main(args: Array[String]): Unit = {
    /** Just a little sanity check, not to be confused with a unit test. */
    List(5, 5.5f, "abc", new AnyRef, ()) foreach confirmSame
    List(5.0f, 1.0d, -(5.0f), (-1.0d)) foreach confirmDifferent

    val x = (BigInt(1) << 64).toDouble
    val y: Any = x
    val f: Float = x.toFloat
    val jn: java.lang.Number = x
    val jf: java.lang.Float = x.toFloat
    val jd: java.lang.Double = x

    assert(x.## == y.##, ((x, y)))
    assert(x.## == f.##, ((x, f)))
    assert(x.## == jn.##, ((x, jn)))
    assert(x.## == jf.##, ((x, jf)))
    assert(x.## == jd.##, ((x, jd)))
  }
}
