Skip to content

Commit 85b5e02

Browse files
committed
Add pending tests
Some tests for issues that have not been fixed
1 parent d2eeef1 commit 85b5e02

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

tests/pending/pos/i15915.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class _Monoid[A]
2+
object _Monoid {
3+
implicit val Monoid: _Monoid[Int] = new _Monoid[Int]
4+
}
5+
6+
class Lifecycle[A]
7+
object Lifecycle {
8+
9+
implicit def monoidForLifecycle[Monoid[_], A](
10+
implicit
11+
monoidType: GetMonoidType[Monoid],
12+
monoidA: Monoid[A]
13+
): Monoid[Lifecycle[A]] = new _Monoid().asInstanceOf[Monoid[Lifecycle[A]]]
14+
15+
}
16+
17+
sealed class GetMonoidType[C[_]]
18+
object GetMonoidType {
19+
implicit val getMonoid: GetMonoidType[_Monoid] = new GetMonoidType[_Monoid]
20+
}
21+
22+
object App extends App {
23+
println(implicitly[_Monoid[Lifecycle[Int]]])
24+
}

tests/pending/pos/i15926.scala

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//@main def main(): Unit =
2+
// println(summon[Sum[Minus[Succ[Zero]], Minus[Succ[Zero]]] =:= Minus[Succ[Succ[Zero]]]])
3+
4+
sealed trait IntT
5+
sealed trait NatT extends IntT
6+
final case class Zero() extends NatT
7+
final case class Succ[+N <: NatT](n: N) extends NatT
8+
final case class Minus[+N <: Succ[NatT]](n: N) extends IntT
9+
10+
type NatSum[X <: NatT, Y <: NatT] <: NatT = Y match
11+
case Zero => X
12+
case Succ[y] => NatSum[Succ[X], y]
13+
14+
type NatDif[X <: NatT, Y <: NatT] <: IntT = Y match
15+
case Zero => X
16+
case Succ[y] => X match
17+
case Zero => Minus[Y]
18+
case Succ[x] => NatDif[x, y]
19+
20+
type Sum[X <: IntT, Y <: IntT] <: IntT = Y match
21+
case Zero => X
22+
case Minus[y] => X match
23+
case Minus[x] => Minus[NatSum[x, y]]
24+
case _ => NatDif[X, y]
25+
case _ => X match
26+
case Minus[x] => NatDif[Y, x]
27+
case _ => NatSum[X, Y]
28+
29+
def test =
30+
val x: Sum[Minus[Succ[Zero]], Minus[Succ[Zero]]] = ???
31+
val y = x

tests/pending/run/i15893.scala

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
sealed trait NatT
2+
case class Zero() extends NatT
3+
case class Succ[+N <: NatT](n: N) extends NatT
4+
5+
type Mod2[N <: NatT] <: NatT = N match
6+
case Zero => Zero
7+
case Succ[Zero] => Succ[Zero]
8+
case Succ[Succ[predPredN]] => Mod2[predPredN]
9+
10+
11+
def mod2(n: NatT): NatT = n match
12+
case Zero() => Zero()
13+
case Succ(Zero()) => Succ(Zero())
14+
case Succ(Succ(predPredN)) => mod2(predPredN)
15+
16+
/*
17+
inline def inlineMod2(inline n: NatT): NatT = inline n match
18+
case Zero() => Zero()
19+
case Succ(Zero()) => Succ(Zero())
20+
case Succ(Succ(predPredN)) => inlineMod2(predPredN)
21+
22+
transparent inline def transparentInlineMod2(inline n: NatT): NatT = inline n match
23+
case Zero() => Zero()
24+
case Succ(Zero()) => Succ(Zero())
25+
case Succ(Succ(predPredN)) => transparentInlineMod2(predPredN)
26+
*/
27+
def dependentlyTypedMod2[N <: NatT](n: N): Mod2[N] = n match // exhaustivity warning; unexpected
28+
case Zero(): Zero => Zero()
29+
case Succ(Zero()): Succ[Zero] => Succ(Zero())
30+
case Succ(Succ(predPredN)): Succ[Succ[_]] => dependentlyTypedMod2(predPredN)
31+
/*
32+
inline def inlineDependentlyTypedMod2[N <: NatT](inline n: N): Mod2[N] = inline n match
33+
case Zero(): Zero => Zero()
34+
case Succ(Zero()): Succ[Zero] => Succ(Zero())
35+
case Succ(Succ(predPredN)): Succ[Succ[_]] => inlineDependentlyTypedMod2(predPredN)
36+
37+
transparent inline def transparentInlineDependentlyTypedMod2[N <: NatT](inline n: N): Mod2[N] = inline n match
38+
case Zero(): Zero => Zero()
39+
case Succ(Zero()): Succ[Zero] => Succ(Zero())
40+
case Succ(Succ(predPredN)): Succ[Succ[_]] => transparentInlineDependentlyTypedMod2(predPredN)
41+
42+
def foo(n: NatT): NatT = mod2(n) match
43+
case Succ(Zero()) => Zero()
44+
case _ => n
45+
46+
inline def inlineFoo(inline n: NatT): NatT = inline inlineMod2(n) match
47+
case Succ(Zero()) => Zero()
48+
case _ => n
49+
50+
inline def transparentInlineFoo(inline n: NatT): NatT = inline transparentInlineMod2(n) match
51+
case Succ(Zero()) => Zero()
52+
case _ => n
53+
*/
54+
@main def main(): Unit =
55+
/*
56+
println(mod2(Succ(Succ(Succ(Zero()))))) // prints Succ(Zero()), as expected
57+
println(foo(Succ(Succ(Succ(Zero()))))) // prints Zero(), as expected
58+
println(inlineMod2(Succ(Succ(Succ(Zero()))))) // prints Succ(Zero()), as expected
59+
println(inlineFoo(Succ(Succ(Succ(Zero()))))) // prints Succ(Succ(Succ(Zero()))); unexpected
60+
println(transparentInlineMod2(Succ(Succ(Succ(Zero()))))) // prints Succ(Zero()), as expected
61+
println(transparentInlineFoo(Succ(Succ(Succ(Zero()))))) // prints Zero(), as expected
62+
*/
63+
println(dependentlyTypedMod2(Succ(Succ(Succ(Zero()))))) // runtime error; unexpected
64+
// println(inlineDependentlyTypedMod2(Succ(Succ(Succ(Zero()))))) // doesn't compile; unexpected
65+
// println(transparentInlineDependentlyTypedMod2(Succ(Succ(Succ(Zero()))))) // doesn't compile; unexpected

0 commit comments

Comments
 (0)