Skip to content

Commit

Permalink
Merge pull request #9427 from da-tubi/test/constantFolder
Browse files Browse the repository at this point in the history
  • Loading branch information
dwijnand committed Jan 15, 2021
2 parents 1013b54 + 40ff6f3 commit 1fd50aa
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions test/junit/scala/tools/nsc/typechecker/ConstantFolderTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package scala.tools.nsc.typechecker

import org.junit.Test
import org.junit.Assert.assertTrue

import scala.tools.testkit.BytecodeTesting


class ConstantFolderTest extends BytecodeTesting {
import compiler._
import global._

override def compilerArgs = "-Ystop-after:typer"

def literalValDefAssert(tree: Tree, name: String, constant: Constant): Unit = {
val valDef: ValDef = tree.collect {
case node @ ValDef(_, _, _, _) if node.name.decodedName.toString.trim == name =>
node
}.head

assertTrue {
valDef.collect { case node @ Literal(constant) => node }.nonEmpty
}
}

@Test
def testStringFolder(): Unit = {
val code =
"""object O {
| final val x = "123" + "Scala"
|}
""".stripMargin
val run = compiler.newRun()
run.compileSources(List(BytecodeTesting.makeSourceFile(code, "UnitTestSource.scala")))
val tree = run.units.next().body
literalValDefAssert(tree, "x", Constant("123Scala"))
}

@Test
def testBooleanFolder(): Unit = {
val code =
"""object O {
| final val x0 = true && true
| final val x1 = true && false
| final val x2 = false && true
| final val x3 = false && false
| final val x4 = true || true
| final val x5 = true || false
| final val x6 = false || true
| final val x7 = false || false
|}
""".stripMargin
val run = compiler.newRun()
run.compileSources(List(BytecodeTesting.makeSourceFile(code, "UnitTestSource.scala")))
val tree = run.units.next().body
literalValDefAssert(tree, "x0", Constant(true))
literalValDefAssert(tree, "x1", Constant(false))
literalValDefAssert(tree, "x2", Constant(false))
literalValDefAssert(tree, "x3", Constant(false))
literalValDefAssert(tree, "x4", Constant(true))
literalValDefAssert(tree, "x5", Constant(true))
literalValDefAssert(tree, "x6", Constant(true))
literalValDefAssert(tree, "x7", Constant(false))
}
}

0 comments on commit 1fd50aa

Please sign in to comment.