aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/data/text/encoding.lux
blob: ca28e316d9ebb1c1afb9a308a86af68516b80393 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
(.module:
  [library
   [lux #*
    ["_" test (#+ Test)]
    [abstract
     [monad (#+ do)]
     [\\specification
      ["$." codec]]]
    [control
     ["." maybe]
     ["." try]]
    [data
     ["." text ("#\." equivalence)]
     [collection
      ["." list ("#\." mix)]
      ["." set]]]
    [macro
     ["." template]]
    [math
     ["." random (#+ Random)]
     [number
      ["n" nat]]]]]
  [\\library
   ["." /]]
  ["." / #_
   ["#." utf8]])

(with_expansions [<encodings> (as_is [all/a
                                      [/.ascii]]

                                     [all/ibm<700
                                      [/.ibm_037
                                       /.ibm_273
                                       /.ibm_277
                                       /.ibm_278
                                       /.ibm_280
                                       /.ibm_284
                                       /.ibm_285
                                       /.ibm_290
                                       /.ibm_297
                                       /.ibm_300
                                       /.ibm_420
                                       /.ibm_424
                                       /.ibm_437
                                       /.ibm_500]]

                                     [all/ibm<900
                                      [/.ibm_737
                                       /.ibm_775
                                       /.ibm_833
                                       /.ibm_834
                                       /.ibm_838
                                       /.ibm_850
                                       /.ibm_852
                                       /.ibm_855
                                       /.ibm_856
                                       /.ibm_857
                                       /.ibm_858
                                       /.ibm_860
                                       /.ibm_861
                                       /.ibm_862
                                       /.ibm_863
                                       /.ibm_864
                                       /.ibm_865
                                       /.ibm_866
                                       /.ibm_868
                                       /.ibm_869
                                       /.ibm_870
                                       /.ibm_871
                                       /.ibm_874
                                       /.ibm_875]]

                                     [all/ibm<1000
                                      [/.ibm_918
                                       /.ibm_921
                                       /.ibm_922
                                       /.ibm_930
                                       /.ibm_933
                                       /.ibm_935
                                       /.ibm_937
                                       /.ibm_939
                                       /.ibm_942
                                       /.ibm_942c
                                       /.ibm_943
                                       /.ibm_943c
                                       /.ibm_948
                                       /.ibm_949
                                       /.ibm_949c
                                       /.ibm_950
                                       /.ibm_964
                                       /.ibm_970]]

                                     [all/ibm>1000
                                      [/.ibm_1006
                                       /.ibm_1025
                                       /.ibm_1026
                                       /.ibm_1046
                                       /.ibm_1047
                                       /.ibm_1097
                                       /.ibm_1098
                                       /.ibm_1112
                                       /.ibm_1122
                                       /.ibm_1123
                                       /.ibm_1124
                                       /.ibm_1140
                                       /.ibm_1141
                                       /.ibm_1142
                                       /.ibm_1143
                                       /.ibm_1144
                                       /.ibm_1145
                                       /.ibm_1146
                                       /.ibm_1147
                                       /.ibm_1148
                                       /.ibm_1149
                                       /.ibm_1166
                                       /.ibm_1364
                                       /.ibm_1381
                                       /.ibm_1383
                                       /.ibm_33722]]
                                     
                                     [all/iso
                                      [/.iso_2022_cn
                                       /.iso2022_cn_cns
                                       /.iso2022_cn_gb
                                       /.iso_2022_jp
                                       /.iso_2022_jp_2
                                       /.iso_2022_kr
                                       /.iso_8859_1
                                       /.iso_8859_2
                                       /.iso_8859_3
                                       /.iso_8859_4
                                       /.iso_8859_5
                                       /.iso_8859_6
                                       /.iso_8859_7
                                       /.iso_8859_8
                                       /.iso_8859_9
                                       /.iso_8859_11
                                       /.iso_8859_13
                                       /.iso_8859_15]]

                                     [all/mac
                                      [/.mac_arabic
                                       /.mac_central_europe
                                       /.mac_croatian
                                       /.mac_cyrillic
                                       /.mac_dingbat
                                       /.mac_greek
                                       /.mac_hebrew
                                       /.mac_iceland
                                       /.mac_roman
                                       /.mac_romania
                                       /.mac_symbol
                                       /.mac_thai
                                       /.mac_turkish
                                       /.mac_ukraine]]
                                     
                                     [all/utf
                                      [/.utf_8
                                       /.utf_16
                                       /.utf_32]]

                                     [all/windows
                                      [/.windows_31j
                                       /.windows_874
                                       /.windows_949
                                       /.windows_950
                                       /.windows_1250
                                       /.windows_1252
                                       /.windows_1251
                                       /.windows_1253
                                       /.windows_1254
                                       /.windows_1255
                                       /.windows_1256
                                       /.windows_1257
                                       /.windows_1258
                                       /.windows_iso2022jp
                                       /.windows_50220
                                       /.windows_50221]]
                                     
                                     [all/others
                                      [/.cesu_8
                                       /.koi8_r
                                       /.koi8_u]]
                                     )
                  <named> (template [<definition> <by_letter>]
                            [((: (-> Any (List /.Encoding))
                                 (function (_ _)
                                   (`` (list (~~ (template.spliced <by_letter>))))))
                              [])]
                            
                            <encodings>)]
  (def: all_encodings
    (list.together (list <named>)))
  
  (def: unique_encodings
    (list\mix (function (_ encoding set)
                (set.has (/.name encoding) set))
              (set.empty text.hash)
              ..all_encodings))

  (def: verdict
    (n.= (list.size ..all_encodings)
         (set.size ..unique_encodings)))

  (template [<definition> <by_letter>]
    [(def: <definition>
       Test
       (`` (_.cover [/.name (~~ (template.spliced <by_letter>))]
                    ..verdict)))]
    
    <encodings>)

  (def: .public random
    (Random /.Encoding)
    (let [options (list.size ..all_encodings)]
      (do {! random.monad}
        [choice (\ ! map (n.% options) random.nat)]
        (in (maybe.trusted (list.item choice ..all_encodings))))))

  (def: .public test
    Test
    (<| (_.covering /._)
        (_.for [/.Encoding])
        (`` ($_ _.and
                (~~ (template [<definition> <by_letter>]
                      [<definition>]
                      
                      <encodings>))

                /utf8.test
                ))))
  )