never executed always true always false
1 {-# LANGUAGE FlexibleInstances #-}
2 {-# LANGUAGE RankNTypes #-}
3
4 module Conjure.RepresentationsTest ( tests ) where
5
6 -- conjure
7 import Conjure.Prelude
8 import Conjure.Language.Definition
9 import Conjure.Language.Type
10 import Conjure.Language.Domain
11 import Conjure.Language.Pretty
12 import Conjure.Process.Enumerate ( EnumerateDomainNoIO(..) )
13 import Conjure.Representations ( downC, up, downC1, up1 )
14
15 -- tasty
16 import Test.Tasty
17 import Test.Tasty.HUnit ( Assertion, testCase, assertFailure, (@?=) )
18 -- import Test.Tasty.QuickCheck as QC
19 -- import Test.Tasty.SmallCheck as SC
20
21
22 tests ::
23 (?typeCheckerMode :: TypeCheckerMode) =>
24 TestTree
25 tests = testGroup "representations"
26
27 [ testCase "bool #1" $
28 let
29 highDomain = DomainBool
30 highConstant = ConstantBool False
31 low = [("x", highDomain, highConstant)]
32 in testCases "x" highDomain highConstant (const Nothing) low low
33
34 , testCase "bool #2" $
35 let
36 highDomain = DomainBool
37 highConstant = ConstantBool True
38 low = [("x", highDomain, highConstant)]
39 in testCases "x" highDomain highConstant (const Nothing) low low
40
41 , testCase "int #1" $
42 let
43 highDomain = intDomain 1 4
44 highConstant = (ConstantInt TagInt) 3
45 low = [("x", highDomain, highConstant)]
46 in testCases "x" highDomain highConstant (const Nothing) low low
47
48 , testCase "matrix of bool" $
49 let
50 highDomain = DomainMatrix (intDomain 1 3) DomainBool
51 highConstant = ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True]
52 low = [("x", highDomain, highConstant)]
53 in testCases "x" highDomain highConstant (const Nothing) low low
54
55 , testCase "matrix of int" $
56 let
57 highDomain = DomainMatrix (intDomain 1 3) (intDomain 1 5)
58 highConstant = ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3, (ConstantInt TagInt) 5]
59 low = [("x", highDomain, highConstant)]
60 in testCases "x" highDomain highConstant (const Nothing) low low
61
62 , testCase "matrix 2d of bool" $
63 let
64 highDomain =
65 DomainMatrix (intDomain 1 3) (DomainMatrix (intDomain 1 2) DomainBool)
66 highConstant =
67 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
68 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [ConstantBool False, ConstantBool True ]
69 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [ConstantBool True , ConstantBool False]
70 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [ConstantBool True , ConstantBool True ]
71 ]
72 low = [("x", highDomain, highConstant)]
73 in testCases "x" highDomain highConstant (const Nothing) low low
74
75 , testCase "matrix 2d of int" $
76 let
77 highDomain =
78 DomainMatrix (intDomain 1 3) (DomainMatrix (intDomain 1 2) (intDomain 0 9))
79 highConstant =
80 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
81 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 3, (ConstantInt TagInt) 7]
82 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 2, (ConstantInt TagInt) 8]
83 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 0, (ConstantInt TagInt) 1]
84 ]
85 low = [("x", highDomain, highConstant)]
86 in testCases "x" highDomain highConstant (const Nothing) low low
87
88 , testCase "(bool, int)" $
89 let
90 highDomain = DomainTuple [DomainBool, intDomain 1 3]
91 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2]
92 low = [ ( "x_1", DomainBool , ConstantBool False )
93 , ( "x_2", intDomain 1 3, (ConstantInt TagInt) 2 )
94 ]
95 in testCases "x" highDomain highConstant Just low low
96
97 , testCase "(bool, int, bool)" $
98 let
99 highDomain = DomainTuple [DomainBool, intDomain 1 3, DomainBool]
100 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2, ConstantBool True]
101 low = [ ( "x_1", DomainBool , ConstantBool False )
102 , ( "x_2", intDomain 1 3, (ConstantInt TagInt) 2 )
103 , ( "x_3", DomainBool , ConstantBool True )
104 ]
105 in testCases "x" highDomain highConstant Just low low
106
107 , testCase "((bool, int), bool)" $
108 let
109 highDomain = DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainBool]
110 highConstant = ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True]
111 mid = [ ( "x_1", DomainTuple [DomainBool, intDomain 1 3], ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2] )
112 , ( "x_2", DomainBool, ConstantBool True )
113 ]
114 low = [ ( "x_1_1", DomainBool , ConstantBool False )
115 , ( "x_1_2", intDomain 1 3, (ConstantInt TagInt) 2 )
116 , ( "x_2" , DomainBool , ConstantBool True )
117 ]
118 in testCases "x" highDomain highConstant Just mid low
119
120 , testCase "(bool, (int, bool))" $
121 let
122 highDomain = DomainTuple [DomainBool, DomainTuple [intDomain 1 3, DomainBool]]
123 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True]]
124 mid = [ ( "x_1", DomainBool, ConstantBool False )
125 , ( "x_2", DomainTuple [intDomain 1 3, DomainBool], ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True] )
126 ]
127 low = [ ( "x_1" , DomainBool , ConstantBool False )
128 , ( "x_2_1", intDomain 1 3, (ConstantInt TagInt) 2 )
129 , ( "x_2_2", DomainBool , ConstantBool True )
130 ]
131 in testCases "x" highDomain highConstant Just mid low
132
133 , testCase "(bool, int, bool, int)" $
134 let
135 highDomain = DomainTuple [DomainBool, intDomain 1 3, DomainBool, intDomain 2 5]
136 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2, ConstantBool True, (ConstantInt TagInt) 4]
137 low = [ ( "x_1", DomainBool , ConstantBool False )
138 , ( "x_2", intDomain 1 3, (ConstantInt TagInt) 2 )
139 , ( "x_3", DomainBool , ConstantBool True )
140 , ( "x_4", intDomain 2 5, (ConstantInt TagInt) 4 )
141 ]
142 in testCases "x" highDomain highConstant Just low low
143
144 , testCase "((bool, int), (bool, int))" $
145 let
146 highDomain = DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainTuple [DomainBool, intDomain 2 5]]
147 highConstant = ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantAbstract $ AbsLitTuple [ConstantBool True, (ConstantInt TagInt) 4]]
148 mid = [ ( "x_1", DomainTuple [DomainBool, intDomain 1 3], ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2] )
149 , ( "x_2", DomainTuple [DomainBool, intDomain 2 5], ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4] )
150 ]
151 low = [ ( "x_1_1", DomainBool , ConstantBool False )
152 , ( "x_1_2", intDomain 1 3, (ConstantInt TagInt) 2 )
153 , ( "x_2_1", DomainBool , ConstantBool True )
154 , ( "x_2_2", intDomain 2 5, (ConstantInt TagInt) 4 )
155 ]
156 in testCases "x" highDomain highConstant Just mid low
157
158 , testCase "(bool, (int, (bool, int)))" $
159 let
160 highDomain = DomainTuple [DomainBool, DomainTuple [intDomain 1 3, DomainTuple [DomainBool, intDomain 2 5]]]
161 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitTuple [ConstantBool True, (ConstantInt TagInt) 4]]]
162 mid = [ ( "x_1", DomainBool , ConstantBool False )
163 , ( "x_2", DomainTuple [intDomain 1 3, DomainTuple [DomainBool, intDomain 2 5]]
164 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitTuple [ConstantBool True, (ConstantInt TagInt) 4]] )
165 ]
166 low = [ ( "x_1" , DomainBool , ConstantBool False )
167 , ( "x_2_1" , intDomain 1 3, (ConstantInt TagInt) 2 )
168 , ( "x_2_2_1", DomainBool , ConstantBool True )
169 , ( "x_2_2_2", intDomain 2 5, (ConstantInt TagInt) 4 )
170 ]
171 in testCases "x" highDomain highConstant Just mid low
172
173 , testCase "(bool, (int, bool), int)" $
174 let
175 highDomain = DomainTuple [DomainBool, DomainTuple [intDomain 1 3, DomainBool], intDomain 2 5]
176 highConstant = ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True], (ConstantInt TagInt) 4]
177 mid = [ ( "x_1", DomainBool , ConstantBool False )
178 , ( "x_2", DomainTuple [intDomain 1 3, DomainBool], ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True] )
179 , ( "x_3", intDomain 2 5, (ConstantInt TagInt) 4 )
180 ]
181 low = [ ( "x_1" , DomainBool , ConstantBool False )
182 , ( "x_2_1", intDomain 1 3, (ConstantInt TagInt) 2 )
183 , ( "x_2_2", DomainBool , ConstantBool True )
184 , ( "x_3" , intDomain 2 5, (ConstantInt TagInt) 4 )
185 ]
186 in testCases "x" highDomain highConstant Just mid low
187
188 , testCase "(((bool, int), bool), int)" $
189 let
190 highDomain = DomainTuple [DomainTuple [ DomainTuple [DomainBool, intDomain 1 3], DomainBool], intDomain 2 5]
191 highConstant = ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True], (ConstantInt TagInt) 4]
192 mid = [ ( "x_1", DomainTuple [ DomainTuple [DomainBool, intDomain 1 3], DomainBool]
193 , ConstantAbstract $ AbsLitTuple [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True] )
194 , ( "x_2", intDomain 2 5, (ConstantInt TagInt) 4 )
195 ]
196 low = [ ( "x_1_1_1", DomainBool , ConstantBool False )
197 , ( "x_1_1_2", intDomain 1 3, (ConstantInt TagInt) 2 )
198 , ( "x_1_2" , DomainBool , ConstantBool True )
199 , ( "x_2" , intDomain 2 5, (ConstantInt TagInt) 4 )
200 ]
201 in testCases "x" highDomain highConstant Just mid low
202
203 , testCase "matrix of (bool, int)" $
204 let
205 highDomain =
206 DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 0 9])
207 highConstant =
208 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
209 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 0]
210 , ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 3]
211 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 4]
212 ]
213 low = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool
214 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool True, ConstantBool False] )
215 , ( "x_2", DomainMatrix (intDomain 1 3) (intDomain 0 9)
216 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 0, (ConstantInt TagInt) 3, (ConstantInt TagInt) 4] )
217 ]
218 in testCases "x" highDomain highConstant Just low low
219
220 , testCase "matrix of (bool, int, bool)" $
221 let
222 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 1 3, DomainBool])
223 highConstant =
224 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
225 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2, ConstantBool True]
226 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3, ConstantBool False]
227 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 4, ConstantBool False]
228 ]
229 low = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool False] )
230 , ( "x_2", DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ] )
231 , ( "x_3", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False] )
232 ]
233 in testCases "x" highDomain highConstant Just low low
234
235 , testCase "matrix of ((bool, int), bool)" $
236 let
237 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainBool])
238 highConstant =
239 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
240 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True]
241 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3], ConstantBool False]
242 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4], ConstantBool False]
243 ]
244 mid = [ ( "x_1", DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 1 3])
245 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
246 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2]
247 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3]
248 , ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]
249 ] )
250 , ( "x_2", DomainMatrix (intDomain 1 3) DomainBool
251 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False] )
252 ]
253 low = [ ( "x_1_1", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ] )
254 , ( "x_1_2", DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ] )
255 , ( "x_2" , DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False] )
256 ]
257 in testCases "x" highDomain highConstant Just mid low
258
259 , testCase "matrix of (bool, (int, bool))" $
260 let
261 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, DomainTuple [intDomain 0 9, DomainBool]])
262 highConstant =
263 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
264 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 0, ConstantBool True]]
265 , ConstantAbstract $ AbsLitTuple [ConstantBool True , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool False]]
266 , ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool True]]
267 ]
268 mid = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool
269 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool True, ConstantBool False] )
270 , ( "x_2", DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 0 9, DomainBool])
271 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
272 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 0, ConstantBool True]
273 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool False]
274 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool True]
275 ] )
276 ]
277 low = [ ( "x_1" , DomainMatrix (intDomain 1 3) DomainBool
278 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool True, ConstantBool False] )
279 , ( "x_2_1", DomainMatrix (intDomain 1 3) (intDomain 0 9)
280 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 0, (ConstantInt TagInt) 3, (ConstantInt TagInt) 4] )
281 , ( "x_2_2", DomainMatrix (intDomain 1 3) DomainBool
282 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True, ConstantBool False, ConstantBool True] )
283 ]
284 in testCases "x" highDomain highConstant Just mid low
285
286 , testCase "matrix of (bool, int, bool, int)" $
287 let
288 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 1 3, DomainBool, intDomain 2 5])
289 highConstant =
290 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
291 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2, ConstantBool True , (ConstantInt TagInt) 4]
292 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3, ConstantBool False, (ConstantInt TagInt) 6]
293 , ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4, ConstantBool False, (ConstantInt TagInt) 8]
294 ]
295 low = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ] )
296 , ( "x_2", DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ] )
297 , ( "x_3", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False] )
298 , ( "x_4", DomainMatrix (intDomain 1 3) (intDomain 2 5), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4 , (ConstantInt TagInt) 6 , (ConstantInt TagInt) 8 ] )
299 ]
300 in testCases "x" highDomain highConstant Just low low
301
302 , testCase "matrix of ((bool, int), (bool, int))" $
303 let
304 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainTuple [DomainBool, intDomain 2 5]])
305 highConstant =
306 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
307 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]]
308 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3], ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 6]]
309 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4], ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 8]]
310 ]
311 mid = [ ( "x_1"
312 , DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 1 3])
313 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
314 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2]
315 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3]
316 , ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]
317 ] )
318 , ( "x_2"
319 , DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, intDomain 2 5])
320 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
321 [ ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]
322 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 6]
323 , ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 8]
324 ] )
325 ]
326 low = [ ( "x_1_1", DomainMatrix (intDomain 1 3) DomainBool
327 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ] )
328 , ( "x_1_2", DomainMatrix (intDomain 1 3) (intDomain 1 3)
329 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ] )
330 , ( "x_2_1", DomainMatrix (intDomain 1 3) DomainBool
331 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False] )
332 , ( "x_2_2", DomainMatrix (intDomain 1 3) (intDomain 2 5)
333 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4 , (ConstantInt TagInt) 6 , (ConstantInt TagInt) 8 ] )
334 ]
335 in testCases "x" highDomain highConstant Just mid low
336
337 , testCase "matrix of (bool, (int, (bool, int)))" $
338 let
339 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, DomainTuple [intDomain 1 3, DomainTuple [DomainBool, intDomain 2 5]]])
340 highConstant =
341 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
342 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]]]
343 , ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 6]]]
344 , ConstantAbstract $ AbsLitTuple [ConstantBool True , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 8]]]
345 ]
346 mid = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool
347 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True] )
348 , ( "x_2", DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 1 3, DomainTuple [DomainBool, intDomain 2 5]])
349 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
350 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4]]
351 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 6]]
352 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 8]]
353 ] )
354 ]
355 low = [ ( "x_1" , DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ])
356 , ( "x_2_1" , DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ])
357 , ( "x_2_2_1", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False])
358 , ( "x_2_2_2", DomainMatrix (intDomain 1 3) (intDomain 2 5), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4 , (ConstantInt TagInt) 6 , (ConstantInt TagInt) 8 ])
359 ]
360 in testCases "x" highDomain highConstant Just mid low
361
362 , testCase "matrix of (bool, (int, bool), int)" $
363 let
364 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainBool, DomainTuple [intDomain 1 3, DomainBool], intDomain 2 5])
365 highConstant =
366 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
367 [ ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True ], (ConstantInt TagInt) 4]
368 , ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool False], (ConstantInt TagInt) 6]
369 , ConstantAbstract $ AbsLitTuple [ConstantBool True , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool False], (ConstantInt TagInt) 8]
370 ]
371 mid = [ ( "x_1", DomainMatrix (intDomain 1 3) DomainBool
372 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True] )
373 , ( "x_2", DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 1 3, DomainBool])
374 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
375 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool True ]
376 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool False]
377 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool False]
378 ] )
379 , ( "x_3", DomainMatrix (intDomain 1 3) (intDomain 2 5)
380 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4, (ConstantInt TagInt) 6, (ConstantInt TagInt) 8]
381 )
382 ]
383 low = [ ( "x_1" , DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ])
384 , ( "x_2_1", DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ])
385 , ( "x_2_2", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False])
386 , ( "x_3" , DomainMatrix (intDomain 1 3) (intDomain 2 5), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4 , (ConstantInt TagInt) 6 , (ConstantInt TagInt) 8 ])
387 ]
388 in testCases "x" highDomain highConstant Just mid low
389
390 , testCase "matrix of (((bool, int), bool), int)" $
391 let
392 highDomain = DomainMatrix (intDomain 1 3) (DomainTuple [DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainBool], intDomain 2 5])
393 highConstant =
394 ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
395 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True ], (ConstantInt TagInt) 4]
396 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3], ConstantBool False], (ConstantInt TagInt) 6]
397 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4], ConstantBool False], (ConstantInt TagInt) 8]
398 ]
399 mid = [ ( "x_1", DomainMatrix (intDomain 1 3) (DomainTuple [DomainTuple [DomainBool,intDomain 1 3],DomainBool])
400 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
401 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True ]
402 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3], ConstantBool False]
403 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4], ConstantBool False]
404 ])
405 , ( "x_2", DomainMatrix (intDomain 1 3) (intDomain 2 5)
406 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4, (ConstantInt TagInt) 6, (ConstantInt TagInt) 8]
407 )
408 ]
409 low = [ ( "x_1_1_1", DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False, ConstantBool False, ConstantBool True ])
410 , ( "x_1_1_2", DomainMatrix (intDomain 1 3) (intDomain 1 3), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2 , (ConstantInt TagInt) 3 , (ConstantInt TagInt) 4 ])
411 , ( "x_1_2" , DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True , ConstantBool False, ConstantBool False])
412 , ( "x_2" , DomainMatrix (intDomain 1 3) (intDomain 2 5), ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4 , (ConstantInt TagInt) 6 , (ConstantInt TagInt) 8 ])
413 ]
414 in testCases "x" highDomain highConstant Just mid low
415
416 , testCase "matrix 2d of (((bool, int), bool), int)" $
417 let
418 highDomain =
419 DomainMatrix (intDomain 1 2)
420 (DomainMatrix (intDomain 1 3)
421 (DomainTuple [DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainBool], intDomain 2 5]))
422 highConstant =
423 ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
424 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
425 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 2], ConstantBool True ], (ConstantInt TagInt) 4]
426 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 3], ConstantBool False], (ConstantInt TagInt) 6]
427 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 4], ConstantBool False], (ConstantInt TagInt) 8]
428 ]
429 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
430 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False, (ConstantInt TagInt) 4], ConstantBool True ], (ConstantInt TagInt) 4]
431 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 5], ConstantBool False], (ConstantInt TagInt) 7]
432 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True , (ConstantInt TagInt) 6], ConstantBool False], (ConstantInt TagInt) 9]
433 ]
434 ]
435 mid =
436 [ ( "x_1" , DomainMatrix (intDomain 1 2)
437 (DomainMatrix (intDomain 1 3)
438 (DomainTuple [DomainTuple [DomainBool, intDomain 1 3], DomainBool]))
439 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
440 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
441 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False,(ConstantInt TagInt) 2],ConstantBool True]
442 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False,(ConstantInt TagInt) 3],ConstantBool False]
443 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True,(ConstantInt TagInt) 4],ConstantBool False]
444 ]
445 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
446 [ ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool False,(ConstantInt TagInt) 4],ConstantBool True]
447 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True,(ConstantInt TagInt) 5],ConstantBool False]
448 , ConstantAbstract $ AbsLitTuple [ConstantAbstract $ AbsLitTuple [ConstantBool True,(ConstantInt TagInt) 6],ConstantBool False]
449 ]
450 ] )
451 , ( "x_2" , DomainMatrix (intDomain 1 2)
452 (DomainMatrix (intDomain 1 3)
453 (intDomain 2 5))
454 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
455 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4,(ConstantInt TagInt) 6,(ConstantInt TagInt) 8]
456 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4,(ConstantInt TagInt) 7,(ConstantInt TagInt) 9]
457 ] )
458 ]
459 low =
460 [ ( "x_1_1_1" , DomainMatrix (intDomain 1 2) (DomainMatrix (intDomain 1 3) DomainBool)
461 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
462 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False,ConstantBool False,ConstantBool True]
463 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False,ConstantBool True,ConstantBool True]
464 ] )
465 , ( "x_1_1_2" , DomainMatrix (intDomain 1 2) (DomainMatrix (intDomain 1 3) (intDomain 1 3))
466 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
467 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 3,(ConstantInt TagInt) 4]
468 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4,(ConstantInt TagInt) 5,(ConstantInt TagInt) 6]
469 ] )
470 , ( "x_1_2" , DomainMatrix (intDomain 1 2) (DomainMatrix (intDomain 1 3) DomainBool)
471 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
472 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True,ConstantBool False,ConstantBool False]
473 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True,ConstantBool False,ConstantBool False]
474 ] )
475 , ( "x_2" , DomainMatrix (intDomain 1 2) (DomainMatrix (intDomain 1 3) (intDomain 2 5))
476 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2)
477 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4,(ConstantInt TagInt) 6,(ConstantInt TagInt) 8]
478 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 4,(ConstantInt TagInt) 7,(ConstantInt TagInt) 9]
479 ] )
480 ]
481 in testCases "x" highDomain highConstant Just mid low
482
483 , testCase "(bool, bool, bool)" $ testCasesAuto "x"
484 ( DomainTuple [DomainBool, DomainBool, DomainBool] )
485 ( ConstantAbstract $ AbsLitTuple [ConstantBool False, ConstantBool False, ConstantBool True] )
486
487 , testCase "(bool, matrix of int) {auto}" $ testCasesAuto "x"
488 ( DomainTuple
489 [ DomainBool
490 , DomainMatrix (intDomain 1 3) (intDomain 0 9)
491 ] )
492 ( ConstantAbstract $ AbsLitTuple
493 [ ConstantBool False
494 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2, (ConstantInt TagInt) 4, (ConstantInt TagInt) 5]
495 ] )
496
497 , testCase "(bool, matrix of int)" $
498 let
499 highDomain =
500 DomainTuple
501 [ DomainBool
502 , DomainMatrix (intDomain 1 3) (intDomain 0 9)
503 ]
504 highConstant =
505 ConstantAbstract $ AbsLitTuple
506 [ ConstantBool False
507 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2, (ConstantInt TagInt) 4, (ConstantInt TagInt) 5]
508 ]
509 low =
510 [ ( "x_1", DomainBool,ConstantBool False)
511 , ( "x_2", DomainMatrix (intDomain 1 3) (intDomain 0 9)
512 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 4,(ConstantInt TagInt) 5] )
513 ]
514 in testCases "x" highDomain highConstant Just low low
515
516 , testCase "(bool, matrix of (int, bool)) {auto}" $ testCasesAuto "x"
517 ( DomainTuple
518 [ DomainBool
519 , DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 0 9, DomainBool])
520 ] )
521 ( ConstantAbstract $ AbsLitTuple
522 [ ConstantBool False
523 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
524 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool False]
525 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool True]
526 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool False]
527 ]
528 ] )
529
530 , testCase "(bool, matrix of (int, bool))" $
531 let
532 highDomain =
533 DomainTuple
534 [ DomainBool
535 , DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 0 9, DomainBool])
536 ]
537 highConstant =
538 ConstantAbstract $ AbsLitTuple
539 [ ConstantBool False
540 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
541 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool False]
542 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantBool True]
543 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool False]
544 ]
545 ]
546 mid =
547 [ ( "x_1" , DomainBool , ConstantBool False )
548 , ( "x_2" , DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 0 9,DomainBool])
549 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
550 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2,ConstantBool False]
551 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4,ConstantBool True]
552 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5,ConstantBool False]
553 ] )
554 ]
555 low =
556 [ ( "x_1" , DomainBool , ConstantBool False )
557 , ( "x_2_1" , DomainMatrix (intDomain 1 3) (intDomain 0 9) , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 4,(ConstantInt TagInt) 5] )
558 , ( "x_2_2" , DomainMatrix (intDomain 1 3) DomainBool , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False,ConstantBool True,ConstantBool False] )
559 ]
560 in testCases "x" highDomain highConstant Just mid low
561
562 , testCase "(bool, matrix of (int, matrix of int)) {auto}" $ testCasesAuto "x"
563 ( DomainTuple
564 [ DomainBool
565 , DomainMatrix (intDomain 1 3) (DomainTuple
566 [ intDomain 0 9
567 , DomainMatrix (intDomain 1 2) (intDomain 0 9)
568 ])
569 ] )
570 ( ConstantAbstract $ AbsLitTuple
571 [ ConstantBool False
572 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
573 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 1, (ConstantInt TagInt) 3]]
574 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 3, (ConstantInt TagInt) 5]]
575 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]]
576 ]
577 ] )
578
579 , testCase "(bool, matrix of (int, matrix of int))" $
580 let
581 highDomain =
582 DomainTuple
583 [ DomainBool
584 , DomainMatrix (intDomain 1 3) (DomainTuple
585 [ intDomain 0 9
586 , DomainMatrix (intDomain 1 2) (intDomain 0 9)
587 ])
588 ]
589 highConstant =
590 ConstantAbstract $ AbsLitTuple
591 [ ConstantBool False
592 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
593 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 1, (ConstantInt TagInt) 3]]
594 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 3, (ConstantInt TagInt) 5]]
595 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]]
596 ]
597 ]
598 mid =
599 [ ( "x_1" , DomainBool,ConstantBool False )
600 , ( "x_2" , DomainMatrix (intDomain 1 3) (DomainTuple [intDomain 0 9,DomainMatrix (intDomain 1 2) (intDomain 0 9)])
601 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
602 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2,ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 1,(ConstantInt TagInt) 3]]
603 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 4,ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 3,(ConstantInt TagInt) 5]]
604 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5,ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5,(ConstantInt TagInt) 6]]
605 ] )
606 ]
607 low =
608 [ ( "x_1" , DomainBool,ConstantBool False )
609 , ( "x_2_1" , DomainMatrix (intDomain 1 3) (intDomain 0 9)
610 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 4,(ConstantInt TagInt) 5])
611 , ( "x_2_2" , DomainMatrix (intDomain 1 3) (DomainMatrix (intDomain 1 2) (intDomain 0 9))
612 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3)
613 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 1,(ConstantInt TagInt) 3]
614 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 3,(ConstantInt TagInt) 5]
615 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5,(ConstantInt TagInt) 6]
616 ] )
617 ]
618 in testCases "x" highDomain highConstant Just mid low
619
620 -- Explicit
621 , testCase "Explicit: set (size 4) of int {auto}" $ testCasesAuto "x"
622 ( DomainSet
623 Set_Explicit
624 (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
625 (intDomain 0 9) )
626 ( ConstantAbstract $ AbsLitSet
627 [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3, (ConstantInt TagInt) 5, (ConstantInt TagInt) 6] )
628
629 , testCase "Explicit: set (size 4) of int" $
630 let
631 highDomain =
632 DomainSet
633 Set_Explicit
634 (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
635 (intDomain 0 9)
636 highConstant =
637 ConstantAbstract $ AbsLitSet
638 [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3, (ConstantInt TagInt) 5, (ConstantInt TagInt) 6]
639 low =
640 [ ( "x_Explicit"
641 , DomainMatrix (intDomain 1 4) (intDomain 0 9)
642 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
643 [(ConstantInt TagInt) 2,(ConstantInt TagInt) 3,(ConstantInt TagInt) 5,(ConstantInt TagInt) 6]
644 ) ]
645 in testCases "x" highDomain highConstant Just low low
646
647 , testCase "Explicit: set (size 4) of set (size 2) of int {auto}" $ testCasesAuto "x"
648 ( DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
649 ( DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 2)))
650 (intDomain 0 9)
651 )
652 )
653 ( ConstantAbstract $ AbsLitSet
654 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3]
655 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]
656 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 7]
657 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 8]
658 ] )
659
660 , testCase "Explicit: set (size 4) of set (size 2) of int" $
661 let
662 highDomain =
663 DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
664 (DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 2)))
665 (intDomain 0 9))
666 highConstant =
667 ConstantAbstract $ AbsLitSet
668 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3]
669 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]
670 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 7]
671 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 8]
672 ]
673 mid =
674 [ ( "x_ExplicitR3"
675 , DomainMatrix (intDomain 1 4) (DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 2))) (intDomain 0 9))
676 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
677 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3]
678 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]
679 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 7]
680 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 5, (ConstantInt TagInt) 8]
681 ]
682 ) ]
683 low =
684 [ ( "x_ExplicitR3_Explicit"
685 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 1 2) (intDomain 0 9))
686 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
687 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 2, (ConstantInt TagInt) 3]
688 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5, (ConstantInt TagInt) 6]
689 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5, (ConstantInt TagInt) 7]
690 , ConstantAbstract $ AbsLitMatrix (intDomain 1 2) [(ConstantInt TagInt) 5, (ConstantInt TagInt) 8]
691 ]
692 ) ]
693 in testCases "x" highDomain highConstant Just mid low
694
695 , testCase "Explicit: set (size 4) of set (size 2) of (int, bool) {auto}" $ testCasesAuto "x"
696 ( DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
697 ( DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 2)))
698 (DomainTuple [intDomain 0 9, DomainBool])
699 )
700 )
701 ( ConstantAbstract $ AbsLitSet
702 [ ConstantAbstract $ AbsLitSet [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool False]
703 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool True ]
704 ]
705 , ConstantAbstract $ AbsLitSet [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool True ]
706 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 6, ConstantBool True ]
707 ]
708 , ConstantAbstract $ AbsLitSet [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool True ]
709 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 7, ConstantBool False]
710 ]
711 , ConstantAbstract $ AbsLitSet [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool False]
712 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 8, ConstantBool False]
713 ]
714 ] )
715
716 , testCase "Explicit: set (size 4) of (int, set (size 2) of (int, bool)) {auto}" $ testCasesAuto "x"
717 ( DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 4)))
718 ( DomainTuple
719 [ intDomain 0 8
720 , DomainSet Set_Explicit (SetAttr (SizeAttr_Size ((ConstantInt TagInt) 2)))
721 (DomainTuple [intDomain 0 9, DomainBool])
722 ]
723 )
724 )
725 ( ConstantAbstract $ AbsLitSet
726 [ ConstantAbstract $ AbsLitTuple
727 [ (ConstantInt TagInt) 1
728 , ConstantAbstract $ AbsLitSet
729 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 2, ConstantBool False]
730 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 3, ConstantBool True ]
731 ]
732 ]
733 , ConstantAbstract $ AbsLitTuple
734 [ (ConstantInt TagInt) 2
735 , ConstantAbstract $ AbsLitSet
736 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool True ]
737 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 6, ConstantBool True ]
738 ]
739 ]
740 , ConstantAbstract $ AbsLitTuple
741 [ (ConstantInt TagInt) 3
742 , ConstantAbstract $ AbsLitSet
743 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool True ]
744 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 7, ConstantBool False]
745 ]
746 ]
747 , ConstantAbstract $ AbsLitTuple
748 [ (ConstantInt TagInt) 4
749 , ConstantAbstract $ AbsLitSet
750 [ ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 5, ConstantBool False]
751 , ConstantAbstract $ AbsLitTuple [(ConstantInt TagInt) 8, ConstantBool False]
752 ]
753 ]
754 ] )
755
756 -- ExplicitVarSizeWithMarker
757 , testCase "ExplicitVarSizeWithMarker: set (maxSize 4) of int {auto}" $ testCasesAuto "x"
758 ( DomainSet
759 Set_ExplicitVarSizeWithMarker
760 (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
761 (intDomain 0 9) )
762 ( ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5] )
763
764 , testCase "ExplicitVarSizeWithMarker: set (maxSize 4) of int" $
765 let
766 highDomain =
767 DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4))) (intDomain 0 9)
768 highConstant =
769 ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
770 low =
771 [ ( "x_ExplicitVarSizeWithMarker_Marker"
772 , intDomain 0 4
773 , (ConstantInt TagInt) 2
774 )
775 , ( "x_ExplicitVarSizeWithMarker_Values"
776 , DomainMatrix (intDomain 1 4) (intDomain 0 9)
777 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
778 )
779 ]
780 in testCases "x" highDomain highConstant Just low low
781
782 , testCase "ExplicitVarSizeWithMarker: set (maxSize 4) of set (maxSize 3) int {auto}" $ testCasesAuto "x"
783 ( DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
784 ( DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
785 (intDomain 0 9)
786 )
787 )
788 ( ConstantAbstract $ AbsLitSet
789 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
790 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
791 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
792 ]
793 )
794
795 , testCase "ExplicitVarSizeWithMarker: set (maxSize 4) of set (maxSize 3) int" $
796 let
797 highDomain =
798 DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
799 ( DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
800 (intDomain 0 9) )
801 highConstant =
802 ConstantAbstract $ AbsLitSet
803 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
804 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
805 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
806 ]
807 mid =
808 [ ( "x_ExplicitVarSizeWithMarkerR5_Marker"
809 , intDomain 0 4
810 , (ConstantInt TagInt) 3
811 )
812 , ( "x_ExplicitVarSizeWithMarkerR5_Values"
813 , DomainMatrix (intDomain 1 4) (DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3))) (intDomain 0 9))
814 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
815 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
816 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5]
817 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
818 , ConstantAbstract $ AbsLitSet []
819 ]
820 )
821 ]
822 low =
823 [ ( "x_ExplicitVarSizeWithMarkerR5_Marker"
824 , intDomain 0 4
825 , (ConstantInt TagInt) 3
826 )
827 , ( "x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker"
828 , DomainMatrix (intDomain 1 4) (intDomain 0 3)
829 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [(ConstantInt TagInt) 1,(ConstantInt TagInt) 2,(ConstantInt TagInt) 3,(ConstantInt TagInt) 0]
830 )
831 , ( "x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values"
832 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 1 3) (intDomain 0 9))
833 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
834 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
835 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5,(ConstantInt TagInt) 0]
836 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
837 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 0,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
838 ]
839 )
840 ]
841 in testCases "x" highDomain highConstant Just mid low
842
843 -- ExplicitVarSizeWithFlags
844 , testCase "ExplicitVarSizeWithFlags: set (maxSize 4) of int {auto}" $ testCasesAuto "x"
845 ( DomainSet
846 Set_ExplicitVarSizeWithFlags
847 (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
848 (intDomain 0 9) )
849 ( ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5] )
850
851 , testCase "ExplicitVarSizeWithFlags: set (maxSize 4) of int" $
852 let
853 highDomain =
854 DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4))) (intDomain 0 9)
855 highConstant =
856 ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
857 low =
858 [ ( "x_ExplicitVarSizeWithFlags_Flags"
859 , DomainMatrix (intDomain 1 4) DomainBool
860 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [ConstantBool True,ConstantBool True,ConstantBool False,ConstantBool False]
861 )
862 , ( "x_ExplicitVarSizeWithFlags_Values"
863 , DomainMatrix (intDomain 1 4) (intDomain 0 9)
864 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
865 )
866 ]
867 in testCases "x" highDomain highConstant Just low low
868
869 , testCase "ExplicitVarSizeWithFlags: set (maxSize 4) of set (maxSize 3) int {auto}" $ testCasesAuto "x"
870 ( DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
871 ( DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
872 (intDomain 0 9)
873 )
874 )
875 ( ConstantAbstract $ AbsLitSet
876 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
877 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
878 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
879 ]
880 )
881
882 , testCase "ExplicitVarSizeWithFlags: set (maxSize 4) of set (maxSize 3) int" $
883 let
884 highDomain =
885 DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
886 ( DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
887 (intDomain 0 9) )
888 highConstant =
889 ConstantAbstract $ AbsLitSet
890 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
891 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
892 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
893 ]
894 mid =
895 [ ( "x_ExplicitVarSizeWithFlagsR4_Flags"
896 , DomainMatrix (intDomain 1 4) DomainBool
897 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [ConstantBool True,ConstantBool True,ConstantBool True,ConstantBool False]
898 )
899 , ( "x_ExplicitVarSizeWithFlagsR4_Values"
900 , DomainMatrix (intDomain 1 4) (DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3))) (intDomain 0 9))
901 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
902 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
903 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5]
904 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
905 , ConstantAbstract $ AbsLitSet []
906 ]
907 )
908 ]
909 low =
910 [ ( "x_ExplicitVarSizeWithFlagsR4_Flags"
911 , DomainMatrix (intDomain 1 4) DomainBool
912 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [ConstantBool True,ConstantBool True,ConstantBool True,ConstantBool False]
913 )
914 , ( "x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags"
915 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 1 3) DomainBool)
916 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
917 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True,ConstantBool False,ConstantBool False]
918 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True,ConstantBool True,ConstantBool False]
919 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool True,ConstantBool True,ConstantBool True]
920 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [ConstantBool False,ConstantBool False,ConstantBool False]
921 ]
922 )
923 , ( "x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values"
924 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 1 3) (intDomain 0 9))
925 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
926 [ ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
927 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5,(ConstantInt TagInt) 0]
928 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
929 , ConstantAbstract $ AbsLitMatrix (intDomain 1 3) [(ConstantInt TagInt) 0,(ConstantInt TagInt) 0,(ConstantInt TagInt) 0]
930 ]
931 ) ]
932 in testCases "x" highDomain highConstant Just mid low
933
934 -- Occurrence
935 , testCase "Occurrence: set (maxSize 4) of int {auto}" $ testCasesAuto "x"
936 ( DomainSet
937 Set_Occurrence
938 (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
939 (intDomain 0 9) )
940 ( ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5] )
941
942 , testCase "Occurrence: set (maxSize 4) of int" $
943 let
944 highDomain =
945 DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4))) (intDomain 0 9)
946 highConstant =
947 ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
948 low =
949 [ ( "x_Occurrence"
950 , DomainMatrix (intDomain 0 9) DomainBool
951 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9)
952 [ ConstantBool False
953 , ConstantBool False
954 , ConstantBool True -- 2
955 , ConstantBool False
956 , ConstantBool False
957 , ConstantBool True -- 5
958 , ConstantBool False
959 , ConstantBool False
960 , ConstantBool False
961 , ConstantBool False
962 ]
963 )
964 ]
965 in testCases "x" highDomain highConstant Just low low
966
967 , testCase "ExplicitVarSizeWithMarker & Occurrence: set (maxSize 4) of set (maxSize 3) int {auto}" $ testCasesAuto "x"
968 ( DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
969 ( DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
970 (intDomain 0 9)
971 )
972 )
973 ( ConstantAbstract $ AbsLitSet
974 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
975 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
976 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
977 ]
978 )
979
980 , testCase "ExplicitVarSizeWithMarker & Occurrence: set (maxSize 4) of set (maxSize 3) int" $
981 let
982 highDomain =
983 DomainSet Set_ExplicitVarSizeWithMarker (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
984 ( DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
985 (intDomain 0 9) )
986 highConstant =
987 ConstantAbstract $ AbsLitSet
988 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
989 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
990 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
991 ]
992 mid =
993 [ ( "x_ExplicitVarSizeWithMarkerR2_Marker"
994 , intDomain 0 4
995 , (ConstantInt TagInt) 3
996 )
997 , ( "x_ExplicitVarSizeWithMarkerR2_Values"
998 , DomainMatrix (intDomain 1 4) (DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3))) (intDomain 0 9))
999 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
1000 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
1001 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5]
1002 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
1003 , ConstantAbstract $ AbsLitSet []
1004 ]
1005 )
1006 ]
1007 low =
1008 [ ( "x_ExplicitVarSizeWithMarkerR2_Marker"
1009 , intDomain 0 4
1010 , (ConstantInt TagInt) 3
1011 )
1012 , ( "x_ExplicitVarSizeWithMarkerR2_Values_Occurrence"
1013 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 0 9) DomainBool)
1014 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
1015 [ ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 2
1016 [ ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False
1017 , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1018 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 2,5
1019 [ ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False
1020 , ConstantBool True , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1021 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 3,4,6
1022 [ ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool True
1023 , ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False, ConstantBool False ]
1024 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- {}
1025 [ ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False
1026 , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1027 ]
1028 )
1029 ]
1030 in testCases "x" highDomain highConstant Just mid low
1031
1032 , testCase "ExplicitVarSizeWithFlags & Occurrence: set (maxSize 4) of set (maxSize 3) int {auto}" $ testCasesAuto "x"
1033 ( DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
1034 ( DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
1035 (intDomain 0 9)
1036 )
1037 )
1038 ( ConstantAbstract $ AbsLitSet
1039 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
1040 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
1041 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
1042 ]
1043 )
1044
1045 , testCase "ExplicitVarSizeWithFlags & Occurrence: set (maxSize 4) of set (maxSize 3) int" $
1046 let
1047 highDomain =
1048 DomainSet Set_ExplicitVarSizeWithFlags (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 4)))
1049 ( DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3)))
1050 (intDomain 0 9) )
1051 highConstant =
1052 ConstantAbstract $ AbsLitSet
1053 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
1054 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2, (ConstantInt TagInt) 5]
1055 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3, (ConstantInt TagInt) 4, (ConstantInt TagInt) 6]
1056 ]
1057 mid =
1058 [ ( "x_ExplicitVarSizeWithFlagsR2_Flags"
1059 , DomainMatrix (intDomain 1 4) DomainBool
1060 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [ConstantBool True,ConstantBool True,ConstantBool True,ConstantBool False]
1061 )
1062 , ( "x_ExplicitVarSizeWithFlagsR2_Values"
1063 , DomainMatrix (intDomain 1 4) (DomainSet Set_Occurrence (SetAttr (SizeAttr_MaxSize ((ConstantInt TagInt) 3))) (intDomain 0 9))
1064 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
1065 [ ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2]
1066 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 2,(ConstantInt TagInt) 5]
1067 , ConstantAbstract $ AbsLitSet [(ConstantInt TagInt) 3,(ConstantInt TagInt) 4,(ConstantInt TagInt) 6]
1068 , ConstantAbstract $ AbsLitSet []
1069 ]
1070 )
1071 ]
1072 low =
1073 [ ( "x_ExplicitVarSizeWithFlagsR2_Flags"
1074 , DomainMatrix (intDomain 1 4) DomainBool
1075 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4) [ConstantBool True,ConstantBool True,ConstantBool True,ConstantBool False]
1076 )
1077 , ( "x_ExplicitVarSizeWithFlagsR2_Values_Occurrence"
1078 , DomainMatrix (intDomain 1 4) (DomainMatrix (intDomain 0 9) DomainBool)
1079 , ConstantAbstract $ AbsLitMatrix (intDomain 1 4)
1080 [ ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 2
1081 [ ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False
1082 , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1083 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 2,5
1084 [ ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False
1085 , ConstantBool True , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1086 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- 3,4,6
1087 [ ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool True , ConstantBool True
1088 , ConstantBool False, ConstantBool True , ConstantBool False, ConstantBool False, ConstantBool False ]
1089 , ConstantAbstract $ AbsLitMatrix (intDomain 0 9) -- {}
1090 [ ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False
1091 , ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False, ConstantBool False ]
1092 ]
1093 )
1094 ]
1095 in testCases "x" highDomain highConstant Just mid low
1096
1097 ]
1098
1099
1100 testCases ::
1101 (?typeCheckerMode :: TypeCheckerMode) =>
1102 Name -> -- high level variable name
1103 Domain HasRepresentation Constant -> -- high level domain
1104 Constant -> -- high level value (constant)
1105 (forall a . a -> Maybe a) -> -- `const Nothing` - if going one level downC produces Nothing
1106 -- `Just` - if going one level downC produces (Just mid)
1107 [(Name, Domain HasRepresentation Constant, Constant)] -> -- "mid" result, if we go one level down
1108 [(Name, Domain HasRepresentation Constant, Constant)] -> -- "low" result, if we go all the way down
1109 Assertion
1110 testCases highName highDomain highConstant mkMid mid low = do
1111 downC1Test (highName, highDomain, highConstant) (mkMid mid)
1112 downTest (highName, highDomain, highConstant) low
1113 up1Test (highName, highDomain) (map dropDomain mid) (highName, highConstant)
1114 upTest (highName, highDomain) (map dropDomain low) (highName, highConstant)
1115 downUp1Test (highName, highDomain, highConstant)
1116 downUpTest (highName, highDomain, highConstant)
1117
1118 downC1Test ::
1119 (?typeCheckerMode :: TypeCheckerMode) =>
1120 (Name, Domain HasRepresentation Constant, Constant) ->
1121 Maybe [(Name, Domain HasRepresentation Constant, Constant)] ->
1122 Assertion
1123 downC1Test high low' =
1124 case downC1 high of
1125 TriedIO -> assertFailure "TriedIO"
1126 Failed err -> assertFailure (show err)
1127 Done low -> Pr low @?= Pr low'
1128
1129 downTest ::
1130 (?typeCheckerMode :: TypeCheckerMode) =>
1131 (Name, Domain HasRepresentation Constant, Constant) ->
1132 [(Name, Domain HasRepresentation Constant, Constant)] ->
1133 Assertion
1134 downTest high lows' =
1135 case downC high of
1136 TriedIO -> assertFailure "TriedIO"
1137 Failed err -> assertFailure (show err)
1138 Done lows -> Pr lows @?= Pr lows'
1139
1140 up1Test ::
1141 (?typeCheckerMode :: TypeCheckerMode) =>
1142 (Name, Domain HasRepresentation Constant) ->
1143 [(Name, Constant)] ->
1144 (Name, Constant) ->
1145 Assertion
1146 up1Test info lows high' =
1147 case up1 info lows of
1148 TriedIO -> assertFailure "TriedIO"
1149 Failed err -> assertFailure (show err)
1150 Done high -> Pr high @?= Pr high'
1151
1152 upTest ::
1153 (?typeCheckerMode :: TypeCheckerMode) =>
1154 (Name, Domain HasRepresentation Constant) ->
1155 [(Name, Constant)] ->
1156 (Name, Constant) ->
1157 Assertion
1158 upTest info lows high' =
1159 case up lows info of
1160 TriedIO -> assertFailure "TriedIO"
1161 Failed err -> assertFailure (show err)
1162 Done high -> Pr high @?= Pr high'
1163
1164
1165 testCasesAuto ::
1166 (?typeCheckerMode :: TypeCheckerMode) =>
1167 Name -> -- high level variable name
1168 Domain HasRepresentation Constant -> -- high level domain
1169 Constant -> -- high level value (constant)
1170 Assertion
1171 testCasesAuto highName highDomain highConstant = do
1172 downUp1Test (highName, highDomain, highConstant)
1173 downUpTest (highName, highDomain, highConstant)
1174
1175
1176 downUp1Test ::
1177 (?typeCheckerMode :: TypeCheckerMode) =>
1178 (Name, Domain HasRepresentation Constant, Constant) ->
1179 Assertion
1180 downUp1Test high =
1181 case downC1 high of
1182 TriedIO -> assertFailure "TriedIO"
1183 Failed err -> assertFailure (show err)
1184 Done mlows -> do
1185 let lows = maybe [dropDomain high] (map dropDomain) mlows -- use high if we cannot go downC1
1186 case up1 (dropConstant high) lows of
1187 TriedIO -> assertFailure "TriedIO"
1188 Failed err -> assertFailure (show err)
1189 Done high' -> Pr high' @?= Pr (dropDomain high)
1190
1191 downUpTest ::
1192 (?typeCheckerMode :: TypeCheckerMode) =>
1193 (Name, Domain HasRepresentation Constant, Constant) ->
1194 Assertion
1195 downUpTest high =
1196 case downC high of
1197 TriedIO -> assertFailure "TriedIO"
1198 Failed err -> assertFailure (show err)
1199 Done lows ->
1200 case up (map dropDomain lows) (dropConstant high) of
1201 TriedIO -> assertFailure "TriedIO"
1202 Failed err -> assertFailure (show err)
1203 Done high' -> Pr high' @?= Pr (dropDomain high)
1204
1205
1206 intDomain :: Default r => Integer -> Integer -> Domain r Constant
1207 intDomain lb ub = defRepr $ mkDomainIntB ((ConstantInt TagInt) lb) ((ConstantInt TagInt) ub)
1208
1209 dropConstant :: (a,b,c) -> (a,b)
1210 dropConstant (a,b,_) = (a,b)
1211
1212 dropDomain :: (a,b,c) -> (a,c)
1213 dropDomain (a,_,c) = (a,c)
1214
1215
1216 data Pr a = Pr a
1217 deriving Eq
1218
1219 instance Show (Pr [(Name, Domain HasRepresentation Constant, Constant)]) where
1220 show (Pr xs) = show $ vcat $ concatMap show' xs
1221 where
1222 show' (name, dom, cons) = [ hang (pretty name) 4 $ vcat
1223 [ ":" <+> pretty dom
1224 , "=" <+> pretty cons
1225 ] ]
1226
1227 instance Show (Pr (Maybe [(Name, Domain HasRepresentation Constant, Constant)])) where
1228 show (Pr Nothing) = "Nothing"
1229 show (Pr (Just xs)) = show (Pr xs)
1230
1231 instance Show (Pr (Name, Constant)) where
1232 show (Pr (name, cons)) = show $ pretty name <+> "=" <+> pretty cons
1233
1234 instance Show (Pr [(Name, Constant)]) where
1235 show (Pr xs) = intercalate "\n" $ map (show . Pr) xs
1236
1237