55module Hydra.Test.Serialization where
66
77import qualified Hydra.Ast as Ast
8- import qualified Hydra.Ext.Haskell.Operators as Operators
8+ import qualified Hydra.Lib.Math as Math
99import qualified Hydra.Serialization as Serialization
1010import qualified Hydra.Testing as Testing
1111import Prelude hiding (Enum , Ordering , decodeFloat , encodeFloat , fail , map , pure , sum )
@@ -15,6 +15,24 @@ import qualified Data.List as L
1515import qualified Data.Map as M
1616import qualified Data.Set as S
1717
18+ arrowOp :: Ast. Op
19+ arrowOp = Serialization. op " ->" (Math. negate 1 ) Ast. AssociativityRight
20+
21+ gtOp :: Ast. Op
22+ gtOp = Serialization. op " >" 4 Ast. AssociativityNone
23+
24+ plusOp :: Ast. Op
25+ plusOp = Serialization. op " +" 6 Ast. AssociativityBoth
26+
27+ multOp :: Ast. Op
28+ multOp = Serialization. op " *" 7 Ast. AssociativityBoth
29+
30+ lambdaOp :: Ast. Op
31+ lambdaOp = Serialization. op " ->" (Math. negate 1 ) Ast. AssociativityRight
32+
33+ caseOp :: Ast. Op
34+ caseOp = Serialization. op " ->" 0 Ast. AssociativityNone
35+
1836-- | Test cases for AST serialization
1937allTests :: Testing. TestGroup
2038allTests =
@@ -30,7 +48,7 @@ allTests =
3048 Testing. TestCaseWithMetadata {
3149 Testing. testCaseWithMetadataName = " right-associative operator" ,
3250 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
33- Testing. serializationTestCaseInput = (Serialization. ifx Operators. arrowOp (Serialization. ifx Operators. arrowOp (Serialization. cst " a" ) (Serialization. cst " b" )) (Serialization. ifx Operators. arrowOp (Serialization. cst " c" ) (Serialization. cst " d" ))),
51+ Testing. serializationTestCaseInput = (Serialization. ifx arrowOp (Serialization. ifx arrowOp (Serialization. cst " a" ) (Serialization. cst " b" )) (Serialization. ifx arrowOp (Serialization. cst " c" ) (Serialization. cst " d" ))),
3452 Testing. serializationTestCaseOutput = " (a -> b) -> c -> d" })),
3553 Testing. testCaseWithMetadataDescription = Nothing ,
3654 Testing. testCaseWithMetadataTags = [] }]},
@@ -50,9 +68,9 @@ allTests =
5068 Ast. opPrecedence = (Ast. Precedence 0 ),
5169 Ast. opAssociativity = Ast. AssociativityNone }) (Serialization. spaceSep [
5270 Serialization. cst " case" ,
53- (Serialization. ifx Operators. gtOp (Serialization. cst " x" ) (Serialization. num 42 ))]) (Serialization. newlineSep [
54- Serialization. ifx Operators. caseOp (Serialization. cst " False" ) (Serialization. cst " Big" ),
55- (Serialization. ifx Operators. caseOp (Serialization. cst " True" ) (Serialization. cst " Small" ))])),
71+ (Serialization. ifx gtOp (Serialization. cst " x" ) (Serialization. num 42 ))]) (Serialization. newlineSep [
72+ Serialization. ifx caseOp (Serialization. cst " False" ) (Serialization. cst " Big" ),
73+ (Serialization. ifx caseOp (Serialization. cst " True" ) (Serialization. cst " Small" ))])),
5674 Testing. serializationTestCaseOutput = " case x > 42 of\n False -> Big\n True -> Small" })),
5775 Testing. testCaseWithMetadataDescription = Nothing ,
5876 Testing. testCaseWithMetadataTags = [] },
@@ -67,19 +85,19 @@ allTests =
6785 Ast. opPrecedence = (Ast. Precedence 0 ),
6886 Ast. opAssociativity = Ast. AssociativityNone }) (Serialization. spaceSep [
6987 Serialization. cst " case" ,
70- (Serialization. ifx Operators. gtOp (Serialization. cst " x" ) (Serialization. num 42 ))]) (Serialization. newlineSep [
71- Serialization. ifx Operators. caseOp (Serialization. cst " True" ) (Serialization. ifx (Ast. Op {
88+ (Serialization. ifx gtOp (Serialization. cst " x" ) (Serialization. num 42 ))]) (Serialization. newlineSep [
89+ Serialization. ifx caseOp (Serialization. cst " True" ) (Serialization. ifx (Ast. Op {
7290 Ast. opSymbol = (Ast. Symbol " of" ),
7391 Ast. opPadding = Ast. Padding {
7492 Ast. paddingLeft = Ast. WsSpace ,
7593 Ast. paddingRight = (Ast. WsBreakAndIndent " " )},
7694 Ast. opPrecedence = (Ast. Precedence 0 ),
7795 Ast. opAssociativity = Ast. AssociativityNone }) (Serialization. spaceSep [
7896 Serialization. cst " case" ,
79- (Serialization. ifx Operators. gtOp (Serialization. cst " x" ) (Serialization. num 100 ))]) (Serialization. newlineSep [
80- Serialization. ifx Operators. caseOp (Serialization. cst " True" ) (Serialization. cst " ReallyBig" ),
81- (Serialization. ifx Operators. caseOp (Serialization. cst " False" ) (Serialization. cst " Big" ))])),
82- (Serialization. ifx Operators. caseOp (Serialization. cst " False" ) (Serialization. cst " Small" ))])),
97+ (Serialization. ifx gtOp (Serialization. cst " x" ) (Serialization. num 100 ))]) (Serialization. newlineSep [
98+ Serialization. ifx caseOp (Serialization. cst " True" ) (Serialization. cst " ReallyBig" ),
99+ (Serialization. ifx caseOp (Serialization. cst " False" ) (Serialization. cst " Big" ))])),
100+ (Serialization. ifx caseOp (Serialization. cst " False" ) (Serialization. cst " Small" ))])),
83101 Testing. serializationTestCaseOutput = " case x > 42 of\n True -> case x > 100 of\n True -> ReallyBig\n False -> Big\n False -> Small" })),
84102 Testing. testCaseWithMetadataDescription = Nothing ,
85103 Testing. testCaseWithMetadataTags = [] }]},
@@ -91,7 +109,7 @@ allTests =
91109 Testing. TestCaseWithMetadata {
92110 Testing. testCaseWithMetadataName = " simple lambda" ,
93111 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
94- Testing. serializationTestCaseInput = (Serialization. ifx Operators. lambdaOp (Serialization. cst " \\ x y" ) (Serialization. ifx Operators. plusOp (Serialization. cst " x" ) (Serialization. cst " y" ))),
112+ Testing. serializationTestCaseInput = (Serialization. ifx lambdaOp (Serialization. cst " \\ x y" ) (Serialization. ifx plusOp (Serialization. cst " x" ) (Serialization. cst " y" ))),
95113 Testing. serializationTestCaseOutput = " \\ x y -> x + y" })),
96114 Testing. testCaseWithMetadataDescription = Nothing ,
97115 Testing. testCaseWithMetadataTags = [] }]},
@@ -134,7 +152,7 @@ allTests =
134152 Testing. serializationTestCaseInput = (Serialization. bracketList Serialization. inlineStyle [
135153 Serialization. bracketList Serialization. inlineStyle [
136154 Serialization. num 1 ,
137- (Serialization. ifx Operators. multOp (Serialization. ifx Operators. plusOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx Operators. plusOp (Serialization. num 1 ) (Serialization. num 10 )))],
155+ (Serialization. ifx multOp (Serialization. ifx plusOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx plusOp (Serialization. num 1 ) (Serialization. num 10 )))],
138156 (Serialization. num 2 )]),
139157 Testing. serializationTestCaseOutput = " [[1, (2 + 3) * (1 + 10)], 2]" })),
140158 Testing. testCaseWithMetadataDescription = Nothing ,
@@ -147,28 +165,28 @@ allTests =
147165 Testing. TestCaseWithMetadata {
148166 Testing. testCaseWithMetadataName = " operators with different precedence - no parens needed" ,
149167 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
150- Testing. serializationTestCaseInput = (Serialization. ifx Operators. plusOp (Serialization. ifx Operators. multOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx Operators. multOp (Serialization. num 1 ) (Serialization. num 10 ))),
168+ Testing. serializationTestCaseInput = (Serialization. ifx plusOp (Serialization. ifx multOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx multOp (Serialization. num 1 ) (Serialization. num 10 ))),
151169 Testing. serializationTestCaseOutput = " 2 * 3 + 1 * 10" })),
152170 Testing. testCaseWithMetadataDescription = Nothing ,
153171 Testing. testCaseWithMetadataTags = [] },
154172 Testing. TestCaseWithMetadata {
155173 Testing. testCaseWithMetadataName = " operators with different precedence - parens needed" ,
156174 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
157- Testing. serializationTestCaseInput = (Serialization. ifx Operators. multOp (Serialization. ifx Operators. plusOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx Operators. plusOp (Serialization. num 1 ) (Serialization. num 10 ))),
175+ Testing. serializationTestCaseInput = (Serialization. ifx multOp (Serialization. ifx plusOp (Serialization. num 2 ) (Serialization. num 3 )) (Serialization. ifx plusOp (Serialization. num 1 ) (Serialization. num 10 ))),
158176 Testing. serializationTestCaseOutput = " (2 + 3) * (1 + 10)" })),
159177 Testing. testCaseWithMetadataDescription = Nothing ,
160178 Testing. testCaseWithMetadataTags = [] },
161179 Testing. TestCaseWithMetadata {
162180 Testing. testCaseWithMetadataName = " associative operator left nesting" ,
163181 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
164- Testing. serializationTestCaseInput = (Serialization. ifx Operators. multOp (Serialization. cst " x" ) (Serialization. ifx Operators. multOp (Serialization. cst " y" ) (Serialization. cst " z" ))),
182+ Testing. serializationTestCaseInput = (Serialization. ifx multOp (Serialization. cst " x" ) (Serialization. ifx multOp (Serialization. cst " y" ) (Serialization. cst " z" ))),
165183 Testing. serializationTestCaseOutput = " x * y * z" })),
166184 Testing. testCaseWithMetadataDescription = Nothing ,
167185 Testing. testCaseWithMetadataTags = [] },
168186 Testing. TestCaseWithMetadata {
169187 Testing. testCaseWithMetadataName = " associative operator right nesting" ,
170188 Testing. testCaseWithMetadataCase = (Testing. TestCaseSerialization (Testing. SerializationTestCase {
171- Testing. serializationTestCaseInput = (Serialization. ifx Operators. multOp (Serialization. ifx Operators. multOp (Serialization. cst " x" ) (Serialization. cst " y" )) (Serialization. cst " z" )),
189+ Testing. serializationTestCaseInput = (Serialization. ifx multOp (Serialization. ifx multOp (Serialization. cst " x" ) (Serialization. cst " y" )) (Serialization. cst " z" )),
172190 Testing. serializationTestCaseOutput = " x * y * z" })),
173191 Testing. testCaseWithMetadataDescription = Nothing ,
174192 Testing. testCaseWithMetadataTags = [] }]}],
0 commit comments