1 {-# LANGUAGE AllowAmbiguousTypes #-}
3 {-# LANGUAGE ExistentialQuantification #-}
4 {-# LANGUAGE ImportQualifiedPost #-}
6 {-# LANGUAGE RankNTypes #-}
7 {-# LANGUAGE TypeApplications #-}
8 {-# OPTIONS_GHC -Wno-orphans #-}
12 import Data.List qualified as List
14 import Symantic qualified as Sym
15 import Symantic.Classes (ProductFunctor (..), SumFunctor (..))
16 import System.IO.Unsafe (unsafePerformIO)
18 import Test.Tasty.Golden
19 import Text.Printf (printf)
21 import Examples.Ex01 qualified as Ex01
22 import Examples.Ex02 qualified as Ex02
34 (printf "Site%03d" siteNum)
36 (printf "Model%02d" modelNum)
38 (getGoldenDir (printf "Generator/Site%03d/Model%02d/expected.txt" siteNum modelNum))
40 return $ fromString $ List.unlines $ show <$> generate (Sym.unReader site model)
41 | (modelNum, model) <- ol models
43 | (siteNum, Golden site models) <- ol goldens
48 (printf "Site%03d" siteNum)
50 (printf "Model%02d" modelNum)
52 (printf "Gen%03d" genNum)
54 (getGoldenDir (printf "Encoder/Site%03d/Model%02d/Gen%03d.expected.txt" siteNum modelNum genNum))
56 return $ fromString $ show $ encode (Sym.unReader site model) genValue
57 | (genNum, Gen{..}) <- ol $ generate (Sym.unReader site model)
59 | (modelNum, model) <- ol models
61 | (siteNum, Golden site models) <- ol goldens
66 (printf "Site%03d" siteNum)
69 (Sym.unReader site model)
71 { compilerConfSource = getGoldenDir (printf "Encoder/Site%03d/Model%02d/Source/" siteNum modelNum)
72 , compilerConfDest = getGoldenDir (printf "Encoder/Site%03d/Model%02d/Got/" siteNum modelNum)
78 (printf "Model%02d" modelNum)
81 (printf "Route%03d" genNum)
83 (getGoldenDir (printf "Encoder/Site%03d/Model%02d/Expected/%s.txt" siteNum modelNum slugs))
84 (getGoldenDir (printf "Encoder/Site%03d/Model%02d/Got/%s.txt" siteNum modelNum slugs))
86 | --return $ fromString $ show $ encode (Sym.unReader site model) genValue
87 (genNum, Gen{..}) <- ol $ generate (Sym.unReader site model)
88 , let slugs = pathOfSlugs genSlugs
90 | (modelNum, model) <- ol models
92 | (siteNum, Golden site models) <- ol goldens
96 getGoldenDir :: FilePath -> FilePath
97 getGoldenDir p = unsafePerformIO $ getDataFileName $ "tests/Goldens/" <> p
99 goldenDiff :: FilePath -> FilePath -> [String]
100 goldenDiff ref new = ["diff", "-u", "-w", "-B", ref, new]
109 (forall repr. Testable model repr => Sym.Reader model repr a)
112 instance (Renderable a, Renderable b) => Renderable (Either a b) where
115 Left x -> render Comp{compValue = x, ..}
116 Right x -> render Comp{compValue = x, ..}
117 instance (Renderable a, Renderable b) => Renderable (a, b) where
118 render Comp{compValue = (_x, y), ..} =
119 --render Comp{compValue = x, ..} <|>
120 render Comp{compValue = y, ..}
124 [ Golden @() index [()]
128 , Golden @(Either () ())
129 ("root" </> ("foo" </> index <+> "bar" </> index))
131 , Golden @(Either () (), Either () ())
133 </> ("a" </> literalSlug "b" <+> "c" </> literalSlug "d")
134 <.> ("A" </> literalSlug "B" <+> "C" </> literalSlug "D")
138 , Golden @Ex01.Site Ex01.site [()]
139 , Golden @Ex02.Site Ex02.site [Ex02.model0]