Skip to content

Commit ef2ba46

Browse files
committed
Make BigDecimalFromDigits FromDigits.Floating[BigDecimal]
The given instance in FromDigits for BigDecimal was incorrectly ignoring exponents in number literals, This commit instead allows exponents in BigDecimal literals, and adds a test.
1 parent 0f7a85b commit ef2ba46

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

library/src/scala/util/FromDigits.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ object FromDigits {
158158
def fromDigits(digits: String, radix: Int): BigInt = BigInt(digits, radix)
159159
}
160160

161-
given BigDecimalFromDigits : FromDigits.Decimal[BigDecimal] {
161+
given BigDecimalFromDigits : FromDigits.Floating[BigDecimal] {
162162
def fromDigits(digits: String): BigDecimal = BigDecimal(digits)
163163
}
164164
}

tests/run/genericNumLits.check

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
13232202002020202020202
22
-50390822187678765893036
33
132322020020.223
4+
1.00000000000000001234E+239
5+
1.00000000000000001234E-203
46
Even(1234)
57
malformed

tests/run/genericNumLits.scala

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ object Test extends App {
44
val x: BigInt = 13232202002020202020202
55
val y: BigInt = -0xaabb12345ACF12345AC
66
val z: BigDecimal = 132322020020.223
7+
val w: BigDecimal = 10000000000000000.1234e223
8+
val q: BigDecimal = 100000000000000001234e-223
79

810
case class Even(n: Int)
911

@@ -20,6 +22,8 @@ object Test extends App {
2022
println(x)
2123
println(y)
2224
println(z)
25+
println(w)
26+
println(q)
2327
println(e)
2428

2529
try println(123: Even)
@@ -45,6 +49,18 @@ object Test extends App {
4549
(z: Any) match {
4650
case 132_322_020_020.223: BigDecimal => ()
4751
}
52+
w match {
53+
case 10000000000000000.1234e223 => ()
54+
}
55+
(w: Any) match {
56+
case 10_000_000_000_000_000.1234e223: BigDecimal => ()
57+
}
58+
q match {
59+
case 100000000000000001234e-223 => ()
60+
}
61+
(q: Any) match {
62+
case 100_000_000_000_000_001_234e-223: BigDecimal => ()
63+
}
4864

4965
e match {
5066
case 1234 =>
@@ -54,4 +70,4 @@ object Test extends App {
5470
case 1234: Even =>
5571
case _: Even =>
5672
}
57-
}
73+
}

0 commit comments

Comments
 (0)