Skip to content

Commit 0a4b6ec

Browse files
[chore]: Add regression tests for #23237 (#23405)
Adds regression tests for #23237 to prevent reintroducing regression from #21744
1 parent 7061975 commit 0a4b6ec

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

tests/pos/i23237a.scala

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
sealed trait Dim
2+
trait _2D extends Dim
3+
trait _3D extends Dim
4+
5+
sealed abstract class IntVector[D]
6+
object IntVector{
7+
def apply[D](d: Array[Int]): IntVector[D] = ???
8+
def apply(x: Int, y: Int): IntVector2D = IntVector2D(x, y)
9+
def apply(x: Int, y: Int, z: Int): IntVector3D = IntVector3D(x, y, z)
10+
}
11+
case class IntVector2D(i: Int, j: Int) extends IntVector[_2D]
12+
case class IntVector3D(i: Int, j: Int, k: Int) extends IntVector[_3D]
13+
14+
type DiscreteImage[D, A] = DiscreteField[D, DiscreteImageDomain, A]
15+
class DiscreteField[D, DDomain[D] <: DiscreteDomain[D], A](val domain: DDomain[D], val data: IndexedSeq[A]) extends PartialFunction[PointId, A] {
16+
override def apply(v1: PointId) = ???
17+
override def isDefinedAt(ptId: PointId) = ???
18+
}
19+
object DiscreteField{
20+
implicit class DiscreteImageOps[D, A](discreteField: DiscreteField[D, DiscreteImageDomain, A]) {
21+
def apply(idx: IntVector[D]): A = ???
22+
def isDefinedAt(idx: IntVector[D]): Boolean = ???
23+
}
24+
}
25+
trait DiscreteDomain[D]
26+
trait DiscreteImageDomain[D] extends DiscreteDomain[D]
27+
final case class PointId(id: Int) extends AnyVal
28+
29+
def test[S](img: DiscreteImage[_3D, S]) = img(IntVector(1, 2, 3))

tests/pos/i23237b.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
object types{
2+
final case class vec2(x: Float, y: Float)
3+
final case class vec4(x: Float, y: Float, z: Float, w: Float)
4+
object vec4:
5+
def apply(xy: vec2, z: Float, w: Float): vec4 = vec4(xy.x, xy.y, z, w)
6+
7+
opaque type Shader[In, Out] = In => Out
8+
object Shader:
9+
inline def apply[In, Out](f: In => Out): Shader[In, Out] = f
10+
inline def apply[In](f: In => Unit): Shader[In, Unit] = f
11+
inline def apply(body: => Any): Shader[Unit, Unit] = (_: Unit) => body
12+
}
13+
import types.*
14+
15+
class GLSLEnvTests {
16+
case class FragEnv(UV: vec2)
17+
18+
inline def fragment: Shader[FragEnv, vec4] =
19+
Shader { env =>
20+
val x = env.UV
21+
vec4(env.UV, 0.0f, 1.0f)
22+
}
23+
}

0 commit comments

Comments
 (0)