git.iko.soy/typeable/schematic
on 0.4.1.0 help sign in
318 lines 9.8 kB history raw
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE TypeApplications #-}
3{-# LANGUAGE OverloadedLists #-}
4{-# LANGUAGE OverloadedStrings #-}
6module LensSpec (spec, main) where
8import Control.Lens
9import Data.Proxy
10import Data.Schematic
11import Data.Vinyl
12import Test.Hspec
15type ArraySchema = 'SchemaArray '[ 'AEq 1] ('SchemaNumber '[ 'NGt 10])
17type ArrayField = '("foo", ArraySchema)
19type FieldsSchema =
20 '[ '("bar", 'SchemaOptional ('SchemaText '[ 'TEnum '["foo", "bar"]])), ArrayField]
22arrayData :: JsonRepr ArraySchema
23arrayData = ReprArray [ReprNumber 13]
25arrayField :: FieldRepr ArrayField
26arrayField = FieldRepr arrayData
28objectData :: Rec FieldRepr FieldsSchema
29objectData = FieldRepr (ReprOptional (Just (ReprText "foo")))
30 :& FieldRepr arrayData
31 :& RNil
33type BigRecord = Rec FieldRepr
34 '[ '("f1", 'SchemaNumber '[])
35 , '("f2", 'SchemaNumber '[])
36 , '("f3", 'SchemaNumber '[])
37 , '("f4", 'SchemaNumber '[])
38 , '("f5", 'SchemaNumber '[])
39 , '("f6", 'SchemaNumber '[])
40 , '("f7", 'SchemaNumber '[])
41 , '("f8", 'SchemaNumber '[])
42 , '("f9", 'SchemaNumber '[])
43 , '("f10", 'SchemaNumber '[])
44 , '("f11", 'SchemaNumber '[])
45 , '("f12", 'SchemaNumber '[])
46 , '("f13", 'SchemaNumber '[])
47 , '("f14", 'SchemaNumber '[])
48 , '("f15", 'SchemaNumber '[])
49 , '("f16", 'SchemaNumber '[])
50 , '("f17", 'SchemaNumber '[])
51 , '("f18", 'SchemaNumber '[])
52 , '("f19", 'SchemaNumber '[])
53 , '("f20", 'SchemaNumber '[])
54 , '("f21", 'SchemaNumber '[])
55 , '("f22", 'SchemaNumber '[])
56 , '("f23", 'SchemaNumber '[])
57 , '("f24", 'SchemaNumber '[])
58 , '("f25", 'SchemaNumber '[])
59 , '("f26", 'SchemaNumber '[])
60 , '("f27", 'SchemaNumber '[])
61 , '("f28", 'SchemaNumber '[])
62 , '("f29", 'SchemaNumber '[])
63 , '("f30", 'SchemaNumber '[])
64 , '("f31", 'SchemaNumber '[])
65 , '("f32", 'SchemaNumber '[])
66 , '("f33", 'SchemaNumber '[])
67 , '("f34", 'SchemaNumber '[])
68 , '("f35", 'SchemaNumber '[])
69 , '("f36", 'SchemaNumber '[])
70 , '("f37", 'SchemaNumber '[])
71 , '("f38", 'SchemaNumber '[])
72 , '("f39", 'SchemaNumber '[])
73 , '("f40", 'SchemaNumber '[])
74 , '("f41", 'SchemaNumber '[])
75 , '("f42", 'SchemaNumber '[])
76 , '("f43", 'SchemaNumber '[])
77 , '("f44", 'SchemaNumber '[])
78 , '("f45", 'SchemaNumber '[])
79 , '("f46", 'SchemaNumber '[])
80 , '("f47", 'SchemaNumber '[])
81 , '("f48", 'SchemaNumber '[])
82 , '("f49", 'SchemaNumber '[])
83 , '("f50", 'SchemaNumber '[])
84 , '("f51", 'SchemaNumber '[])
85 , '("f52", 'SchemaNumber '[])
86 , '("f53", 'SchemaNumber '[])
87 , '("f54", 'SchemaNumber '[])
88 , '("f55", 'SchemaNumber '[])
89 , '("f56", 'SchemaNumber '[])
90 , '("f57", 'SchemaNumber '[])
91 , '("f58", 'SchemaNumber '[])
92 , '("f59", 'SchemaNumber '[])
93 , '("f60", 'SchemaNumber '[])
94 , '("f61", 'SchemaNumber '[])
95 , '("f62", 'SchemaNumber '[])
96 , '("f63", 'SchemaNumber '[])
97 , '("f64", 'SchemaNumber '[])
98 , '("f65", 'SchemaNumber '[])
99 , '("f66", 'SchemaNumber '[])
100 , '("f67", 'SchemaNumber '[])
101 , '("f68", 'SchemaNumber '[])
102 , '("f69", 'SchemaNumber '[])
103 , '("f70", 'SchemaNumber '[])
104 , '("f71", 'SchemaNumber '[])
105 , '("f72", 'SchemaNumber '[])
106 , '("f73", 'SchemaNumber '[])
107 , '("f74", 'SchemaNumber '[])
108 , '("f75", 'SchemaNumber '[])
109 , '("f76", 'SchemaNumber '[])
110 , '("f77", 'SchemaNumber '[])
111 , '("f78", 'SchemaNumber '[])
112 , '("f79", 'SchemaNumber '[])
113 , '("f80", 'SchemaNumber '[])
114 , '("f81", 'SchemaNumber '[])
115 , '("f82", 'SchemaNumber '[])
116 , '("f83", 'SchemaNumber '[])
117 , '("f84", 'SchemaNumber '[])
118 , '("f85", 'SchemaNumber '[])
119 , '("f86", 'SchemaNumber '[])
120 , '("f87", 'SchemaNumber '[])
121 , '("f88", 'SchemaNumber '[])
122 , '("f89", 'SchemaNumber '[])
123 , '("f90", 'SchemaNumber '[])
124 , '("f91", 'SchemaNumber '[])
125 , '("f92", 'SchemaNumber '[])
126 , '("f93", 'SchemaNumber '[])
127 , '("f94", 'SchemaNumber '[])
128 , '("f95", 'SchemaNumber '[])
129 , '("f96", 'SchemaNumber '[])
130 , '("f97", 'SchemaNumber '[])
131 , '("f98", 'SchemaNumber '[])
132 , '("f99", 'SchemaNumber '[])
133 , '("f100", 'SchemaNumber '[])
134 , '("f101", 'SchemaNumber '[])
135 , '("f102", 'SchemaNumber '[])
136 , '("f103", 'SchemaNumber '[])
137 , '("f104", 'SchemaNumber '[])
138 , '("f105", 'SchemaNumber '[])
139 , '("f106", 'SchemaNumber '[])
140 , '("f107", 'SchemaNumber '[])
141 , '("f108", 'SchemaNumber '[])
142 , '("f109", 'SchemaNumber '[])
143 , '("f110", 'SchemaNumber '[])
144 , '("f111", 'SchemaNumber '[])
145 , '("f112", 'SchemaNumber '[])
146 , '("f113", 'SchemaNumber '[])
147 , '("f114", 'SchemaNumber '[])
148 , '("f115", 'SchemaNumber '[])
149 , '("f116", 'SchemaNumber '[])
150 , '("f117", 'SchemaNumber '[])
151 , '("f118", 'SchemaNumber '[])
152 , '("f119", 'SchemaNumber '[])
153 , '("f120", 'SchemaNumber '[])
154 , '("f121", 'SchemaNumber '[])
155 , '("f122", 'SchemaNumber '[])
156 , '("f123", 'SchemaNumber '[])
157 , '("f124", 'SchemaNumber '[])
158 , '("f125", 'SchemaNumber '[])
159 , '("f126", 'SchemaNumber '[])
160 , '("f127", 'SchemaNumber '[])
161 , '("f128", 'SchemaNumber '[])
162 , '("f129", 'SchemaNumber '[])
163 , '("f130", 'SchemaNumber '[])
164 ]
166_bigRecord :: BigRecord
167_bigRecord =
168 FieldRepr (ReprNumber 1)
169 :& FieldRepr (ReprNumber 2)
170 :& FieldRepr (ReprNumber 3)
171 :& FieldRepr (ReprNumber 4)
172 :& FieldRepr (ReprNumber 5)
173 :& FieldRepr (ReprNumber 6)
174 :& FieldRepr (ReprNumber 7)
175 :& FieldRepr (ReprNumber 8)
176 :& FieldRepr (ReprNumber 9)
177 :& FieldRepr (ReprNumber 10)
178 :& FieldRepr (ReprNumber 11)
179 :& FieldRepr (ReprNumber 12)
180 :& FieldRepr (ReprNumber 13)
181 :& FieldRepr (ReprNumber 14)
182 :& FieldRepr (ReprNumber 15)
183 :& FieldRepr (ReprNumber 16)
184 :& FieldRepr (ReprNumber 17)
185 :& FieldRepr (ReprNumber 18)
186 :& FieldRepr (ReprNumber 19)
187 :& FieldRepr (ReprNumber 20)
188 :& FieldRepr (ReprNumber 21)
189 :& FieldRepr (ReprNumber 22)
190 :& FieldRepr (ReprNumber 23)
191 :& FieldRepr (ReprNumber 24)
192 :& FieldRepr (ReprNumber 25)
193 :& FieldRepr (ReprNumber 26)
194 :& FieldRepr (ReprNumber 27)
195 :& FieldRepr (ReprNumber 28)
196 :& FieldRepr (ReprNumber 29)
197 :& FieldRepr (ReprNumber 30)
198 :& FieldRepr (ReprNumber 31)
199 :& FieldRepr (ReprNumber 32)
200 :& FieldRepr (ReprNumber 33)
201 :& FieldRepr (ReprNumber 34)
202 :& FieldRepr (ReprNumber 35)
203 :& FieldRepr (ReprNumber 36)
204 :& FieldRepr (ReprNumber 37)
205 :& FieldRepr (ReprNumber 38)
206 :& FieldRepr (ReprNumber 39)
207 :& FieldRepr (ReprNumber 40)
208 :& FieldRepr (ReprNumber 41)
209 :& FieldRepr (ReprNumber 42)
210 :& FieldRepr (ReprNumber 43)
211 :& FieldRepr (ReprNumber 44)
212 :& FieldRepr (ReprNumber 45)
213 :& FieldRepr (ReprNumber 46)
214 :& FieldRepr (ReprNumber 47)
215 :& FieldRepr (ReprNumber 48)
216 :& FieldRepr (ReprNumber 49)
217 :& FieldRepr (ReprNumber 50)
218 :& FieldRepr (ReprNumber 51)
219 :& FieldRepr (ReprNumber 52)
220 :& FieldRepr (ReprNumber 53)
221 :& FieldRepr (ReprNumber 54)
222 :& FieldRepr (ReprNumber 55)
223 :& FieldRepr (ReprNumber 56)
224 :& FieldRepr (ReprNumber 57)
225 :& FieldRepr (ReprNumber 58)
226 :& FieldRepr (ReprNumber 59)
227 :& FieldRepr (ReprNumber 60)
228 :& FieldRepr (ReprNumber 61)
229 :& FieldRepr (ReprNumber 62)
230 :& FieldRepr (ReprNumber 63)
231 :& FieldRepr (ReprNumber 64)
232 :& FieldRepr (ReprNumber 65)
233 :& FieldRepr (ReprNumber 66)
234 :& FieldRepr (ReprNumber 67)
235 :& FieldRepr (ReprNumber 68)
236 :& FieldRepr (ReprNumber 69)
237 :& FieldRepr (ReprNumber 70)
238 :& FieldRepr (ReprNumber 71)
239 :& FieldRepr (ReprNumber 72)
240 :& FieldRepr (ReprNumber 73)
241 :& FieldRepr (ReprNumber 74)
242 :& FieldRepr (ReprNumber 75)
243 :& FieldRepr (ReprNumber 76)
244 :& FieldRepr (ReprNumber 77)
245 :& FieldRepr (ReprNumber 78)
246 :& FieldRepr (ReprNumber 79)
247 :& FieldRepr (ReprNumber 80)
248 :& FieldRepr (ReprNumber 81)
249 :& FieldRepr (ReprNumber 82)
250 :& FieldRepr (ReprNumber 83)
251 :& FieldRepr (ReprNumber 84)
252 :& FieldRepr (ReprNumber 85)
253 :& FieldRepr (ReprNumber 86)
254 :& FieldRepr (ReprNumber 87)
255 :& FieldRepr (ReprNumber 88)
256 :& FieldRepr (ReprNumber 89)
257 :& FieldRepr (ReprNumber 90)
258 :& FieldRepr (ReprNumber 91)
259 :& FieldRepr (ReprNumber 92)
260 :& FieldRepr (ReprNumber 93)
261 :& FieldRepr (ReprNumber 94)
262 :& FieldRepr (ReprNumber 95)
263 :& FieldRepr (ReprNumber 96)
264 :& FieldRepr (ReprNumber 97)
265 :& FieldRepr (ReprNumber 98)
266 :& FieldRepr (ReprNumber 99)
267 :& FieldRepr (ReprNumber 100)
268 :& FieldRepr (ReprNumber 101)
269 :& FieldRepr (ReprNumber 102)
270 :& FieldRepr (ReprNumber 103)
271 :& FieldRepr (ReprNumber 104)
272 :& FieldRepr (ReprNumber 105)
273 :& FieldRepr (ReprNumber 106)
274 :& FieldRepr (ReprNumber 107)
275 :& FieldRepr (ReprNumber 108)
276 :& FieldRepr (ReprNumber 109)
277 :& FieldRepr (ReprNumber 110)
278 :& FieldRepr (ReprNumber 111)
279 :& FieldRepr (ReprNumber 112)
280 :& FieldRepr (ReprNumber 113)
281 :& FieldRepr (ReprNumber 114)
282 :& FieldRepr (ReprNumber 115)
283 :& FieldRepr (ReprNumber 116)
284 :& FieldRepr (ReprNumber 117)
285 :& FieldRepr (ReprNumber 118)
286 :& FieldRepr (ReprNumber 119)
287 :& FieldRepr (ReprNumber 120)
288 :& FieldRepr (ReprNumber 121)
289 :& FieldRepr (ReprNumber 122)
290 :& FieldRepr (ReprNumber 123)
291 :& FieldRepr (ReprNumber 124)
292 :& FieldRepr (ReprNumber 125)
293 :& FieldRepr (ReprNumber 126)
294 :& FieldRepr (ReprNumber 127)
295 :& FieldRepr (ReprNumber 128)
296 :& FieldRepr (ReprNumber 129)
297 :& FieldRepr (ReprNumber 130)
298 :& RNil
300spec :: Spec
301spec = do
302 let
303 newFooVal = FieldRepr $ ReprArray [ReprNumber 15]
304 fooProxy = Proxy @"foo"
305 it "gets the field from an object" $ do
306 fget @"foo" objectData `shouldBe` arrayField
307 it "sets the object field" $ do
308 fget @"foo" (fput newFooVal objectData) `shouldBe` newFooVal
310 describe "(using lens library) " $ do
311 it "get the field from an object" $ do
312 objectData ^. flens @"foo" `shouldBe` arrayField
313 it "sets the object field" $ do
314 set (flens @"foo") newFooVal objectData ^. flens @"foo"
315 `shouldBe` newFooVal
317main :: IO ()
318main = hspec spec