UNPKG

@specs-feup/clava

Version:

A C/C++ source-to-source compiler written in Typescript

374 lines (305 loc) 10.8 kB
import { ClavaLegacyTester } from "../jest/ClavaLegacyTester.js"; import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.js"; import ClavaJavaTypes from "@specs-feup/clava/api/clava/ClavaJavaTypes.js"; import path from "path"; const isWindows = process.platform === "win32"; const isMacOS = process.platform === "darwin"; /* eslint-disable jest/expect-expect */ describe("CTest", () => { function newTester() { return new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/weaver/"), ClavaJavaTypes.Standard.C99 ) .setResultPackage("c/results") .setSrcPackage("c/src"); } // TODO: Temporarily disabled, Jenkins fails with "Cannot inherit from final class" it("Loop", async () => { await newTester().test("Loop.js", "loop.c"); }); it("ReplaceCallWithStmt", async () => { await newTester().test( "ReplaceCallWithStmt.js", "ReplaceCallWithStmt.c" ); }); it("InsertsLiteral", async () => { await newTester().test("InsertsLiteral.js", "inserts.c"); }); it("InsertsJp", async () => { await newTester().test("InsertsJp.js", "inserts.c"); }); it("Clone", async () => { await newTester().test("Clone.js", "clone.c"); }); it("AddGlobal", async () => { await newTester().test( "AddGlobal.js", "add_global_1.c", "add_global_2.c" ); }); it("Expressions", async () => { await newTester().test("Expressions.js", "expressions.c"); }); // FIXME: currentTime() is a method only available in the MasterWeaver class and not in any Weaver that is actually shipped. // This test only runs in the java test runner and does not work in the real world. /* it("Dijkstra", async () => { await newTester() .setCheckWovenCodeSyntax(false) .checkExpectedOutput(false) .test("Dijkstra.js", "dijkstra.c"); }); */ it("Wrap", async () => { const tester = newTester().set( ClavaJavaTypes.CxxWeaverOption.PARSE_INCLUDES ); if (JavaTypes.SpecsPlatforms.isMac()) { tester.setResultsFile("Wrap.js.macos.txt"); } await tester.test("Wrap.js", "wrap.c", "wrap.h"); }); it("VarrefInWhile", async () => { await newTester().test("VarrefInWhile.js", "varref_in_while.c"); }); it("Inline", async () => { await newTester().test( "Inline.js", "inline.c", "inline_utils.h", "inline_utils.c" ); }); it("SetType", async () => { await newTester().test("SetType.js", "set_type.c"); }); it("Detach", async () => { await newTester().test("Detach.js", "detach.c"); }); (isWindows ? it.skip : it)("InlineNasLu", async () => { await newTester() .checkExpectedOutput(false) .test("InlineNasLu.js", "inline_nas_lu.c"); }); it("InlineNasFt", async () => { await newTester() .checkExpectedOutput(false) .test("InlineNasFt.js", "inline_nas_ft.c"); }); it("NullNodes", async () => { await newTester().test("NullNodes.js", "null_nodes.c"); }); it("TypeRenamer", async () => { await newTester().test("TypeRenamer.js", "type_renamer.c"); }); it("AstNodes", async () => { await newTester().test("AstNodes.js", "ast_nodes.c"); }); it("RemoveInclude", async () => { await newTester().test( "RemoveInclude.js", "remove_include.c", "remove_include_0.h", "remove_include_1.h", "remove_include_2.h" ); }); it("IncludeLocation", async () => { await newTester().test( "IncludeLoc.js", "remove_include.c", "remove_include_0.h", "remove_include_1.h", "remove_include_2.h" ); }); it("DynamicCallGraph", async () => { await newTester().test("DynamicCallGraph.js", "dynamic_call_graph.c"); }); it("Selects", async () => { await newTester().test("Selects.js", "selects.c"); }); it("Scope", async () => { await newTester().test("Scope.js", "scope.c"); }); it("Array", async () => { await newTester().test("ArrayTest.js", "array_test.c"); }); // @Test // it("OpenCLType", async () => { // // TODO: Certain attributes are not supported yet (e.g., ReqdWorkGroupSizeAttr, WorkGroupSizeHintAttr, // // VecTypeHintAttr) // await newTester().set(ClavaOptions.STANDARD, Standard.OPENCL20).test("OpenCLType.js", "opencl_type.cl"); // }); it("Cilk", async () => { // Generated code has Cilk directives await newTester() .set(ClavaJavaTypes.ClavaOptions.FLAGS, "-fcilkplus") .test("Cilk.js", "cilk.c"); }); it("TagDecl", async () => { await newTester().test("TagDecl.js", "tag_decl.c"); }); it("File", async () => { await newTester().test("File.js", "file.c"); }); it("Switch", async () => { await newTester().test("SwitchTest.js", "switch.c"); }); it("AddParam", async () => { await newTester().test("AddParamTest.js", "add_param.c"); }); it("AddArg", async () => { await newTester().test("AddArgTest.js", "add_arg.c"); }); it("Cfg", async () => { await newTester().test("Cfg.js", "cfg.c"); }); it("ExprStmt", async () => { await newTester().test("ExprStmt.js", "expr_stmt.c"); }); it("Traversal", async () => { await newTester().test("Traversal.js", "traversal.c"); }); it("If", async () => { await newTester().test("If.js", "if.c"); }); }); describe("CBenchTest", () => { function newTester() { return new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/bench/"), ClavaJavaTypes.Standard.C99 ) .setResultPackage("c/results") .setSrcPackage("c/src"); } it("HamidRegion", async () => { await newTester() .set(ClavaJavaTypes.CxxWeaverOption.PARSE_INCLUDES) .test("HamidRegion.js", "hamid_region.c", "hamid_region.h"); }); it("DspMatmul", async () => { await newTester().test("DspMatmul.js", "dsp_matmul.c"); }); it("LSIssue1", async () => { await newTester().test("LSIssue1.js", "ls_issue1.c"); }); }); describe("CApiTest", () => { function newTester() { return new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/api/"), ClavaJavaTypes.Standard.C99 ) .setSrcPackage("c/src/") .setResultPackage("c/results/"); } it("Logger", async () => { await newTester().test("LoggerTest.js", "logger_test.c"); }); it("Timer", async () => { const tester = newTester(); if (JavaTypes.SpecsPlatforms.isUnix()) { tester.setResultsFile("TimerTest.js.unix.txt"); } const t = async () => tester.test("TimerTest.js", "timer_test.c"); if (JavaTypes.SpecsPlatforms.isMac()) { await expect(t()).rejects.toThrow( "Timer Exception: Platform not supported (Windows and Linux only)" ); } else { await t(); } }); // Compiles C code, but with C++ flag. it("TimerWithCxxFlag", async () => { // This test results differ from the previous due to the Singleton pattern in the IdGenerator class. // The IdGenerator instance is not reset between tests, so the ids generated differ. // This is a limitation of this legacy test harness. We won't bother fixing it as this is legacy code. const tester = newTester(); if (JavaTypes.SpecsPlatforms.isUnix()) { tester.setResultsFile("TimerTestWithCxxFlag.js.unix.txt"); } const t = async () => tester .set( ClavaJavaTypes.ClavaOptions.STANDARD, ClavaJavaTypes.Standard.CXX11 ) .test("TimerTestWithCxxFlag.js", "timer_test.c"); if (JavaTypes.SpecsPlatforms.isMac()) { await expect(t()).rejects.toThrow( "Timer Exception: Platform not supported (Windows and Linux only)" ); } else { await t(); } }); it("Energy", async () => { // Disable syntax check of woven code, rapl include is not available await newTester() .setCheckWovenCodeSyntax(false) .test("EnergyTest.js", "energy_test.c"); }); it("CodeInserter", async () => { await newTester().test("CodeInserterTest.js", "code_inserter.c"); }); it("ArrayLinearizer", async () => { await newTester().test("ArrayLinearizerTest.js", "qr.c"); }); it("Selector", async () => { await newTester().test("SelectorTest.js", "selector_test.c"); }); it("StrcpyChecker", async () => { const tester = newTester(); if (isMacOS) { tester.setResultsFile("StrcpyChecker.js.macos.txt"); } await tester.test("StrcpyChecker.js", "strcpy.c"); }); it("StaticCallGraph", async () => { await newTester().test("StaticCallGraphTest.js", "static_call_graph.c"); }); it("PassComposition", async () => { await newTester().test("PassCompositionTest.js", "pass_composition.c"); }); it("CfgApi", async () => { await newTester().test("CfgApi.js", "cfg_api.c"); }); it("Inliner", async () => { const tester = newTester(); if (JavaTypes.SpecsPlatforms.isMac()) { tester.setResultsFile("InlinerTest.js.macos.txt"); } await tester.test("InlinerTest.js", "inliner.c"); }); it("StatementDecomposer", async () => { await newTester().test( "StatementDecomposerTest.js", "stmt_decomposer.c" ); }); it("ToSingleFile", async () => { await newTester().test( "ToSingleFile.js", "to_single_file_1.c", "to_single_file_2.c" ); }); it("LivenessAnalysis", async () => { await newTester().test( "LivenessAnalysisTest.js", "liveness_analysis.c" ); }); it("SwitchToIf", async () => { await newTester().test( "SwitchToIfTransformationTest.js", "switch_to_if.c" ); }); });