From acbfac7eeee172431ee8346159b6e23432c5a23c Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Wed, 13 Apr 2016 19:27:30 +0200 Subject: [PATCH] Test transitive transformation of classes --- .../DefinitionTransformerSuite.scala | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/test/scala/leon/unit/purescala/DefinitionTransformerSuite.scala b/src/test/scala/leon/unit/purescala/DefinitionTransformerSuite.scala index 88e9aea53..cf7a1dbed 100644 --- a/src/test/scala/leon/unit/purescala/DefinitionTransformerSuite.scala +++ b/src/test/scala/leon/unit/purescala/DefinitionTransformerSuite.scala @@ -17,10 +17,10 @@ class DefinitionTransformerSuite extends FunSuite with ExpressionsDSL { private val fd1 = new FunDef(FreshIdentifier("f1"), Seq(), Seq(ValDef(x.id)), IntegerType) fd1.body = Some(x) - private val fd2 = new FunDef(FreshIdentifier("f1"), Seq(), Seq(ValDef(x.id)), IntegerType) + private val fd2 = new FunDef(FreshIdentifier("f2"), Seq(), Seq(ValDef(x.id)), IntegerType) fd2.body = Some(Plus(x, bi(1))) - private val fd3 = new FunDef(FreshIdentifier("f1"), Seq(), Seq(ValDef(x.id)), IntegerType) + private val fd3 = new FunDef(FreshIdentifier("f3"), Seq(), Seq(ValDef(x.id)), IntegerType) fd3.body = Some(Times(x, bi(1))) test("transformation with no rewriting should not change FunDef") { @@ -30,4 +30,33 @@ class DefinitionTransformerSuite extends FunSuite with ExpressionsDSL { assert(tr1.transform(fd3) === fd3) } + + private val classA = new CaseClassDef(FreshIdentifier("A"), Seq(), None, false) + classA.setFields(Seq(ValDef(FreshIdentifier("x", IntegerType)))) + private val classB = new CaseClassDef(FreshIdentifier("B"), Seq(), None, false) + classB.setFields(Seq(ValDef(FreshIdentifier("a", classA.typed)))) + + test("transformating type of a nested case class change all related case classes") { + val tr1 = new DefinitionTransformer { + override def transformType(t: TypeTree): Option[TypeTree] = t match { + case IntegerType => Some(BooleanType) + case _ => None + } + } + val classA2 = tr1.transform(classA) + assert(classA.id !== classA2.id) + assert(classA.fields.head.id !== classA2.fields.head.id) + assert(classA.fields.head.getType === IntegerType) + assert(classA2.fields.head.getType === BooleanType) + assert(tr1.transform(classA) === classA2) + + val classB2 = tr1.transform(classB) + assert(tr1.transform(classA) === classA2) + assert(classB.id !== classB2.id) + assert(classB.fields.head.id !== classB2.fields.head.id) + assert(classB.fields.head.getType === classA.typed) + assert(classB2.fields.head.getType === classA2.typed) + + } + } -- GitLab