diff options
author | Lars Erik Rosengren <larserik.rosengren@gmail.com> | 2017-09-03 18:07:55 +0200 |
---|---|---|
committer | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2017-09-03 19:08:53 +0200 |
commit | 986535fc958c0d19c10fd6fc5781fe0b2dcdd442 (patch) | |
tree | 605e5ba6efd2c87f4f73026ec45b360e176fa1bf /testing/tests | |
parent | 7d2d7718aa8467ddd5ca9753bde2c7a87ff55c9f (diff) | |
download | askama-986535fc958c0d19c10fd6fc5781fe0b2dcdd442.tar.gz askama-986535fc958c0d19c10fd6fc5781fe0b2dcdd442.tar.bz2 askama-986535fc958c0d19c10fd6fc5781fe0b2dcdd442.zip |
Changed implementation of precedence rules
This implementation resolves djc/askama#44 by changing the precedence
implementation.
The previous solution was very slow because it had to try to parse
all combinations of precedence layers leading to 2^9 iterations for each
expr_any. This is solved by reusing the left operand instead of reparsing
it when the operator isn't found.
This implementation also solves another related issue that expressions
with multiple operators couldn't be parsed, for example {{1 * 2 * 3}}.
This is handled by using expr_any for the right operand instead of only
using higher level precedence layers.
Diffstat (limited to 'testing/tests')
-rw-r--r-- | testing/tests/precedence.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/testing/tests/precedence.rs b/testing/tests/precedence.rs new file mode 100644 index 0000000..f02189d --- /dev/null +++ b/testing/tests/precedence.rs @@ -0,0 +1,15 @@ +#[macro_use] +extern crate askama; + +use askama::Template; + +#[derive(Template)] +#[template(path = "precedence.html")] +struct PrecedenceTemplate { +} + +#[test] +fn test_precedence() { + let t = PrecedenceTemplate { }; + assert_eq!(t.render().unwrap(), "6".repeat(7)); +} |