Skip to content

Commit 5615dc7

Browse files
committed
Test stdlib-bootstrpped ScalaNumericConversions.underlying
1 parent 69081e6 commit 5615dc7

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

project/TastyMiMaFilters.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ object TastyMiMaFilters {
3232
// Problem? Very complicated signature
3333
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.generic.IsMap.mapOpsIsMap"),
3434

35-
// Problem: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`)
35+
// Probably OK: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`)
36+
// Calls to the underlying seem to link correctly.
37+
// Tested in stdlib-bootstrapped/test/Main.scala
3638
ProblemMatcher.make(ProblemKind.MissingTermMember, "scala.math.Big*.underlying"),
3739
ProblemMatcher.make(ProblemKind.NewAbstractMember, "scala.math.ScalaNumericConversions.underlying"),
3840

stdlib-bootstrapped/test/Main.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
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

Comments
 (0)