Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,17 @@ Each backend implements `PrintComponentInitialization` and `PrintComponentEquati

```bash
# Run all tests (recommended - runs unit tests + regression tests)
wolframscript -f test/AllTests.wl

# Alternative: Run via bash script
./test/run_tests.sh

# Quiet mode - shows only checkmark on success or failures on error
./test/run_tests.sh --quiet

# Update golden files with new outputs
./test/run_tests.sh --generate

# Alternative: Run via wolframscript directly
wolframscript -script test/AllTests.wl # verbose
wolframscript -script test/AllTests.wl -quiet # quiet mode
```

The test suite includes:
Expand Down
10 changes: 7 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,17 @@ Each backend implements `PrintComponentInitialization` and `PrintComponentEquati

```bash
# Run all tests (recommended - runs unit tests + regression tests)
wolframscript -f test/AllTests.wl

# Alternative: Run via bash script
./test/run_tests.sh

# Quiet mode - shows only checkmark on success or failures on error
./test/run_tests.sh --quiet

# Update golden files with new outputs
./test/run_tests.sh --generate

# Alternative: Run via wolframscript directly
wolframscript -script test/AllTests.wl # verbose
wolframscript -script test/AllTests.wl -quiet # quiet mode
```

The test suite includes:
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,15 @@ Generato GHG_rhs.wl

```bash
# Run all tests (recommended - runs unit tests + regression tests)
wolframscript -f test/AllTests.wl

# Alternative: Run via bash script
./test/run_tests.sh

# Quiet mode - shows only checkmark on success or failures on error
./test/run_tests.sh --quiet

# Update golden files with new outputs
./test/run_tests.sh --generate

# Alternative: Run via wolframscript directly
wolframscript -script test/AllTests.wl # verbose
wolframscript -script test/AllTests.wl -quiet # quiet mode
```
6 changes: 0 additions & 6 deletions src/Basic.wl
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@

BeginPackage["Generato`Basic`", {"xAct`xTensor`", "xAct`xCoba`"}];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Basic`, {2024, 1, 11}"];

System`Print["------------------------------------------------------------"];

GetCheckInputEquations::usage = "GetCheckInputEquations[] returns True if input equation checking is enabled.";

SetCheckInputEquations::usage = "SetCheckInputEquations[bool] enables or disables checking of input equations.";
Expand Down
6 changes: 0 additions & 6 deletions src/Component.wl
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ Needs["Generato`Basic`"];

Needs["Generato`ParseMode`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Component`, {2024, 1, 11}"];

System`Print["------------------------------------------------------------"];

GetMapComponentToVarlist::usage = "GetMapComponentToVarlist[] returns the Association mapping tensor components to varlist indices.";

SetProcessNewVarlist::usage = "SetProcessNewVarlist[bool] sets whether the next varlist is treated as a new varlist for index numbering.";
Expand Down
6 changes: 0 additions & 6 deletions src/Derivation.wl
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@

BeginPackage["Generato`Derivation`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Derivation`, {2024, 1, 18}"];

System`Print["------------------------------------------------------------"];

TestEQN::usage = "TestEQN[bool, label] prints 'SUCCEED' if bool is True, otherwise prints 'FAILED' and aborts.";

Begin["`Private`"];
Expand Down
6 changes: 0 additions & 6 deletions src/Interface.wl
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ Needs["Generato`Component`"];

Needs["Generato`Varlist`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Interface`, {2024, 1, 11}"];

System`Print["------------------------------------------------------------"];

DefTensors::usage = "DefTensors[var1, var2, ...] defines tensors without setting their components.";

GridTensors::usage = "GridTensors[var1, var2, ...] defines tensors with grid point indices, sets their components, and returns the varlist.";
Expand Down
6 changes: 0 additions & 6 deletions src/ParseMode.wl
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@

BeginPackage["Generato`ParseMode`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`ParseMode`, {2024, 7, 06}"];

System`Print["------------------------------------------------------------"];

GetParseMode::usage = "GetParseMode[key] returns True if the specified parsing mode is active, False otherwise.";

SetParseMode::usage = "SetParseMode[key->value] sets the specified parsing mode.";
Expand Down
6 changes: 0 additions & 6 deletions src/Varlist.wl
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,6 @@ Needs["Generato`ParseMode`"];

Needs["Generato`Component`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Varlist`, {2024, 1, 11}"];

System`Print["------------------------------------------------------------"];

ParseVarlist::usage = "ParseVarlist[varlist, chartname] processes a varlist, setting or printing components for each tensor.\nParseVarlist[{ExtraReplaceRules->rules}, varlist, chartname] processes with additional replacement rules.";

ParseVar::usage = "ParseVar[var] parses a variable specification and returns {varname, symmetry, printname}.";
Expand Down
6 changes: 0 additions & 6 deletions src/Writefile.wl
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,6 @@ Needs["Generato`Basic`"];

Needs["Generato`Component`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`Writefile`, {2025, 1, 23}"];

System`Print["------------------------------------------------------------"];

SetMainPrint::usage = "SetMainPrint[content] sets the content to be written as the main body of the output file.";

GetMainPrint::usage = "GetMainPrint[] returns and evaluates the content set by SetMainPrint.";
Expand Down
6 changes: 0 additions & 6 deletions src/stencils/FiniteDifferenceStencils.wl
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@

BeginPackage["Generato`FiniteDifferenceStencils`"];

System`Print["------------------------------------------------------------"];

System`Print["Package Generato`FiniteDifferenceStencils`, {2025, 1, 21}"];

System`Print["------------------------------------------------------------"];

GetFiniteDifferenceCoefficients::usage = "GetFiniteDifferenceCoefficients[sample, order] returns the finite difference coefficients for the given sample points and derivative order.";

GetCenteringStencils::usage = "GetCenteringStencils[order] returns the centering stencil points for the given accuracy order.";
Expand Down
89 changes: 60 additions & 29 deletions test/AllTests.wl
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,25 @@

(* AllTests.wl *)
(* Master test runner for Generato *)
(* Usage: wolframscript -f test/AllTests.wl *)
(* Usage: wolframscript -script test/AllTests.wl [-quiet] *)

$TestDir = DirectoryName[$InputFileName];

Print[""];
Print["========================================"];
Print[" Generato Test Suite"];
Print["========================================"];
Print[""];
(* Parse command line for quiet mode *)
$QuietMode = MemberQ[$ScriptCommandLine, "-quiet"];

(* Conditional print - only prints when not in quiet mode *)
QPrint[args___] := If[!$QuietMode, Print[args]];

(* Failure message collection for quiet mode output *)
$FailureMessages = {};
AppendFailure[msg_String] := AppendTo[$FailureMessages, msg];

QPrint[""];
QPrint["========================================"];
QPrint[" Generato Test Suite"];
QPrint["========================================"];
QPrint[""];

(* Collect all verification tests *)
$AllTests = {};
Expand All @@ -19,36 +29,40 @@ $AllTests = {};
(* PHASE 1: Unit Tests *)
(* ========================================= *)

Print["--- Unit Tests ---"];
Print[""];
QPrint["--- Unit Tests ---"];
QPrint[""];

unitTestFiles = FileNames["*.wl", FileNameJoin[{$TestDir, "unit"}]];

If[Length[unitTestFiles] > 0,
Do[
Print["Running: ", FileNameTake[file]];
Get[file],
QPrint["Running: ", FileNameTake[file]];
(* In quiet mode, suppress Print output from unit tests *)
If[$QuietMode,
Block[{Print = Null &}, Get[file]],
Get[file]
],
{file, unitTestFiles}
],
Print["No unit test files found in test/unit/"]
QPrint["No unit test files found in test/unit/"]
];

Print[""];
QPrint[""];

(* Generate test report if VerificationTests were run *)
If[Length[$AllTests] > 0,
Print["Generating TestReport..."];
QPrint["Generating TestReport..."];
report = TestReport[$AllTests];
Print["Tests Passed: ", report["TestsSucceededCount"], "/", report["TestsSucceededCount"] + report["TestsFailedCount"]];
Print[""];
QPrint["Tests Passed: ", report["TestsSucceededCount"], "/", report["TestsSucceededCount"] + report["TestsFailedCount"]];
QPrint[""];
];

(* ========================================= *)
(* PHASE 2: Golden File Regression Tests *)
(* ========================================= *)

Print["--- Regression Tests (Golden Files) ---"];
Print[""];
QPrint["--- Regression Tests (Golden Files) ---"];
QPrint[""];

(* Load test cases from config file *)
$ConfigFile = FileNameJoin[{$TestDir, "test_cases.txt"}];
Expand All @@ -61,8 +75,8 @@ $TestCases = Select[
ValidShellInput[str_String] := StringMatchQ[str, RegularExpression["^[a-zA-Z0-9_./\\-]+$"]];

(* Generate outputs for each test case *)
Print["Generating test outputs..."];
Print[""];
QPrint["Generating test outputs..."];
QPrint[""];

$GenerationFailed = False;
Do[
Expand All @@ -72,27 +86,37 @@ Do[
If[FileExistsQ[testFile],
(* Validate inputs before shell execution *)
If[!ValidShellInput[backend] || !ValidShellInput[testName],
Print[" ERROR: Invalid characters in backend or testName"];
QPrint[" ERROR: Invalid characters in backend or testName"];
AppendFailure["FAILED: Invalid characters in " <> backend <> "/" <> testName];
$GenerationFailed = True;
Continue[];
];

Print[" Generating: ", backend, "/", testName, ".wl"];
QPrint[" Generating: ", backend, "/", testName, ".wl"];
(* Run Generato from the test directory *)
result = Run["cd " <> FileNameJoin[{$TestDir, backend}] <> " && \"$GENERATO/Generato\" " <> testName <> ".wl 2>&1"];
(* In quiet mode, suppress subprocess output *)
result = If[$QuietMode,
Run["cd " <> FileNameJoin[{$TestDir, backend}] <> " && \"$GENERATO/Generato\" " <> testName <> ".wl > /dev/null 2>&1"],
Run["cd " <> FileNameJoin[{$TestDir, backend}] <> " && \"$GENERATO/Generato\" " <> testName <> ".wl 2>&1"]
];
If[result != 0,
Print[" FAILED to generate ", testName, ext];
QPrint[" FAILED to generate ", testName, ext];
AppendFailure["FAILED to generate " <> testName <> ext];
$GenerationFailed = True;
],
Print[" SKIP: ", testFile, " not found"];
QPrint[" SKIP: ", testFile, " not found"];
],
{testCase, $TestCases}
];

Print[""];
QPrint[""];

If[$GenerationFailed,
Print["ERROR: Some outputs failed to generate"];
QPrint["ERROR: Some outputs failed to generate"];
If[$QuietMode,
Print["✗ tests"];
Print /@ $FailureMessages;
];
Exit[1]
];

Expand All @@ -103,22 +127,29 @@ Get[FileNameJoin[{$TestDir, "regression", "compare_golden.wl"}]];
$RegressionResult = GoldenTest`RunGoldenTests[];

(* Cleanup generated output files *)
Print[""];
Print["Cleaning up generated files..."];
QPrint[""];
QPrint["Cleaning up generated files..."];
Do[
{backend, testName, ext} = testCase;
outputFile = FileNameJoin[{$TestDir, backend, testName <> ext}];
If[FileExistsQ[outputFile],
Check[
DeleteFile[outputFile],
Print[" Warning: Failed to delete ", outputFile]
QPrint[" Warning: Failed to delete ", outputFile]
];
],
{testCase, $TestCases}
];

(* Exit with appropriate status *)
If[$RegressionResult === $Failed,
If[$QuietMode,
Print["✗ tests"];
Print /@ $FailureMessages;
];
Exit[1],
If[$QuietMode,
Print["✓ tests"];
];
Exit[0]
];
Loading