Julio Biason
4 months ago
4 changed files with 248 additions and 0 deletions
@ -0,0 +1,102 @@ |
|||||||
|
# This file is automatically @generated by Cargo. |
||||||
|
# It is not intended for manual editing. |
||||||
|
version = 3 |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "beef" |
||||||
|
version = "0.5.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "fnv" |
||||||
|
version = "1.0.7" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "lazy_static" |
||||||
|
version = "1.5.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "logos" |
||||||
|
version = "0.14.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "161971eb88a0da7ae0c333e1063467c5b5727e7fb6b710b8db4814eade3a42e8" |
||||||
|
dependencies = [ |
||||||
|
"logos-derive", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "logos-codegen" |
||||||
|
version = "0.14.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "8e31badd9de5131fdf4921f6473d457e3dd85b11b7f091ceb50e4df7c3eeb12a" |
||||||
|
dependencies = [ |
||||||
|
"beef", |
||||||
|
"fnv", |
||||||
|
"lazy_static", |
||||||
|
"proc-macro2", |
||||||
|
"quote", |
||||||
|
"regex-syntax", |
||||||
|
"syn", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "logos-derive" |
||||||
|
version = "0.14.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "1c2a69b3eb68d5bd595107c9ee58d7e07fe2bb5e360cc85b0f084dedac80de0a" |
||||||
|
dependencies = [ |
||||||
|
"logos-codegen", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "logostest" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"logos", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "proc-macro2" |
||||||
|
version = "1.0.86" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" |
||||||
|
dependencies = [ |
||||||
|
"unicode-ident", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "quote" |
||||||
|
version = "1.0.36" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "regex-syntax" |
||||||
|
version = "0.8.4" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "syn" |
||||||
|
version = "2.0.70" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2", |
||||||
|
"quote", |
||||||
|
"unicode-ident", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "unicode-ident" |
||||||
|
version = "1.0.12" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" |
@ -0,0 +1,7 @@ |
|||||||
|
[package] |
||||||
|
name = "logostest" |
||||||
|
version = "0.1.0" |
||||||
|
edition = "2021" |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
logos = "0.14.0" |
@ -0,0 +1,88 @@ |
|||||||
|
// List of variables to be checked; optional, since MD5 validation does not use any variables. |
||||||
|
variables ("phi" "meanT"); |
||||||
|
|
||||||
|
// Execution is run in sequence: If the first run ("quick") fails, then the second run ("short") |
||||||
|
// is run, and if that fails, the third is run ("long"), and so on. On the other hand, the |
||||||
|
// execution of the runs stops on the first full success. |
||||||
|
// This example is a bit of a stretch -- why would be want to run the same case 4 different |
||||||
|
// times? -- but it shows that, if that necessity appears in the future, we can support it. |
||||||
|
// It also shows that one can have mixed reduced and non-reduce runs (e.g., there could be |
||||||
|
// just one run without reduction, or just one reduced run, and so on.) |
||||||
|
// We could also add support in Verify to only execute runs with a specific name, allowing |
||||||
|
// to run all examples in their non-reduced mode (as long as they all name their non-reduced |
||||||
|
// mode with the same name, that is). |
||||||
|
// Names are free form, and we could use them to defined the run-dir, e.g., |
||||||
|
// "short" validation will be run in ".run-short", "long" in ".run-long" and so on. |
||||||
|
|
||||||
|
runs |
||||||
|
( |
||||||
|
// This is a quick test: The example is reduced to just 2 timesteps, and we check the |
||||||
|
// resulting file against its MD5 hash. |
||||||
|
quick { |
||||||
|
steps 2; |
||||||
|
generatedFile "postProcessing/2/blah"; |
||||||
|
// because the validation is in MD5 format, there is no need to have a referenceFile |
||||||
|
failIf { |
||||||
|
md5Differs "123123"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// In case the MD5 fails, the case is run again, but this time reduced to 10 timesteps. |
||||||
|
// This run also includes continuations, by changing the listed files to make one follow |
||||||
|
// the timesteps of the previous. The run will fail if relative or absolute differences are |
||||||
|
// above 0. |
||||||
|
short { |
||||||
|
steps 10; |
||||||
|
generatedFile "postProcessing/10/blah"; |
||||||
|
referenceFile "verification/10/blah"; |
||||||
|
// No tolerances mean "it will warn if the values are not the same" |
||||||
|
|
||||||
|
// This makes the continuations explicit, by specificing files that form a single run. |
||||||
|
continuations ( |
||||||
|
"system/caseSetupDict.initial" |
||||||
|
"system/caseSetupDict.continuation1" |
||||||
|
"system/caseSetupDict.continuation2" |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
// If in 10 timestemps the values do not match the reference file, a 100 timesteps run is |
||||||
|
// done. There is no continuation, and for this run to fail, both absolute and relative |
||||||
|
// tolerances must be above the designed threshold. |
||||||
|
long { |
||||||
|
steps 100; |
||||||
|
generatedFile "postProcessing/100/blah"; |
||||||
|
referenceFile "verification/100/blah"; |
||||||
|
failIf { |
||||||
|
absolute 10; |
||||||
|
relative 10; |
||||||
|
// will fail is the absolute difference is above 10 AND the relative difference |
||||||
|
// is above 10; |
||||||
|
operator and; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// If the 100 timesteps fails, then we run the example a 4th time, this time without any |
||||||
|
// reductions (the "steps" property is not set in this run). There are no continations |
||||||
|
// either. |
||||||
|
"run till completion" { |
||||||
|
// With no steps, there is no reduction |
||||||
|
// (maybe we need something to tell that there is no reduction explicitly?) |
||||||
|
generatedFile "postProcessing/20000/blah;" |
||||||
|
referenceFile "verification/20000/blah"; |
||||||
|
failIf { |
||||||
|
absolute 20; |
||||||
|
relative 20; |
||||||
|
// no operator means OR, so example will fail if the absolute different is |
||||||
|
// above 20 OR the relative difference is above 20 |
||||||
|
} |
||||||
|
} |
||||||
|
); |
||||||
|
|
||||||
|
// This is used for filtering. |
||||||
|
tags ("GIB" "AES" "compressible"); |
||||||
|
|
||||||
|
// Only present if the example can't be run in some platform. |
||||||
|
unstable { |
||||||
|
operatingSystem windows; // valid values: "windows", "linux", "all" |
||||||
|
reason "Allrun uses Python, and Python isn't usually available on Windows"; |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
use logos::Logos; |
||||||
|
|
||||||
|
#[derive(Logos, Debug)] |
||||||
|
#[logos(skip r"[ \t\n\r]")] |
||||||
|
enum Token<'a> { |
||||||
|
#[regex(r#""[^"]+""#, |lex| lex.slice().trim_start_matches('"').trim_end_matches('"'))]
|
||||||
|
#[regex("[a-zA-Z0-9]+", |lex| lex.slice())] |
||||||
|
Keyword(&'a str), |
||||||
|
|
||||||
|
#[regex(r#"//[^\n]*"#, |lex| lex.slice())] |
||||||
|
Comment(&'a str), |
||||||
|
|
||||||
|
#[token(";")] |
||||||
|
End, |
||||||
|
|
||||||
|
#[token("{")] |
||||||
|
DictStart, |
||||||
|
|
||||||
|
#[token("}")] |
||||||
|
DictEnd, |
||||||
|
|
||||||
|
#[token("(")] |
||||||
|
ListStart, |
||||||
|
|
||||||
|
#[token(")")] |
||||||
|
ListEnd, |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
fn main() { |
||||||
|
let lex = Token::lexer("variable \"value is weird(but cool)[not so much]\" ;"); |
||||||
|
let content = lex.collect::<Vec<_>>(); |
||||||
|
println!("{content:#?}"); |
||||||
|
|
||||||
|
let lex = Token::lexer("var1 2;\nvar2 2;"); |
||||||
|
let content = lex.collect::<Vec<_>>(); |
||||||
|
println!("{content:#?}"); |
||||||
|
|
||||||
|
let lex = Token::lexer(r#"var 1 2 3;\nvar2 (1 2 3);"#); |
||||||
|
let content = lex.collect::<Vec<_>>(); |
||||||
|
println!("{content:#?}"); |
||||||
|
|
||||||
|
let lex = Token::lexer("variables (\"phi\" \"meanT\");\nruns\n( 1 2 3 );"); |
||||||
|
let content = lex.collect::<Vec<_>>(); |
||||||
|
println!("{content:#?}"); |
||||||
|
|
||||||
|
let source = std::fs::read("src/example.foam").unwrap(); |
||||||
|
let lex = Token::lexer(&std::str::from_utf8(&source).unwrap()); |
||||||
|
let content = lex.collect::<Vec<_>>(); |
||||||
|
println!("{content:#?}"); |
||||||
|
} |
Loading…
Reference in new issue