From d6b3dbc62b1ac94e868fede19881349fed3f0686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rcio=20Concei=C3=A7=C3=A3o=20Goulart?= Date: Thu, 16 Sep 2021 21:22:05 -0300 Subject: [PATCH] =?UTF-8?q?Test=20case=20de=20Procedure/Call=20interproced?= =?UTF-8?q?ural=20est=C3=A1=20falhando?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/br/unb/cic/wlang/Syntax.scala | 2 +- .../unb/cic/wlang/CFGBuilderBuilderTest.scala | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/scala/br/unb/cic/wlang/Syntax.scala b/src/main/scala/br/unb/cic/wlang/Syntax.scala index 4ee9f1a..25bb988 100644 --- a/src/main/scala/br/unb/cic/wlang/Syntax.scala +++ b/src/main/scala/br/unb/cic/wlang/Syntax.scala @@ -9,7 +9,7 @@ import WhileProgram._ */ case class WhileProgram(declarations: List[Procedure], stmt: Stmt) -case class Procedure(name: String, formalArgs: List[FormalArgument], ln: Label, stmt: Stmt, lx: Label) +case class Procedure(name: String, formalArgs: List[FormalArgument], ln: Label, stmt: Stmt, lx: Label) //ln: entrada do corpo da proc; lx: saĆ­da do corpo da proc trait ParameterType diff --git a/src/test/scala/br/unb/cic/wlang/CFGBuilderBuilderTest.scala b/src/test/scala/br/unb/cic/wlang/CFGBuilderBuilderTest.scala index 192048c..bc59413 100644 --- a/src/test/scala/br/unb/cic/wlang/CFGBuilderBuilderTest.scala +++ b/src/test/scala/br/unb/cic/wlang/CFGBuilderBuilderTest.scala @@ -13,6 +13,7 @@ class CFGBuilderBuilderTest extends AnyFunSuite { val expected = Set() assert(expected == g) + } test("Test factorial CFG") { @@ -37,5 +38,45 @@ class CFGBuilderBuilderTest extends AnyFunSuite { assert(expected == g) } + + test("Test flow com interprocedural") { + //Call(name: String, args: List[AExp], lc: Label, lr: Label) + + val d1 = Skip(1) + + val d3 = Assignment("v", Add(Var("u"), Const(1)), 3) + + val d4 = Call("fib", List(Sub(Var("z"), Const(1)), Var("u"), Var("v")), 4, 5) + + val d6 = Call("fib", List(Sub(Var("z"), Const(2)), Var("v"), Var("v")), 6, 7) + + val d2 = IfThenElse(Condition(GT(Var("z"), Const(3)), 2), d3, Sequence(d4, d6)) + + val d8 = Skip(8) + + val d9 = Call("fib", List(Var("x"), Const(0), Var("y")), 9, 10) + + //Procedure(name: String, formalArgs: List[FormalArgument], ln: Label, stmt: Stmt, lx: Label) + val proc = Procedure("fib", List(FormalArgument("z",ByValue), FormalArgument("u",ByValue), FormalArgument("v",ByResult)), 1, Sequence(d1, Sequence(d2, d8)), 8) + val p = WhileProgram(List(proc), Sequence(d9, d1)) + + val g = CFGBuilder.flow(p) + + val expected: Set[(Int, Int)] = + Set((1, 2) + ,(2, 3) + ,(3, 8) + ,(2, 4) + ,(4, 1) + ,(8, 5) + ,(5, 6) + ,(6, 1) + ,(8, 7) + ,(7, 8) + ,(9, 1) + ,(8, 10)) + + assert(expected == g) + } }