Skip to content

Commit

Permalink
Refactor Check & Initial set for Json (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyerinshelly committed Feb 20, 2024
1 parent 5c879de commit b5e4b50
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 44 deletions.
1 change: 1 addition & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ lazy val root = project
"org.twc" % "t2" % "1.0" from file(
"lib/terminator-compiler-1.0.jar",
).toURI.toString,
"io.spray" %% "spray-json" % "1.3.6",
),
// set the main class for 'sbt run'
Compile / mainClass := Some("fhetest.FHETest"),
Expand Down
16 changes: 16 additions & 0 deletions src/main/scala/fhetest/Checker/CheckResult.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package fhetest.Checker

trait CheckResult {
val results: List[BackendResultPair]
override def toString: String = {
val className = this.getClass.getSimpleName.replace("$", "")
val resultStrings = results.map {
case BackendResultPair(backendName, executeResult) =>
s"\n- $backendName:\n ${executeResult.toString}"
}
s"[$className] ${resultStrings.mkString("")}"
}
}
case class Same(results: List[BackendResultPair]) extends CheckResult
case class Diff(results: List[BackendResultPair]) extends CheckResult
case class ParserError(results: List[BackendResultPair]) extends CheckResult
29 changes: 29 additions & 0 deletions src/main/scala/fhetest/Checker/ExecuteResult.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fhetest.Checker

import fhetest.Utils.*

trait ExecuteResult
case class Normal(res: String) extends ExecuteResult {
override def toString: String = res
}
case object InterpError extends ExecuteResult
case object PrintError extends ExecuteResult
case class LibraryError(msg: String) extends ExecuteResult {
override def toString: String = s"LibraryError: $msg"
}
case object ParseError extends ExecuteResult
// case object TimeoutError extends ExecuteResult //TODO: development
// case object Throw extends ExecuteResult

case class BackendResultPair(backend: String, result: ExecuteResult)

def isDiff(
expected: BackendResultPair,
obtained: BackendResultPair,
): Boolean =
(obtained.result, expected.result) match {
case (Normal(obtained), Normal(expected)) =>
try { compare(obtained, expected); false }
catch { case _ => true }
case _ => true
}
22 changes: 22 additions & 0 deletions src/main/scala/fhetest/Checker/Utils.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fhetest.Checker

import java.io.{File, PrintWriter}
import java.nio.file.{Files, Path, Paths, StandardCopyOption}
import spray.json._

// file writer
def getPrintWriter(filename: String): PrintWriter =
new PrintWriter(new File(filename))

// dump given data to a file
def dumpFile(data: Any, filename: String): Unit = {
val nf = getPrintWriter(filename)
nf.print(data)
nf.close()
}

// dump given data as JSON
def dumpJson[T](data: T, filename: String)(implicit
writer: JsonWriter[T],
): Unit =
dumpFile(data.toJson.prettyPrint, filename)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fhetest.Phase

import fhetest.Utils.*
import fhetest.Checker.*
import org.twc.terminator.t2dsl_compiler.T2DSLsyntaxtree.*;
import org.twc.terminator.SymbolTable;

Expand All @@ -22,7 +23,8 @@ case object Check {
getResults(ast, symbolTable, encType, backends, encParams)
diffResults(interpResult, executeResults)
} catch {
case _ => ParseError(List(BackendResultPair("Parser", ParseError)))
case _ =>
ParserError(List(BackendResultPair("Parser", ParseError)))
}
}

Expand All @@ -31,9 +33,16 @@ case object Check {
backends: List[Backend],
encParams: EncParams,
): LazyList[CheckResult] = {
for {
val checkResults = for {
program <- programs
} yield apply(program, backends, encParams)

// TODO: Write Json file
// checkResults.foreach {

// }

checkResults
}

def apply(
Expand All @@ -45,7 +54,7 @@ case object Check {
if (dir.exists() && dir.isDirectory) {
val files = Files.list(Paths.get(directory))
val fileList = files.iterator().asScala.toList
for {
val checkResults = for {
filePath <- fileList.to(LazyList)
} yield {
val fileStr = Files.readAllLines(filePath).asScala.mkString("")
Expand All @@ -55,37 +64,18 @@ case object Check {
pgmStr + reportStr

}

// TODO: Write Json file
// checkResults.foreach {

// }

checkResults
} else {
throw new Exception("Directory does not exist or is not a directory")
}
}

trait CheckResult {
val results: List[BackendResultPair]
override def toString: String = {
val className = this.getClass.getSimpleName.replace("$", "")
val resultStrings = results.map {
case BackendResultPair(backendName, executeResult) =>
s"\n- $backendName:\n ${executeResult.toString}"
}
s"[$className] ${resultStrings.mkString("")}"
}
}
case class Same(results: List[BackendResultPair]) extends CheckResult
case class Diff(results: List[BackendResultPair]) extends CheckResult
case class ParseError(results: List[BackendResultPair]) extends CheckResult

def isDiff(
expected: BackendResultPair,
obtained: BackendResultPair,
): Boolean =
(obtained.result, expected.result) match {
case (Normal(obtained), Normal(expected)) =>
try { compare(obtained, expected); false }
catch { case _ => true }
case _ => true
}

def diffResults(
expected: BackendResultPair,
obtained: List[BackendResultPair],
Expand All @@ -94,21 +84,6 @@ case object Check {
if (obtained.forall(!isDiff(expected, _))) Same(results) else Diff(results)
}

trait ExecuteResult
case class Normal(res: String) extends ExecuteResult {
override def toString: String = res
}
case object InterpError extends ExecuteResult
case object PrintError extends ExecuteResult
case class LibraryError(msg: String) extends ExecuteResult {
override def toString: String = s"LibraryError: $msg"
}
case object ParseError extends ExecuteResult
// case object TimeoutError extends ExecuteResult //TODO: development
// case object Throw extends ExecuteResult

case class BackendResultPair(backend: String, result: ExecuteResult)

def getResults(
ast: Goal,
symbolTable: SymbolTable,
Expand Down

0 comments on commit b5e4b50

Please sign in to comment.