tdammers / ginger

A Haskell implementation of the Jinja template language.
MIT License
77 stars 13 forks source link

test/Text/Ginger/SimulationTests.hs:1589 "recursive loops" test fails: expected: "a@1(b@2()c@2(d@3()))" but got: "a@1(c@2(d@3())b@2())" #64

Closed trofi closed 11 months ago

trofi commented 3 years ago

Observed on current git repository and latest hackage release:

Using Parsec parser
Configuring ginger-0.10.1.0...
Dependency aeson >=1.4.2.0 && <1.6: using aeson-1.5.6.0
Dependency aeson-pretty >=0.8.7 && <0.9: using aeson-pretty-0.8.8
Dependency base >=4.8 && <5: using base-4.14.1.0
Dependency bytestring >=0.10.8.2 && <0.11: using bytestring-0.10.12.0
Dependency data-default >=0.5: using data-default-0.7.1.1
Dependency filepath >=1.3: using filepath-1.4.2.1
Dependency http-types >=0.8 && <0.11 || >=0.12: using http-types-0.12.3
Dependency mtl >=2.2: using mtl-2.2.2
Dependency parsec >=3.0: using parsec-3.1.14.0
Dependency regex-tdfa >=1.2.3 && <=1.5: using regex-tdfa-1.3.1.0
Dependency safe >=0.3: using safe-0.3.19
Dependency scientific >=0.3: using scientific-0.3.7.0
Dependency text >=1.2.3.1 && <1.3: using text-1.2.4.1
Dependency time >=0.1.6.0: using time-1.9.3
Dependency transformers >=0.3: using transformers-0.5.6.2
Dependency unordered-containers >=0.2.5: using unordered-containers-0.2.14.0
Dependency utf8-string >=1.0.1.1 && <1.1: using utf8-string-1.0.2
Dependency vector >=0.12.0.2 && <0.13: using vector-0.12.3.0
Dependency aeson >=1.4.2.0 && <1.6: using aeson-1.5.6.0
Dependency base >=4.8 && <5: using base-4.14.1.0
Dependency bytestring >=0.10.8.2 && <0.11: using bytestring-0.10.12.0
Dependency data-default >=0.5: using data-default-0.7.1.1
Dependency ginger -any: using ginger-0.10.1.0
Dependency optparse-applicative >=0.14.3.0 && <0.17: using
optparse-applicative-0.15.1.0
Dependency process >=1.6.5.0 && <1.7: using process-1.6.9.0
Dependency text >=1.2.3.1 && <1.3: using text-1.2.4.1
Dependency transformers >=0.5.6.2 && <0.6: using transformers-0.5.6.2
Dependency unordered-containers >=0.2.5: using unordered-containers-0.2.14.0
Dependency utf8-string >=1.0.1.1 && <1.1: using utf8-string-1.0.2
Dependency yaml >=0.11.0.0 && <0.12: using yaml-0.11.5.0
Dependency aeson >=1.4.2.0 && <1.6: using aeson-1.5.6.0
Dependency base >=4.8 && <5: using base-4.14.1.0
Dependency bytestring >=0.10.8.2 && <0.11: using bytestring-0.10.12.0
Dependency data-default >=0.5: using data-default-0.7.1.1
Dependency ginger -any: using ginger-0.10.1.0
Dependency mtl >=2.2.2 && <2.3: using mtl-2.2.2
Dependency tasty >=1.2 && <1.5: using tasty-1.2.3
Dependency tasty-hunit >=0.10.0.1 && <0.11: using tasty-hunit-0.10.0.3
Dependency tasty-quickcheck ==0.10.*: using tasty-quickcheck-0.10.1.2
Dependency text >=1.2.3.1 && <1.3: using text-1.2.4.1
Dependency time >=0.1.6.0: using time-1.9.3
Dependency transformers >=0.5.6.2 && <0.6: using transformers-0.5.6.2
Dependency unordered-containers >=0.2.5: using unordered-containers-0.2.14.0
Dependency utf8-string >=1.0.1.1 && <1.1: using utf8-string-1.0.2
Source component graph:
    component lib
    component exe:ginger dependency lib
    component test:tests dependency lib
Configured component graph:
    component ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include aeson-pretty-0.8.8-ieY1twFXPI8cot6MF8MZ0
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include filepath-1.4.2.1
        include http-types-0.12.3-83JHnI2fUYa5h3vgNT9Hwz
        include mtl-2.2.2
        include parsec-3.1.14.0
        include regex-tdfa-1.3.1.0-86Ve5VgglvW23V5dPSAOm3
        include safe-0.3.19-36AYIiBjtSLS65WmTQ35k
        include scientific-0.3.7.0-2IwMamNipm4GhmqfKxrO1Z
        include text-1.2.4.1
        include time-1.9.3
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        include vector-0.12.3.0-DjRVptyTdiT3mipwWvt1jW
    component ginger-0.10.1.0-9F27pmIEmGCH0rvj1qRMKL-ginger
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include optparse-applicative-0.15.1.0-2hUbd3K4cmjHYvRpqoC7A4
        include process-1.6.9.0
        include text-1.2.4.1
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        include yaml-0.11.5.0-JSPy5Fxql0K85T1eoy4nPJ
    component ginger-0.10.1.0-7ADNA5QcqPfIMjoqXXCEiC-tests
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include mtl-2.2.2
        include tasty-1.2.3-7jQjHiJLVlG7T5lZlhi0Bc
        include tasty-hunit-0.10.0.3-5pFQPUD42om9FFVN9h9CyQ
        include tasty-quickcheck-0.10.1.2-G3SWIFemDG33gMlEXVff6g
        include text-1.2.4.1
        include time-1.9.3
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
Linked component graph:
    unit ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include aeson-pretty-0.8.8-ieY1twFXPI8cot6MF8MZ0
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include filepath-1.4.2.1
        include http-types-0.12.3-83JHnI2fUYa5h3vgNT9Hwz
        include mtl-2.2.2
        include parsec-3.1.14.0
        include regex-tdfa-1.3.1.0-86Ve5VgglvW23V5dPSAOm3
        include safe-0.3.19-36AYIiBjtSLS65WmTQ35k
        include scientific-0.3.7.0-2IwMamNipm4GhmqfKxrO1Z
        include text-1.2.4.1
        include time-1.9.3
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        include vector-0.12.3.0-DjRVptyTdiT3mipwWvt1jW
        Text.Ginger=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger,Text.Ginger.AST=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.AST,Text.Ginger.GVal=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.GVal,Text.Ginger.Html=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Html,Text.Ginger.Optimizer=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Optimizer,Text.Ginger.Parse=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Parse,Text.Ginger.Run=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Run,Text.Ginger.Run.Builtins=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Run.Builtins,Text.Ginger.Run.FuncUtils=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Run.FuncUtils,Text.Ginger.Run.Type=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Run.Type,Text.Ginger.Run.VM=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.Ginger.Run.VM,Text.PrintfA=ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo:Text.PrintfA
    unit ginger-0.10.1.0-9F27pmIEmGCH0rvj1qRMKL-ginger
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include optparse-applicative-0.15.1.0-2hUbd3K4cmjHYvRpqoC7A4
        include process-1.6.9.0
        include text-1.2.4.1
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        include yaml-0.11.5.0-JSPy5Fxql0K85T1eoy4nPJ
    unit ginger-0.10.1.0-7ADNA5QcqPfIMjoqXXCEiC-tests
        include aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        include base-4.14.1.0
        include bytestring-0.10.12.0
        include data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        include ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        include mtl-2.2.2
        include tasty-1.2.3-7jQjHiJLVlG7T5lZlhi0Bc
        include tasty-hunit-0.10.0.3-5pFQPUD42om9FFVN9h9CyQ
        include tasty-quickcheck-0.10.1.2-G3SWIFemDG33gMlEXVff6g
        include text-1.2.4.1
        include time-1.9.3
        include transformers-0.5.6.2
        include unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        include utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
Ready component graph:
    definite ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        depends aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        depends aeson-pretty-0.8.8-ieY1twFXPI8cot6MF8MZ0
        depends base-4.14.1.0
        depends bytestring-0.10.12.0
        depends data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        depends filepath-1.4.2.1
        depends http-types-0.12.3-83JHnI2fUYa5h3vgNT9Hwz
        depends mtl-2.2.2
        depends parsec-3.1.14.0
        depends regex-tdfa-1.3.1.0-86Ve5VgglvW23V5dPSAOm3
        depends safe-0.3.19-36AYIiBjtSLS65WmTQ35k
        depends scientific-0.3.7.0-2IwMamNipm4GhmqfKxrO1Z
        depends text-1.2.4.1
        depends time-1.9.3
        depends transformers-0.5.6.2
        depends unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        depends utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        depends vector-0.12.3.0-DjRVptyTdiT3mipwWvt1jW
    definite ginger-0.10.1.0-9F27pmIEmGCH0rvj1qRMKL-ginger
        depends aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        depends base-4.14.1.0
        depends bytestring-0.10.12.0
        depends data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        depends ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        depends optparse-applicative-0.15.1.0-2hUbd3K4cmjHYvRpqoC7A4
        depends process-1.6.9.0
        depends text-1.2.4.1
        depends transformers-0.5.6.2
        depends unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        depends utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
        depends yaml-0.11.5.0-JSPy5Fxql0K85T1eoy4nPJ
    definite ginger-0.10.1.0-7ADNA5QcqPfIMjoqXXCEiC-tests
        depends aeson-1.5.6.0-89mRhAl4FhxDxUb2oPr1Yf
        depends base-4.14.1.0
        depends bytestring-0.10.12.0
        depends data-default-0.7.1.1-B2xqLjZNDxg1KVbA6WyFWH
        depends ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
        depends mtl-2.2.2
        depends tasty-1.2.3-7jQjHiJLVlG7T5lZlhi0Bc
        depends tasty-hunit-0.10.0.3-5pFQPUD42om9FFVN9h9CyQ
        depends tasty-quickcheck-0.10.1.2-G3SWIFemDG33gMlEXVff6g
        depends text-1.2.4.1
        depends time-1.9.3
        depends transformers-0.5.6.2
        depends unordered-containers-0.2.14.0-FjQASgh3rnkLSsvJG2xUpd
        depends utf8-string-1.0.2-Lwtc54cgMl77YyeO5RGhjt
Using Cabal-3.2.1.0 compiled by ghc-8.10
Using compiler: ghc-8.10.4
Using install prefix: /usr/local
Executables installed in: /usr/local/bin
Libraries installed in:
/usr/local/lib/x86_64-linux-ghc-8.10.4/ginger-0.10.1.0-L5phRogT5hkDDRKPTpRCGo
Dynamic Libraries installed in: /usr/local/lib/x86_64-linux-ghc-8.10.4
Private executables installed in:
/usr/local/libexec/x86_64-linux-ghc-8.10.4/ginger-0.10.1.0
Data files installed in:
/usr/local/share/x86_64-linux-ghc-8.10.4/ginger-0.10.1.0
Documentation installed in:
/usr/local/share/doc/x86_64-linux-ghc-8.10.4/ginger-0.10.1.0
Configuration files installed in: /usr/local/etc
Using alex version 3.2.6 found on system at: /usr/bin/alex
Using ar found on system at: /usr/bin/x86_64-pc-linux-gnu-ar
Using c2hs version 0.28.7 found on system at: /usr/bin/c2hs
Using cpphs version 1.20.9 found on system at: /usr/bin/cpphs
Using doctest version 0.16.3 found on system at: /usr/bin/doctest
Using gcc version 12.0.0 found on system at:
/usr/lib/ccache/bin/x86_64-pc-linux-gnu-gcc
Using ghc version 8.10.4 found on system at: /usr/bin/ghc
Using ghc-pkg version 8.10.4 found on system at: /usr/bin/ghc-pkg
No ghcjs found
No ghcjs-pkg found
No greencard found
Using haddock version 2.24.0 found on system at: /usr/bin/haddock
Using happy version 1.20.0 found on system at: /usr/bin/happy
Using haskell-suite found on system at: haskell-suite-dummy-location
Using haskell-suite-pkg found on system at: haskell-suite-pkg-dummy-location
No hmake found
Using hpc version 0.68 found on system at: /usr/bin/hpc
Using hsc2hs version 0.68.7 found on system at: /usr/bin/hsc2hs
Using hscolour version 1.24 found on system at: /usr/bin/HsColour
No jhc found
Using ld found on system at: /usr/bin/x86_64-pc-linux-gnu-ld
Using pkg-config version 1.6.3 found on system at: /usr/bin/pkg-config
Using runghc version 8.10.4 found on system at: /usr/bin/runghc
No strip found
Using tar found on system at: /bin/tar
No uhc found
Preprocessing library for ginger-0.10.1.0..
Building library for ginger-0.10.1.0..
[ 1 of 12] Compiling Text.Ginger.Html ( src/Text/Ginger/Html.hs, dist/build/Text/Ginger/Html.o, dist/build/Text/Ginger/Html.dyn_o )
[ 2 of 12] Compiling Text.Ginger.GVal ( src/Text/Ginger/GVal.hs, dist/build/Text/Ginger/GVal.o, dist/build/Text/Ginger/GVal.dyn_o )

src/Text/Ginger/GVal.hs:816:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Maybe" may never fire
      because ‘.’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘.’
    |
816 | {-#RULES "GVal/round-trip-Maybe" fromGVal . toGVal = Just #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:816:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Maybe" may never fire
      because ‘toGVal’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘toGVal’
    |
816 | {-#RULES "GVal/round-trip-Maybe" fromGVal . toGVal = Just #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:816:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Maybe" may never fire
      because rule "Class op fromGVal" for ‘fromGVal’ might fire first
    Probable fix: add phase [n] or [~n] to the competing rule
    |
816 | {-#RULES "GVal/round-trip-Maybe" fromGVal . toGVal = Just #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:817:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Either" may never fire
      because ‘.’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘.’
    |
817 | {-#RULES "GVal/round-trip-Either" fromGValEither . toGVal = Right #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:817:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Either" may never fire
      because ‘toGVal’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘toGVal’
    |
817 | {-#RULES "GVal/round-trip-Either" fromGValEither . toGVal = Right #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:817:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/round-trip-Either" may never fire
      because rule "Class op fromGValEither" for ‘fromGValEither’ might fire first
    Probable fix: add phase [n] or [~n] to the competing rule
    |
817 | {-#RULES "GVal/round-trip-Either" fromGValEither . toGVal = Right #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:818:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/text-shortcut" may never fire
      because ‘.’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘.’
    |
818 | {-#RULES "GVal/text-shortcut" asText . toGVal = id #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:818:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/text-shortcut" may never fire
      because ‘toGVal’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘toGVal’
    |
818 | {-#RULES "GVal/text-shortcut" asText . toGVal = id #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/GVal.hs:818:10: warning: [-Winline-rule-shadowing]
    Rule "GVal/text-shortcut" may never fire
      because ‘asText’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘asText’
    |
818 | {-#RULES "GVal/text-shortcut" asText . toGVal = id #-}
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ 3 of 12] Compiling Text.Ginger.AST  ( src/Text/Ginger/AST.hs, dist/build/Text/Ginger/AST.o, dist/build/Text/Ginger/AST.dyn_o )
[ 4 of 12] Compiling Text.Ginger.Parse ( src/Text/Ginger/Parse.hs, dist/build/Text/Ginger/Parse.o, dist/build/Text/Ginger/Parse.dyn_o )
[ 5 of 12] Compiling Text.PrintfA     ( src/Text/PrintfA.hs, dist/build/Text/PrintfA.o, dist/build/Text/PrintfA.dyn_o )
[ 6 of 12] Compiling Text.Ginger.Run.Type ( src/Text/Ginger/Run/Type.hs, dist/build/Text/Ginger/Run/Type.o, dist/build/Text/Ginger/Run/Type.dyn_o )
[ 7 of 12] Compiling Text.Ginger.Run.FuncUtils ( src/Text/Ginger/Run/FuncUtils.hs, dist/build/Text/Ginger/Run/FuncUtils.o, dist/build/Text/Ginger/Run/FuncUtils.dyn_o )
[ 8 of 12] Compiling Text.Ginger.Run.VM ( src/Text/Ginger/Run/VM.hs, dist/build/Text/Ginger/Run/VM.o, dist/build/Text/Ginger/Run/VM.dyn_o )
[ 9 of 12] Compiling Text.Ginger.Run.Builtins ( src/Text/Ginger/Run/Builtins.hs, dist/build/Text/Ginger/Run/Builtins.o, dist/build/Text/Ginger/Run/Builtins.dyn_o )

src/Text/Ginger/Run/Builtins.hs:41:1: warning: [-Wdeprecations]
    Module ‘Control.Monad.Error’ is deprecated:
      Use "Control.Monad.Except" instead
   |
41 | import Control.Monad.Error (runErrorT)
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Text/Ginger/Run/Builtins.hs:855:33: warning: [-Wdeprecations]
    In the use of ‘runErrorT’
    (imported from Control.Monad.Error, but defined in Control.Monad.Trans.Error):
    Deprecated: "Use Control.Monad.Trans.Except instead"
    |
855 |         let reM = runIdentity . runErrorT $
    |                                 ^^^^^^^^^
[10 of 12] Compiling Text.Ginger.Run  ( src/Text/Ginger/Run.hs, dist/build/Text/Ginger/Run.o, dist/build/Text/Ginger/Run.dyn_o )
[11 of 12] Compiling Text.Ginger.Optimizer ( src/Text/Ginger/Optimizer.hs, dist/build/Text/Ginger/Optimizer.o, dist/build/Text/Ginger/Optimizer.dyn_o )
[12 of 12] Compiling Text.Ginger      ( src/Text/Ginger.hs, dist/build/Text/Ginger.o, dist/build/Text/Ginger.dyn_o )
Preprocessing executable 'ginger' for ginger-0.10.1.0..
Building executable 'ginger' for ginger-0.10.1.0..
[1 of 2] Compiling Options          ( cli/Options.hs, dist/build/ginger/ginger-tmp/Options.dyn_o )
[2 of 2] Compiling Main             ( cli/GingerCLI.hs, dist/build/ginger/ginger-tmp/Main.dyn_o )

cli/GingerCLI.hs:120:17: warning: [-Wdeprecations]
    In the use of ‘decode’ (imported from Data.Yaml):
    Deprecated: "Please use decodeEither or decodeThrow, which provide information on how the decode failed"
    |
120 | decodeFile fn = YAML.decode <$> (openFile fn ReadMode >>= BS.hGetContents)
    |                 ^^^^^^^^^^^

cli/GingerCLI.hs:123:25: warning: [-Wdeprecations]
    In the use of ‘decode’ (imported from Data.Yaml):
    Deprecated: "Please use decodeEither or decodeThrow, which provide information on how the decode failed"
    |
123 | decodeString = return . YAML.decode . UTF8.fromString
    |                         ^^^^^^^^^^^

cli/GingerCLI.hs:126:15: warning: [-Wdeprecations]
    In the use of ‘decode’ (imported from Data.Yaml):
    Deprecated: "Please use decodeEither or decodeThrow, which provide information on how the decode failed"
    |
126 | decodeStdin = YAML.decode <$> BS.getContents
    |               ^^^^^^^^^^^
Linking dist/build/ginger/ginger ...
Preprocessing test suite 'tests' for ginger-0.10.1.0..
Building test suite 'tests' for ginger-0.10.1.0..
[1 of 3] Compiling Text.Ginger.PropertyTests ( test/Text/Ginger/PropertyTests.hs, dist/build/tests/tests-tmp/Text/Ginger/PropertyTests.dyn_o )
[2 of 3] Compiling Text.Ginger.SimulationTests ( test/Text/Ginger/SimulationTests.hs, dist/build/tests/tests-tmp/Text/Ginger/SimulationTests.dyn_o )
[3 of 3] Compiling Main             ( test/Spec.hs, dist/build/tests/tests-tmp/Main.dyn_o )
Linking dist/build/tests/tests ...
Running 1 test suites...
Test suite tests: RUNNING...
All Tests
  Simulation
    Smoke Test:                                                                   OK
    Comments
      Comment does not appear in output:                                          OK
    Dashed delimiters eat whitespace
      comments:                                                                   OK
      interpolations:                                                             OK
      flow:                                                                       OK
    Default delimiters eat whitespace with LStripBlocks
      comments:                                                                   OK
      interpolations:                                                             OK
      flow:                                                                       OK
      interpolations, left-only:                                                  OK
    Default delimiters eat whitespace with TrimBlocks
      comments:                                                                   OK
      interpolations:                                                             OK
      flow:                                                                       OK
      interpolations, right-only:                                                 OK
    Plussed delimiters override LStrip/TrimBlocks
      comments:                                                                   OK
      interpolations:                                                             OK
      flow:                                                                       OK
    Trailing newlines
      eaten after blocks:                                                         OK
      not eaten after interpolations:                                             OK
      not eaten after blocks when keepTrailingNewline is on:                      OK
    Literals
      Strings
        String: "foobar":                                                         OK
        String: "\r\n\t\b":                                                       OK
      Numbers
        123:                                                                      OK
        3.1415:                                                                   OK
      Booleans
        true:                                                                     OK
        True:                                                                     OK
        false:                                                                    OK
        False:                                                                    OK
      Null:                                                                       OK
    Simple list/object constructs
      Lists:                                                                      OK
      Nested lists:                                                               OK
      Objects:                                                                    OK
      Nested object/list constructs:                                              OK
    Accessing object/list members
      by integer index:                                                           OK
      by string key:                                                              OK
      by property name:                                                           OK
      multi-level mixed:                                                          OK
    Function calls
      print("Hello"):                                                             OK
      "Hello"|print:                                                              OK
    Addition
      1 + 1 = 2:                                                                  OK
      1 + 1 = 2:                                                                  OK
    Subtraction
      1 - 1 = 0:                                                                  OK
    Concatenation
      1 ~ "foo" = 1foo:                                                           OK
    Multiplication
      5 * 5 = 25:                                                                 OK
    Division
      24 / 6 = 4:                                                                 OK
      3 / 2 = 1.5:                                                                OK
    Integer Division
      24 // 6 = 4:                                                                OK
      3 // 2 = 1:                                                                 OK
    Modulo
      7 % 3 = 2:                                                                  OK
    Iteration
      for x in [ "foo", "bar", "baz" ]: <x>:                                      OK
      for x in []: <x> else <no>:                                                 OK
      for x in [a]: <x> else <no>:                                                OK
    The `loop` auto-variable
      loop.cycle:                                                                 OK
      recursive loops:                                                            RuntimeErrorAt "<<unknown>>" (line 1, column 83) (TypeError ["list","dictionary"] (Just "null"))
RuntimeErrorAt "<<unknown>>" (line 1, column 83) (TypeError ["list","dictionary"] (Just "null"))
FAIL
        test/Text/Ginger/SimulationTests.hs:1589:
        expected: "a@1(b@2()c@2(d@3()))"
         but got: "a@1(c@2(d@3())b@2())"
    Conditionals
      if true then "yes" else "no":                                               OK
      if false then "yes" else if false then "maybe" else "no":                   OK
      if false then "yes" else if true then "maybe" else "no":                    OK
      if null should be false:                                                    OK
    Exceptions
      try/catch, no exception:                                                    OK
      try/finally, no exception:                                                  OK
      try/catch, trigger arguments exception:                                     OK
      try/finally, trigger arguments exception:                                   OK
      try/catch, catch selectively (string syntax):                               OK
      try/catch, catch selectively (identifier syntax):                           OK
      try/catch, skip non-matching catches:                                       OK
    Switch
      switch 1 of 1, 2, default:                                                  OK
      switch 1 of 1, 2:                                                           OK
    Comparisons
      if 1 == 1 then "yes" else "no":                                             OK
      if 1 > 0 then "yes" else "no":                                              OK
      if 1 > null then "yes" else "no":                                           OK
      if 1 < 2 then "yes" else "no":                                              OK
      if null < 1 then "yes" else "no":                                           OK
    Boolean AND
      AND (both) (and):                                                           OK
      AND (only one) (and):                                                       OK
      AND (neither) (and):                                                        OK
      AND (both) (&&):                                                            OK
      AND (only one) (&&):                                                        OK
      AND (neither) (&&):                                                         OK
    Boolean OR
      OR (both) (or):                                                             OK
      OR (only one) (or):                                                         OK
      OR (either) (or):                                                           OK
      OR (both) (||):                                                             OK
      OR (only one) (||):                                                         OK
      OR (either) (||):                                                           OK
    Slicing brackets
      from/to, both positive:                                                     OK
      from/to, from negative:                                                     OK
      from/to, to implicit:                                                       OK
      from/to, from implicit:                                                     OK
    Built-in tests
      "divisibleby"
        divisibleby(14,7):                                                        OK
        divisibleby(14,6):                                                        OK
      "even"
        even(3):                                                                  OK
        even("2"):                                                                OK
        even("3"):                                                                OK
        even("two"):                                                              OK
      "eq":                                                                       OK
      "equalto":                                                                  OK
      "ge":                                                                       OK
      "greaterthan":                                                              OK
      "gt":                                                                       OK
      "le":                                                                       OK
      "lessthan":                                                                 OK
      "lt":                                                                       OK
      "ne":                                                                       OK
      "odd"
        odd(2):                                                                   OK
        odd(3):                                                                   OK
        odd("2"):                                                                 OK
        odd("3"):                                                                 OK
    Built-in filters/functions
      "abs":                                                                      OK
      "any"
        "any" (both):                                                             OK
        "any" (just one):                                                         OK
        "any" (neither):                                                          OK
      "all"
        "all" (both):                                                             OK
        "all" (just one):                                                         OK
        "all" (neither):                                                          OK
      "ceil"
        14.1:                                                                     OK
        -14.1:                                                                    OK
        -14.8:                                                                    OK
      "capitalize":                                                               OK
      "upper":                                                                    OK
      "lower":                                                                    OK
      "center"
        extra space:                                                              OK
        no extra space:                                                           OK
      "compose":                                                                  OK
      "concat":                                                                   OK
      "contains"
        single match:                                                             OK
        multi match:                                                              OK
        non-match:                                                                OK
      "date"
        format a date:                                                            OK
        format a list as a date:                                                  OK
        format a 5-element list as a date:                                        OK
        format a 3-element list as a date:                                        OK
        use correct default time (noon) with 3-element list:                      OK
        format a string as a date:                                                OK
        format a string as a date (JSON-style formatting):                        OK
        format a string with fractional seconds as a date (all variants):         OK
        format a string as a time-of-day:                                         OK
        format a string as a date, with timezone:                                 OK
        format a local-time string as a date + time, with explicit timezone:      OK
        format a zoned-time string as a date, with explicit timezone:             OK
        use a custom locale:                                                      OK
      "default"
        trigger default:                                                          OK
        use truthy value:                                                         OK
      "difference":                                                               OK
      "dictsort"
        by key:                                                                   OK
        by value:                                                                 OK
      "escape"
        single item:                                                              OK
        multiple items:                                                           OK
      "equals"
        two equal:                                                                OK
        all equal:                                                                OK
        some equal:                                                               OK
      "eval"
        simple:                                                                   OK
        with extra state:                                                         OK
        outside state does not bleed into eval():                                 OK
        standard functions available inside eval:                                 OK
      "filesizeformat"
        bytes:                                                                    OK
        kilobytes:                                                                OK
        megabytes:                                                                OK
        bytes (2-based):                                                          OK
        kibibytes:                                                                OK
        mebibytes:                                                                OK
      "filter"
        simple case:                                                              OK
        with extra argument:                                                      OK
      "format"
        jinja.pocoo.org example:                                                  OK
      "map"
        map function over list:                                                   OK
        map function over dictionary:                                             OK
        map to extract attribute:                                                 OK
      "not-equals"
        all equal:                                                                OK
        not all equal:                                                            OK
      "floor"
        14.1:                                                                     OK
        14.8:                                                                     OK
        -14.1:                                                                    OK
        -14.8:                                                                    OK
      "int"
        14.1:                                                                     OK
        14.8:                                                                     OK
        -14.1:                                                                    OK
        -14.8:                                                                    OK
      "length"
        list:                                                                     OK
        dict:                                                                     OK
        string:                                                                   OK
      "partial"
        partial:                                                                  OK
      "printf"
        %i, passed as int:                                                        OK
        %i, passed as string:                                                     OK
        %i, passed as float:                                                      OK
        %f, passed as int:                                                        OK
        %.3f, passed as int:                                                      OK
        %s, string:                                                               OK
      "product":                                                                  OK
      "ratio":                                                                    OK
      "round"
        14.1:                                                                     OK
        14.8:                                                                     OK
        -14.1:                                                                    OK
        -14.8:                                                                    OK
      "str":                                                                      OK
      "sum":                                                                      OK
      "truncate"
        14.1:                                                                     OK
        14.8:                                                                     OK
        -14.1:                                                                    OK
        -14.8:                                                                    OK
      "urlencode":                                                                OK
      "sort"
        simple:                                                                   OK
        reverse:                                                                  OK
        sort by key:                                                              OK
        sort by key, reverse:                                                     OK
        sort dictionary by keys:                                                  OK
        sort by a projection function:                                            OK
        sort by a path:                                                           OK
      "slice"
        full positional args:                                                     OK
        implicit 'to end':                                                        OK
        full named args:                                                          OK
        negative offset:                                                          OK
        call on string subject:                                                   OK
      "split"
        word-splitting:                                                           OK
        word-splitting, more spaces:                                              OK
        word-splitting, more spaces, explicit delim:                              OK
      "replace"
        simple case:                                                              OK
        multiple replacements:                                                    OK
        longer replacements:                                                      OK
        deletion:                                                                 OK
      "zip"
        lists:                                                                    OK
      "zipwith"
        sum:                                                                      OK
      "json"
        null:                                                                     OK
        [1,2,3]:                                                                  OK
      "in"
        elem in list:                                                             OK
        elem not in list:                                                         OK
        elem in dict:                                                             OK
        elem not in dict:                                                         OK
      "apply"
        sum:                                                                      OK
    Setting variables
      plain:                                                                      OK
      self-referential:                                                           OK
    HTML encoding
      no encoding outside of constructs:                                          OK
      auto-encode inside interpolations:                                          OK
      raw filter bypasses encoding:                                               OK
    Includes
      include plain:                                                              OK
      include with a variable:                                                    OK
      not eaten after blocks in included template when keepTrailingNewline is on: OK
      include referencing an included variable:                                   OK
    Explicit Local Scopes
      baseline:                                                                   OK
      inside local scope:                                                         OK
      after exiting local scope:                                                  OK
    Indentation
      stripping leading spaces:                                                   OK
      explicit indent string:                                                     OK
      implicit indent string:                                                     OK
      explicit non-whitespace indent string:                                      OK
      explicit indent string from more complex expression:                        OK
      discarding level-0 indents:                                                 OK
      indentation levels inherited at runtime (dynamic):                          OK
    Macros
      simple:                                                                     OK
      with args:                                                                  OK
    Lambdas
      single arg:                                                                 OK
      two args:                                                                   OK
    Ternary operator
      C syntax:                                                                   OK
      python syntax:                                                              OK
      C syntax, nested, true/false:                                               OK
      Python syntax, nested, true/false:                                          OK
      C syntax, nested, true/true:                                                OK
      Python syntax, nested, true/true:                                           OK
    Call syntax
      "caller":                                                                   OK
    Inheritance
      inheritance:                                                                OK
      multi-tier inheritance:                                                     OK
    Non-HTML Output
      text:                                                                       OK
      json:                                                                       OK
    Script mode
      empty script block:                                                         OK
      comments
        simple:                                                                   OK
        multiple:                                                                 OK
        inside expressions:                                                       OK
      echo:                                                                       OK
      expression statement:                                                       OK
      grouped statements:                                                         OK
      if:                                                                         OK
      if/else:                                                                    OK
      switch:                                                                     OK
      for:                                                                        OK
      for/else (loop):                                                            OK
      for/else (recover):                                                         OK
      set:                                                                        OK
      include:                                                                    OK
      macro:                                                                      OK
      Script statment blocks
        baseline:                                                                 OK
        inside local scope:                                                       OK
        after exiting block:                                                      OK
      Explicit Local Scopes
        baseline:                                                                 OK
        inside local scope:                                                       OK
        after exiting local scope:                                                OK
    do expressions
      single statement:                                                           OK
      statement block:                                                            OK
    overriding delimiters
      angle brackets:                                                             OK
      evil mode:                                                                  OK
    is-tests
      basic is-test, true:                                                        OK
      basic is-test, false:                                                       OK
      parens-less argument syntax:                                                OK
      precedence vs booleans:                                                     OK
      precedence vs addition:                                                     OK
    regex module
      regex.test
        simple match:                                                             OK
        simple match:                                                             OK
      regex.match
        simple match:                                                             OK
        string representation of multiple matches returns only whole match:       OK
        html representation of multiple matches returns only whole match:         OK
      regex.matches
        simple match:                                                             OK
  Properties
    Optimizer
      optimizer doesn't change behavior:                                          OK (0.03s)
        +++ OK, passed 100 tests.
    ToGVal / FromGVal round tripping
      Int:                                                                        OK
        +++ OK, passed 100 tests.
      Bool:                                                                       OK
        +++ OK, passed 100 tests.
      [Text]:                                                                     OK
        +++ OK, passed 100 tests.
      Maybe Text:                                                                 OK
        +++ OK, passed 100 tests.
      ByteString:                                                                 OK
        +++ OK, passed 100 tests.
      Text:                                                                       OK
        +++ OK, passed 100 tests.
      LocalTime:                                                                  OK
        +++ OK, passed 100 tests.
      TimeZone:                                                                   OK
        +++ OK, passed 100 tests.
      ZonedTime:                                                                  OK
        +++ OK, passed 100 tests.

1 out of 307 tests failed (0.09s)
Test suite tests: FAIL
Test suite logged to: dist/test/ginger-0.10.1.0-tests.log
0 of 1 test suites (0 of 1 test cases) passed.