Skip to content

Commit 401742a

Browse files
Merge pull request #6675 from dotty-staging/add-scala-days-2019-regression-tests
Add regression tests
2 parents 8ae3a1d + b945933 commit 401742a

8 files changed

+175
-0
lines changed

compiler/test/dotc/pos-test-pickling.blacklist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ t3249
99
t3486
1010
t3612.scala
1111
reference
12+
scala-days-2019-slides
1213

1314
# type of super reference changes due to late addition of Mirror.Singleton
1415
i939.scala
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
object ForSetExample {
2+
3+
import scala.collection.immutable._
4+
5+
inline def setFor[T]: Set[T] =
6+
implicit match {
7+
case ord: Ordering[T] => new TreeSet[T]
8+
case _ => new HashSet[T]
9+
}
10+
11+
setFor[String] // new TreeSet(scala.math.Ordering.String)
12+
setFor[Object] // new HashSet
13+
14+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
object Logger {
2+
3+
var indent = 0
4+
5+
inline def log[T](msg: String)(op: => T): T = {
6+
println(s"${" " * indent}start $msg")
7+
indent += 1
8+
val result = op
9+
indent -= 1
10+
println(s"${" " * indent}$msg = $result")
11+
result
12+
}
13+
}
14+
15+
object Logger2 {
16+
17+
private var indent = 0
18+
// def inline$indent: Int = indent
19+
// def inline$indent_=(x$0: Int): Unit = indent = x$0
20+
21+
inline def log[T](msg: String)(op: => T): T = {
22+
println(s"${" " * indent}start $msg")
23+
indent += 1 // inline$indent = inline$indent + 1
24+
25+
val result = op
26+
indent -= 1 // inline$indent = inline$indent - 1
27+
println(s"${" " * indent}$msg = $result")
28+
result
29+
}
30+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
object App {
2+
3+
trait Nat
4+
case object Zero extends Nat
5+
case class Succ[N <: Nat](n: N) extends Nat
6+
7+
inline def toInt(n: => Nat): Int = inline n match {
8+
case Zero => 0
9+
case Succ(n1) => toInt(n1) + 1
10+
}
11+
12+
val natTwo = toInt(Succ(Succ(Zero)))
13+
14+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
object App2 {
2+
3+
inline def power(x: Long, n: Int): Long = {
4+
if (n == 0)
5+
1L
6+
else if (n % 2 == 1)
7+
x * power(x, n - 1)
8+
else {
9+
val y: Long = x * x
10+
power(y, n / 2)
11+
}
12+
}
13+
14+
val x: Long = 5L
15+
16+
power(x, 10)
17+
18+
// def badPower(x: Long, n: Int): Long = {
19+
// power(x, n) // error: Maximal number of successive inlines (32) exceeded, Maybe this is caused by a recursive inline method?
20+
// }
21+
22+
}
23+
24+
object App3 {
25+
26+
inline def power(x: Long, inline n: Int): Long = {
27+
if (n == 0)
28+
1L
29+
else if (n % 2 == 1)
30+
x * power(x, n - 1)
31+
else {
32+
val y: Long = x * x
33+
power(y, n / 2)
34+
}
35+
}
36+
37+
val x: Long = 5L
38+
val n: Int = 10
39+
40+
power(x, 10)
41+
42+
// def badPower(x: Long, n: Int): Long = {
43+
// power(x, n) // error: argument to inline parameter must be a known value
44+
// }
45+
46+
}
47+
48+
49+
object App4 {
50+
51+
inline def power(x: Long, n: Int): Long = {
52+
inline if (n == 0)
53+
1L
54+
else inline if (n % 2 == 1)
55+
x * power(x, n - 1)
56+
else {
57+
val y: Long = x * x
58+
power(y, n / 2)
59+
}
60+
}
61+
62+
val x: Long = 5L
63+
val n: Int = 10
64+
65+
power(x, 10)
66+
67+
// def badPower(x: Long, n: Int): Long = {
68+
// power(x, n) // error: cannot reduce inline if
69+
// }
70+
71+
}
72+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
object JS {
2+
3+
object dom {
4+
type Event
5+
type MouseEvent <: Event
6+
}
7+
8+
type EventTypeOf[Tp <: String] <: dom.Event = Tp match {
9+
case "click" => dom.MouseEvent
10+
case _ => dom.Event
11+
}
12+
13+
def addEventListener[Tp <: String, Ev <: EventTypeOf[Tp]](tpe: Tp)(e: Ev => Any): Unit = ???
14+
15+
addEventListener("click") { (e: dom.MouseEvent) => ??? }
16+
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
object ElemExample {
2+
3+
type Elem[X] = X match {
4+
case String => Char
5+
case Array[t] => t
6+
case Iterable[t] => t
7+
}
8+
9+
10+
the[Elem[String] =:= Char]
11+
the[Elem[Array[Int]] =:= Int]
12+
the[Elem[List[Float]] =:= Float]
13+
the[Elem[Nil.type] =:= Nothing]
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
object TupleExample {
2+
import Tuple._
3+
4+
type A
5+
type B
6+
type C
7+
8+
the[Concat[A *: B *: Unit, C *: Unit] =:= A *: B *: C *: Unit]
9+
10+
the[Concat[A *: B *: Unit, C *: Tuple] =:= A *: B *: C *: Tuple]
11+
12+
the[Concat[A *: B *: Tuple, C *: Unit] <:< A *: B *: Tuple]
13+
}

0 commit comments

Comments
 (0)