@@ -16,6 +16,7 @@ object HelloWorld:
1616 testScala2UnapplySignatures()
1717 testScala2ObjectParents()
1818 testScala2CaseClassUnderscoreMembers()
19+ testScalaNumberUnderlying()
1920 }
2021
2122 def testScala2UnapplySignatures () = {
@@ -37,3 +38,32 @@ object HelloWorld:
3738 val some : Some [Int ] = Some (1 )
3839 // FIXME: assert(!typeChecks("some._1"))
3940 }
41+
42+ def testScalaNumberUnderlying () = {
43+ import scala .math .{ScalaNumericConversions , ScalaNumber }
44+
45+ val _: java.math.BigInteger = BigInt (1 ).underlying
46+ val _: Object = (BigInt (1 ): ScalaNumericConversions ).underlying
47+ val _: Object = (BigInt (1 ): ScalaNumber ).underlying
48+
49+ // val _: java.math.BigDecimal = BigDecimal(1).underlying // FIXME: inferred result type of non-private method
50+ val _: Object = (BigDecimal (1 ): ScalaNumericConversions ).underlying
51+ val _: Object = (BigDecimal (1 ): ScalaNumber ).underlying
52+
53+ class MyNumber1 (override val underlying : BigInt ) extends ScalaNumericConversions {
54+ def doubleValue : Double = ??? ; def floatValue : Float = ??? ;
55+ def intValue : Int = ??? ; def longValue : Long = ???
56+ def isWhole : Boolean = ???
57+ }
58+ val _: BigInt = MyNumber1 (1 ).underlying
59+ val _: Object = (MyNumber1 (1 ): ScalaNumericConversions ).underlying
60+ val _: Object = (MyNumber1 (1 ): ScalaNumber ).underlying
61+
62+ class MyNumber2 (override val underlying : Object ) extends ScalaNumber {
63+ def doubleValue : Double = ??? ; def floatValue : Float = ??? ;
64+ def intValue : Int = ??? ; def longValue : Long = ???
65+ def isWhole : Boolean = ???
66+ }
67+ val _: Object = MyNumber2 (BigInt (1 )).underlying
68+ val _: Object = (MyNumber2 (BigInt (1 )): ScalaNumber ).underlying
69+ }
0 commit comments