From 5e5735b73d5006ab7d865f1756fb0b7063179a22 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 28 Jun 2023 13:01:59 +0200 Subject: [PATCH] Test stdlib-bootstrpped ScalaNumericConversions.underlying --- project/TastyMiMaFilters.scala | 4 ++- .../src/Main.scala | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/project/TastyMiMaFilters.scala b/project/TastyMiMaFilters.scala index 7a1fb0545f23..95eeb531958a 100644 --- a/project/TastyMiMaFilters.scala +++ b/project/TastyMiMaFilters.scala @@ -63,7 +63,9 @@ object TastyMiMaFilters { // Problem? Very complicated signature ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.generic.IsMap.mapOpsIsMap"), - // Problem: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`) + // Probably OK: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`) + // Calls to the underlying seem to link correctly. + // Tested in stdlib-bootstrapped/test/Main.scala ProblemMatcher.make(ProblemKind.MissingTermMember, "scala.math.Big*.underlying"), ProblemMatcher.make(ProblemKind.NewAbstractMember, "scala.math.ScalaNumericConversions.underlying"), diff --git a/stdlib-bootstrapped-tasty-tests/src/Main.scala b/stdlib-bootstrapped-tasty-tests/src/Main.scala index 1ac8203cbdeb..ca72be1e9248 100644 --- a/stdlib-bootstrapped-tasty-tests/src/Main.scala +++ b/stdlib-bootstrapped-tasty-tests/src/Main.scala @@ -16,6 +16,7 @@ object HelloWorld: testScala2UnapplySignatures() testScala2ObjectParents() testScala2CaseClassUnderscoreMembers() + testScalaNumberUnderlying() } def testScala2UnapplySignatures() = { @@ -37,3 +38,32 @@ object HelloWorld: val some: Some[Int] = Some(1) // FIXME: assert(!typeChecks("some._1")) } + + def testScalaNumberUnderlying() = { + import scala.math.{ScalaNumericConversions, ScalaNumber} + + val _: java.math.BigInteger = BigInt(1).underlying + val _: Object = (BigInt(1): ScalaNumericConversions).underlying + val _: Object = (BigInt(1): ScalaNumber).underlying + + // val _: java.math.BigDecimal = BigDecimal(1).underlying // FIXME: inferred result type of non-private method + val _: Object = (BigDecimal(1): ScalaNumericConversions).underlying + val _: Object = (BigDecimal(1): ScalaNumber).underlying + + class MyNumber1(override val underlying: BigInt) extends ScalaNumericConversions { + def doubleValue: Double = ???; def floatValue: Float = ???; + def intValue: Int = ???; def longValue: Long = ??? + def isWhole: Boolean = ??? + } + val _: BigInt = MyNumber1(1).underlying + val _: Object = (MyNumber1(1): ScalaNumericConversions).underlying + val _: Object = (MyNumber1(1): ScalaNumber).underlying + + class MyNumber2(override val underlying: Object) extends ScalaNumber { + def doubleValue: Double = ???; def floatValue: Float = ???; + def intValue: Int = ???; def longValue: Long = ??? + def isWhole: Boolean = ??? + } + val _: Object = MyNumber2(BigInt(1)).underlying + val _: Object = (MyNumber2(BigInt(1)): ScalaNumber).underlying + }