klongpy 0.6.8__py3-none-any.whl → 0.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. klongpy/__init__.py +19 -1
  2. klongpy/adverbs.py +5 -5
  3. klongpy/autograd.py +308 -0
  4. klongpy/backend.py +167 -99
  5. klongpy/backends/__init__.py +94 -0
  6. klongpy/backends/base.py +320 -0
  7. klongpy/backends/numpy_backend.py +122 -0
  8. klongpy/backends/torch_backend.py +995 -0
  9. klongpy-0.6.8.data/scripts/kgpy → klongpy/cli.py +65 -88
  10. klongpy/core.py +228 -106
  11. klongpy/db/sys_fn_db.py +4 -3
  12. klongpy/dyads.py +173 -32
  13. klongpy/interpreter.py +31 -3
  14. klongpy/lib/help.kg +2 -2
  15. klongpy/monads.py +49 -12
  16. klongpy/repl.py +91 -0
  17. klongpy/sys_fn.py +129 -18
  18. klongpy/sys_fn_autograd.py +290 -0
  19. klongpy/sys_fn_ipc.py +18 -7
  20. klongpy/sys_fn_timer.py +13 -3
  21. klongpy/web/sys_fn_web.py +28 -6
  22. klongpy-0.7.0.dist-info/METADATA +493 -0
  23. klongpy-0.7.0.dist-info/RECORD +48 -0
  24. {klongpy-0.6.8.dist-info → klongpy-0.7.0.dist-info}/WHEEL +1 -1
  25. klongpy-0.7.0.dist-info/entry_points.txt +2 -0
  26. {klongpy-0.6.8.dist-info → klongpy-0.7.0.dist-info}/top_level.txt +0 -1
  27. klongpy-0.6.8.dist-info/METADATA +0 -412
  28. klongpy-0.6.8.dist-info/RECORD +0 -72
  29. tests/__init__.py +0 -6
  30. tests/gen_join_over.py +0 -119
  31. tests/gen_py_suite.py +0 -77
  32. tests/gen_test_fn.py +0 -259
  33. tests/perf_async.py +0 -25
  34. tests/perf_avg.py +0 -18
  35. tests/perf_duckdb.py +0 -32
  36. tests/perf_gen.py +0 -38
  37. tests/perf_ipc_overhead.py +0 -34
  38. tests/perf_join.py +0 -53
  39. tests/perf_load.py +0 -17
  40. tests/perf_prog.py +0 -18
  41. tests/perf_serdes.py +0 -52
  42. tests/perf_sys_fn_db.py +0 -263
  43. tests/perf_vector.py +0 -40
  44. tests/test_accel.py +0 -227
  45. tests/test_df_cache.py +0 -85
  46. tests/test_examples.py +0 -64
  47. tests/test_extra_suite.py +0 -382
  48. tests/test_file_cache.py +0 -185
  49. tests/test_interop.py +0 -181
  50. tests/test_kgtests.py +0 -65
  51. tests/test_known_bugs.py +0 -206
  52. tests/test_prog.py +0 -107
  53. tests/test_suite.py +0 -1479
  54. tests/test_suite_file.py +0 -153
  55. tests/test_sys_fn.py +0 -420
  56. tests/test_sys_fn_db.py +0 -88
  57. tests/test_sys_fn_ipc.py +0 -587
  58. tests/test_sys_fn_timer.py +0 -133
  59. tests/test_util.py +0 -233
  60. tests/utils.py +0 -126
  61. {klongpy-0.6.8.dist-info → klongpy-0.7.0.dist-info/licenses}/LICENSE +0 -0
tests/test_suite.py DELETED
@@ -1,1479 +0,0 @@
1
- import unittest
2
- from klongpy import KlongInterpreter
3
- from utils import *
4
-
5
- #
6
- # DO NOT MODIFY: this file generated by gen_py_suite.py
7
- #
8
- class TestCoreSuite(unittest.TestCase):
9
-
10
- def assert_eval_cmp(self, a, b, klong=None):
11
- self.assertTrue(eval_cmp(a, b, klong=klong))
12
-
13
- def assert_eval_test(self, a, klong=None):
14
- self.assertTrue(eval_test(a, klong=klong))
15
-
16
- def test_atom(self):
17
- self.assert_eval_cmp('@:foo', '1')
18
- self.assert_eval_cmp('@0', '1')
19
- self.assert_eval_cmp('@123', '1')
20
- self.assert_eval_cmp('@-1', '1')
21
- self.assert_eval_cmp('@1.23', '1')
22
- self.assert_eval_cmp('@1e5', '1')
23
- self.assert_eval_cmp('@""', '1')
24
- self.assert_eval_cmp('@"string"', '0')
25
- self.assert_eval_cmp('@[]', '1')
26
- self.assert_eval_cmp('@[1 2 3]', '0')
27
- self.assert_eval_cmp('@{x}', '1')
28
- self.assert_eval_cmp('@:{}', '1')
29
- self.assert_eval_cmp('@:{[1 2]}', '1')
30
-
31
- def test_list(self):
32
- self.assert_eval_cmp(',:foo', '[:foo]')
33
- self.assert_eval_cmp(',0', '[0]')
34
- self.assert_eval_cmp(',123', '[123]')
35
- self.assert_eval_cmp(',-1', '[-1]')
36
- self.assert_eval_cmp(',1.23', '[1.23]')
37
- self.assert_eval_cmp(',1e5', '[1e5]')
38
- self.assert_eval_cmp(',0cx', '"x"')
39
- self.assert_eval_cmp(',"string"', '["string"]')
40
- self.assert_eval_cmp(',[]', '[[]]')
41
- self.assert_eval_cmp(',[1 2 3]', '[[1 2 3]]')
42
-
43
- def test_enumerate(self):
44
- self.assert_eval_cmp('!0', '[]')
45
- self.assert_eval_cmp('!1', '[0]')
46
- self.assert_eval_cmp('!3', '[0 1 2]')
47
- self.assert_eval_cmp('!10', '[0 1 2 3 4 5 6 7 8 9]')
48
-
49
- def test_size(self):
50
- self.assert_eval_cmp('#0', '0')
51
- self.assert_eval_cmp('#1', '1')
52
- self.assert_eval_cmp('#123', '123')
53
- self.assert_eval_cmp('#-123', '123')
54
- self.assert_eval_cmp('#[]', '0')
55
- self.assert_eval_cmp('#[1]', '1')
56
- self.assert_eval_cmp('#[1 2 3 4 5]', '5')
57
- self.assert_eval_cmp('#[[1] [2]]', '2')
58
- self.assert_eval_cmp('#:{}', '0')
59
- self.assert_eval_cmp('#:{[1 2]}', '1')
60
- self.assert_eval_cmp('#""', '0')
61
- self.assert_eval_cmp('#"x"', '1')
62
- self.assert_eval_cmp('#"hello world"', '11')
63
-
64
- def test_grade_down(self):
65
- self.assert_eval_cmp('>[]', '[]')
66
- self.assert_eval_cmp('>[1]', '[0]')
67
- self.assert_eval_cmp('>[1 2 3]', '[2 1 0]')
68
- self.assert_eval_cmp('>[1 3 2]', '[1 2 0]')
69
- self.assert_eval_cmp('>[2 1 3]', '[2 0 1]')
70
- self.assert_eval_cmp('>[2 3 1]', '[1 0 2]')
71
- self.assert_eval_cmp('>[3 1 2]', '[0 2 1]')
72
- self.assert_eval_cmp('>[3 2 1]', '[0 1 2]')
73
- self.assert_eval_cmp('>[0.0 0.1 -0.1]', '[1 0 2]')
74
- self.assert_eval_cmp('>[:foo :bar :baz]', '[0 2 1]')
75
- self.assert_eval_cmp('>"foobar"', '[5 2 1 0 3 4]')
76
- self.assert_eval_cmp('>[[0 1] [0 2]]', '[1 0]')
77
- self.assert_eval_cmp('>[[0 2] [0 1]]', '[0 1]')
78
- self.assert_eval_cmp('>["this" "is" "a" "test"]', '[0 3 1 2]')
79
-
80
- def test_grade_up(self):
81
- self.assert_eval_cmp('<[]', '[]')
82
- self.assert_eval_cmp('<[1]', '[0]')
83
- self.assert_eval_cmp('<[1 2 3]', '[0 1 2]')
84
- self.assert_eval_cmp('<[1 3 2]', '[0 2 1]')
85
- self.assert_eval_cmp('<[2 1 3]', '[1 0 2]')
86
- self.assert_eval_cmp('<[2 3 1]', '[2 0 1]')
87
- self.assert_eval_cmp('<[3 1 2]', '[1 2 0]')
88
- self.assert_eval_cmp('<[3 2 1]', '[2 1 0]')
89
- self.assert_eval_cmp('<[0.0 0.1 -0.1]', '[2 0 1]')
90
- self.assert_eval_cmp('<[:foo :bar :baz]', '[1 2 0]')
91
- self.assert_eval_cmp('<"foobar"', '[4 3 0 1 2 5]')
92
- self.assert_eval_cmp('<[[0 1] [0 2]]', '[0 1]')
93
- self.assert_eval_cmp('<[[0 2] [0 1]]', '[1 0]')
94
- self.assert_eval_cmp('<["this" "is" "a" "test"]', '[2 1 3 0]')
95
-
96
- def test_group(self):
97
- self.assert_eval_cmp('=[]', '[]')
98
- self.assert_eval_cmp('=[1]', '[[0]]')
99
- self.assert_eval_cmp('=[1 2 3]', '[[0] [1] [2]]')
100
- self.assert_eval_cmp('=[1 2 1 3 1 2 3]', '[[0 2 4] [1 5] [3 6]]')
101
- self.assert_eval_cmp('=[1 1 1 1 1]', '[[0 1 2 3 4]]')
102
- self.assert_eval_cmp('=""', '[]')
103
- self.assert_eval_cmp('="x"', '[[0]]')
104
- self.assert_eval_cmp('="abc"', '[[0] [1] [2]]')
105
- self.assert_eval_cmp('="abacabc"', '[[0 2 4] [1 5] [3 6]]')
106
- self.assert_eval_cmp('="xxxxx"', '[[0 1 2 3 4]]')
107
-
108
- def test_first(self):
109
- self.assert_eval_cmp('*[]', '[]')
110
- self.assert_eval_cmp('*[1]', '1')
111
- self.assert_eval_cmp('*[1 2 3]', '1')
112
- self.assert_eval_cmp('*""', '""')
113
- self.assert_eval_cmp('*"x"', '0cx')
114
- self.assert_eval_cmp('*"abc"', '0ca')
115
-
116
- def test_transpose(self):
117
- self.assert_eval_cmp('+[]', '[]')
118
- self.assert_eval_cmp('+[1]', '[1]')
119
- self.assert_eval_cmp('+[1 2 3]', '[1 2 3]')
120
- self.assert_eval_cmp('+[[1 2 3]]', '[[1] [2] [3]]')
121
- self.assert_eval_cmp('+[[1 2 3] [4 5 6]]', '[[1 4] [2 5] [3 6]]')
122
- self.assert_eval_cmp('+[[1 2] [3 4] [5 6]]', '[[1 3 5] [2 4 6]]')
123
-
124
- def test_floor(self):
125
- self.assert_eval_cmp('_0', '0')
126
- self.assert_eval_cmp('_1', '1')
127
- self.assert_eval_cmp('_1.23', '1')
128
- self.assert_eval_cmp('_1.999', '1')
129
- self.assert_eval_cmp('_1e9', '1e9')
130
- self.assert_eval_cmp('_-1', '-1')
131
- self.assert_eval_cmp('_-1.23', '-2')
132
- self.assert_eval_cmp('_-1.99', '-2')
133
- self.assert_eval_cmp('_-1e9', '-1e9')
134
- self.assert_eval_cmp('_[0 [1 2.2] -9.99]', '[0 [1 2.0] -10.0]')
135
-
136
- def test_negate(self):
137
- self.assert_eval_cmp('-0', '0')
138
- self.assert_eval_cmp('-1', '-1')
139
- self.assert_eval_cmp('-1.23', '-1.23')
140
- self.assert_eval_cmp('-1e9', '-1e9')
141
- self.assert_eval_cmp('-[0 [1] -1.23]', '[0 [-1] 1.23]')
142
-
143
- def test_not(self):
144
- self.assert_eval_cmp('~:foo', '0')
145
- self.assert_eval_cmp('~0', '1')
146
- self.assert_eval_cmp('~123', '0')
147
- self.assert_eval_cmp('~-1', '0')
148
- self.assert_eval_cmp('~1.23', '0')
149
- self.assert_eval_cmp('~1e5', '0')
150
- self.assert_eval_cmp('0ca~0ca', '1')
151
- self.assert_eval_cmp('0ca~0cb', '0')
152
- self.assert_eval_cmp('0cb~0ca', '0')
153
- self.assert_eval_cmp('~""', '1')
154
- self.assert_eval_cmp('~"string"', '0')
155
- self.assert_eval_cmp('~[]', '1')
156
- self.assert_eval_cmp('~[0]', '[1]')
157
- self.assert_eval_cmp('~[1 2 3]', '[0 0 0]')
158
- self.assert_eval_cmp('~{x}', '0')
159
- self.assert_eval_cmp('~:{}', '0')
160
- self.assert_eval_cmp('~:{[1 2]}', '0')
161
- self.assert_eval_cmp('~[0 1 [] [2] "" "x"]', '[1 0 1 [0] 1 0]')
162
-
163
- def test_format(self):
164
- self.assert_eval_cmp('$0', '"0"')
165
- self.assert_eval_cmp('$1', '"1"')
166
- self.assert_eval_cmp('$1.23', '"1.23"')
167
- self.assert_eval_cmp('$-1', '"-1"')
168
- self.assert_eval_cmp('$-1.23', '"-1.23"')
169
- self.assert_eval_cmp('$:foo', '":foo"')
170
- self.assert_eval_cmp('$0cx', '"x"')
171
- self.assert_eval_cmp('$""', '""')
172
- self.assert_eval_cmp('$"test"', '"test"')
173
- self.assert_eval_cmp('$["x" [:y] 0]', '["x" [":y"] "0"]')
174
-
175
- def test_range(self):
176
- self.assert_eval_cmp('?[]', '[]')
177
- self.assert_eval_cmp('?[1]', '[1]')
178
- self.assert_eval_cmp('?[1 2 3]', '[1 2 3]')
179
- self.assert_eval_cmp('?[1 2 1 3 1 2 3]', '[1 2 3]')
180
- self.assert_eval_cmp('?[1 1 1 1 1]', '[1]')
181
- self.assert_eval_cmp('?""', '""')
182
- self.assert_eval_cmp('?"x"', '"x"')
183
- self.assert_eval_cmp('?"abc"', '"abc"')
184
- self.assert_eval_cmp('?"abacabc"', '"abc"')
185
- self.assert_eval_cmp('?"xxxxx"', '"x"')
186
-
187
- def test_reciprocal(self):
188
- self.assert_eval_cmp('%1', '1.0')
189
- self.assert_eval_cmp('%2', '0.5')
190
- self.assert_eval_cmp('%4', '0.25')
191
- self.assert_eval_cmp('%10', '0.1')
192
- self.assert_eval_cmp('%0.01', '100')
193
- self.assert_eval_cmp('%0.1', '10')
194
- self.assert_eval_cmp('%0.5', '2')
195
- self.assert_eval_cmp('%-1', '-1.0')
196
- self.assert_eval_cmp('%-2', '-0.5')
197
- self.assert_eval_cmp('%-4', '-0.25')
198
- self.assert_eval_cmp('%-10', '-0.1')
199
- self.assert_eval_cmp('%-0.01', '-100.0')
200
- self.assert_eval_cmp('%-0.1', '-10.0')
201
- self.assert_eval_cmp('%-0.5', '-2.0')
202
- self.assert_eval_cmp('%[1 [-2] 0.5]', '[1.0 [-0.5] 2.0]')
203
-
204
- def test_reverse(self):
205
- self.assert_eval_cmp('|[]', '[]')
206
- self.assert_eval_cmp('|[1]', '[1]')
207
- self.assert_eval_cmp('|[1 2 3]', '[3 2 1]')
208
- self.assert_eval_cmp('|[[1 2 3] [4 5 6]]', '[[4 5 6] [1 2 3]]')
209
- self.assert_eval_cmp('|""', '""')
210
- self.assert_eval_cmp('|"a"', '"a"')
211
- self.assert_eval_cmp('|"abc"', '"cba"')
212
- self.assert_eval_cmp('|"abcdef"', '"fedcba"')
213
-
214
- def test_shape(self):
215
- self.assert_eval_cmp('^:foo', '0')
216
- self.assert_eval_cmp('^123', '0')
217
- self.assert_eval_cmp('^"string"', '[6]')
218
- self.assert_eval_cmp('^{x}', '0')
219
- self.assert_eval_cmp('^:{}', '0')
220
- self.assert_eval_cmp('^:{[1 2]}', '0')
221
- self.assert_eval_cmp('^[]', '0')
222
- self.assert_eval_cmp('^[1]', '[1]')
223
- self.assert_eval_cmp('^[1 2]', '[2]')
224
- self.assert_eval_cmp('^[1 2 3]', '[3]')
225
- self.assert_eval_cmp('^[[1 2] [3 4]]', '[2 2]')
226
- self.assert_eval_cmp('^[[1 2 3] [4 5 6]]', '[2 3]')
227
- self.assert_eval_cmp('^[[1 2] [3 4] [5 6]]', '[3 2]')
228
- self.assert_eval_cmp('^[[1] [2] [3] [4]]', '[4 1]')
229
- self.assert_eval_cmp('^[[[1] [2]] [[3] [4]]]', '[2 2 1]')
230
- self.assert_eval_cmp('^["abc" "def"]', '[2 3]')
231
-
232
- def test_expand___where(self):
233
- self.assert_eval_cmp('&0', '[]')
234
- self.assert_eval_cmp('&1', '[0]')
235
- self.assert_eval_cmp('&2', '[0 0]')
236
- self.assert_eval_cmp('&10', '[0 0 0 0 0 0 0 0 0 0]')
237
- self.assert_eval_cmp('&[0]', '[]')
238
- self.assert_eval_cmp('&[1]', '[0]')
239
- self.assert_eval_cmp('&[2]', '[0 0]')
240
- self.assert_eval_cmp('&[1 2 3]', '[0 1 1 2 2 2]')
241
- self.assert_eval_cmp('&[0 3]', '[1 1 1]')
242
- self.assert_eval_cmp('&[3 0]', '[0 0 0]')
243
- self.assert_eval_cmp('&[2 0 3]', '[0 0 2 2 2]')
244
-
245
- def test_char(self):
246
- self.assert_eval_cmp(':#65', '0cA')
247
- self.assert_eval_cmp(':#97', '0ca')
248
- self.assert_eval_cmp('#:#10', '10')
249
- self.assert_eval_cmp(':#[65 66 67]', '[0cA 0cB 0cC]')
250
- self.assert_eval_cmp(':#[65 [66] 67]', '[0cA [0cB] 0cC]')
251
-
252
- def test_amend(self):
253
- self.assert_eval_cmp('[]:=[]', '[]')
254
- self.assert_eval_cmp('[]:=[99]', '[]')
255
- self.assert_eval_cmp('[1]:=[2 0]', '[2]')
256
- self.assert_eval_cmp('[1 2 3]:=[9]', '[1 2 3]')
257
- self.assert_eval_cmp('[1 2 3]:=[9 0]', '[9 2 3]')
258
- self.assert_eval_cmp('[1 2 3]:=[9 0 1]', '[9 9 3]')
259
- self.assert_eval_cmp('[1 2 3]:=[9 0 1 2]', '[9 9 9]')
260
- self.assert_eval_cmp('[1 [2] 3]:=[[9] 1]', '[1 [9] 3]')
261
- self.assert_eval_cmp('[1 [2 3] 3]:=[[9 9] 1]', '[1 [9 9] 3]')
262
- self.assert_eval_cmp('"":=[]', '""')
263
- self.assert_eval_cmp('"":=[1]', '""')
264
- self.assert_eval_cmp('"x":=[0c0 0]', '"0"')
265
- self.assert_eval_cmp('"abc":=[0c_]', '"abc"')
266
- self.assert_eval_cmp('"abc":=[0c_ 0]', '"_bc"')
267
- self.assert_eval_cmp('"abc":=[0c_ 0 1]', '"__c"')
268
- self.assert_eval_cmp('"abc":=[0c_ 0 1 2]', '"___"')
269
- self.assert_eval_cmp('"":=["x"]', '""')
270
- self.assert_eval_cmp('"x":=["y" 0]', '"y"')
271
- self.assert_eval_cmp('"abc":=["x"]', '"abc"')
272
- self.assert_eval_cmp('"abc":=["_" 0]', '"_bc"')
273
- self.assert_eval_cmp('"abcabc":=["__" 0 4]', '"__ca__"')
274
- self.assert_eval_cmp('"abcabc":=["xyz" 0 3]', '"xyzxyz"')
275
- self.assert_eval_cmp('"abx":=["cde" 2]', '"abcde"')
276
- self.assert_eval_cmp('"abc":=["def" 3]', '"abcdef"')
277
-
278
- def test_amend_in_depth(self):
279
- self.assert_eval_cmp('[1 2 3]:-[9 0]', '[9 2 3]')
280
- self.assert_eval_cmp('[1 2 3]:-[9 1]', '[1 9 3]')
281
- self.assert_eval_cmp('[1 2 3]:-[9 2]', '[1 2 9]')
282
- self.assert_eval_cmp('[[1 2] [3 4]]:-[9 0 0]', '[[9 2] [3 4]]')
283
- self.assert_eval_cmp('[[1 2] [3 4]]:-[9 0 1]', '[[1 9] [3 4]]')
284
- self.assert_eval_cmp('[[1 2] [3 4]]:-[9 1 0]', '[[1 2] [9 4]]')
285
- self.assert_eval_cmp('[[1 2] [3 4]]:-[9 1 1]', '[[1 2] [3 9]]')
286
- klong = create_test_klong()
287
- klong('A::[[[0 1] [2 3]] [[4 5] [6 7]]]')
288
- self.assert_eval_cmp('A:-[:x 0 0 0]', '[[[:x 1] [2 3]] [[4 5] [6 7]]]', klong=klong)
289
- self.assert_eval_cmp('A:-[:x 0 0 1]', '[[[0 :x] [2 3]] [[4 5] [6 7]]]', klong=klong)
290
- self.assert_eval_cmp('A:-[:x 0 1 0]', '[[[0 1] [:x 3]] [[4 5] [6 7]]]', klong=klong)
291
- self.assert_eval_cmp('A:-[:x 0 1 1]', '[[[0 1] [2 :x]] [[4 5] [6 7]]]', klong=klong)
292
- self.assert_eval_cmp('A:-[:x 1 0 0]', '[[[0 1] [2 3]] [[:x 5] [6 7]]]', klong=klong)
293
- self.assert_eval_cmp('A:-[:x 1 0 1]', '[[[0 1] [2 3]] [[4 :x] [6 7]]]', klong=klong)
294
- self.assert_eval_cmp('A:-[:x 1 1 0]', '[[[0 1] [2 3]] [[4 5] [:x 7]]]', klong=klong)
295
- self.assert_eval_cmp('A:-[:x 1 1 1]', '[[[0 1] [2 3]] [[4 5] [6 :x]]]', klong=klong)
296
-
297
- def test_define(self):
298
- klong = create_test_klong()
299
- klong('A::1; t("A::1" ; A ; 1)')
300
- klong('A::[1 2 3]; t("A::[1 2 3]" ; A ; [1 2 3])')
301
- klong('A::"hello, world!"; t("A::""hello, world!""" ; A ; "hello, world!")')
302
- klong('A:::foobar; t("A:::foobar" ; A ; :foobar)')
303
-
304
- def test_divide(self):
305
- self.assert_eval_cmp('0%1', '0')
306
- self.assert_eval_cmp('1%1', '1')
307
- self.assert_eval_cmp('2%1', '2')
308
- self.assert_eval_cmp('1%2', '0.5')
309
- self.assert_eval_cmp('0%1.0', '0')
310
- self.assert_eval_cmp('1%1.0', '1.0')
311
- self.assert_eval_cmp('2%1.0', '2.0')
312
- self.assert_eval_cmp('1%2.0', '0.5')
313
- self.assert_eval_cmp('(-0)%1', '0')
314
- self.assert_eval_cmp('(-1)%1', '-1')
315
- self.assert_eval_cmp('(-2)%1', '-2')
316
- self.assert_eval_cmp('(-1)%2', '-0.5')
317
- self.assert_eval_cmp('(-0)%1.0', '0')
318
- self.assert_eval_cmp('(-1)%1.0', '-1.0')
319
- self.assert_eval_cmp('(-2)%1.0', '-2.0')
320
- self.assert_eval_cmp('(-1)%2.0', '-0.5')
321
- self.assert_eval_cmp('[1 2 3 4 5]%2.', '[0.5 1.0 1.5 2.0 2.5]')
322
- self.assert_eval_cmp('2.0%[2 4 8 10]', '[1.0 0.5 0.25 0.2]')
323
- self.assert_eval_cmp('[10 [20] 30]%[1 2 3]', '[10 [10] 10]')
324
-
325
- def test_integer_divide(self):
326
- self.assert_eval_cmp('0:%1', '0')
327
- self.assert_eval_cmp('1:%1', '1')
328
- self.assert_eval_cmp('2:%1', '2')
329
- self.assert_eval_cmp('1:%2', '0')
330
- self.assert_eval_cmp('(-0):%1', '0')
331
- self.assert_eval_cmp('(-1):%1', '-1')
332
- self.assert_eval_cmp('(-2):%1', '-2')
333
- self.assert_eval_cmp('(-1):%2', '-0')
334
- self.assert_eval_cmp('[1 2 3 4 5]:%2', '[0 1 1 2 2]')
335
- self.assert_eval_cmp('100:%[2 4 8 10]', '[50 25 12 10]')
336
- self.assert_eval_cmp('[10 [20] 30]:%[1 2 3]', '[10 [10] 10]')
337
-
338
- def test_drop(self):
339
- self.assert_eval_cmp('0_[]', '[]')
340
- self.assert_eval_cmp('1_[]', '[]')
341
- self.assert_eval_cmp('10_[]', '[]')
342
- self.assert_eval_cmp('0_[1]', '[1]')
343
- self.assert_eval_cmp('1_[1]', '[]')
344
- self.assert_eval_cmp('10_[1]', '[]')
345
- self.assert_eval_cmp('0_[1 2 3]', '[1 2 3]')
346
- self.assert_eval_cmp('1_[1 2 3]', '[2 3]')
347
- self.assert_eval_cmp('2_[1 2 3]', '[3]')
348
- self.assert_eval_cmp('3_[1 2 3]', '[]')
349
- self.assert_eval_cmp('4_[1 2 3]', '[]')
350
- self.assert_eval_cmp('2_[[1] [2] [3]]', '[[3]]')
351
- self.assert_eval_cmp('0_""', '""')
352
- self.assert_eval_cmp('1_""', '""')
353
- self.assert_eval_cmp('10_""', '""')
354
- self.assert_eval_cmp('0_"a"', '"a"')
355
- self.assert_eval_cmp('1_"a"', '""')
356
- self.assert_eval_cmp('10_"a"', '""')
357
- self.assert_eval_cmp('0_"abc"', '"abc"')
358
- self.assert_eval_cmp('1_"abc"', '"bc"')
359
- self.assert_eval_cmp('2_"abc"', '"c"')
360
- self.assert_eval_cmp('3_"abc"', '""')
361
- self.assert_eval_cmp('4_"abc"', '""')
362
- self.assert_eval_cmp(':foo_:{}', ':{}')
363
- self.assert_eval_cmp(':foo_:{[:foo bar] [:goo baz]}', ':{[:goo baz]}')
364
- self.assert_eval_cmp(':foo_:{[:goo baz]}', ':{[:goo baz]}')
365
-
366
- def test_cut(self):
367
- self.assert_eval_cmp('[]:_[]', '[[]]')
368
- self.assert_eval_cmp('[]:_[1]', '[[1]]')
369
- self.assert_eval_cmp('[]:_[1 2 3]', '[[1 2 3]]')
370
- self.assert_eval_cmp('0:_[]', '[[]]')
371
- self.assert_eval_cmp('0:_[1]', '[[] [1]]')
372
- self.assert_eval_cmp('1:_[1]', '[[1] []]')
373
- self.assert_eval_cmp('[0]:_[]', '[[]]')
374
- self.assert_eval_cmp('[0 0]:_[]', '[[] []]')
375
- self.assert_eval_cmp('[0]:_[1]', '[[] [1]]')
376
- self.assert_eval_cmp('[1]:_[1]', '[[1] []]')
377
- self.assert_eval_cmp('[0 1]:_[1]', '[[] [1] []]')
378
- self.assert_eval_cmp('[0]:_!10', '[[] [0 1 2 3 4 5 6 7 8 9]]')
379
- self.assert_eval_cmp('[10]:_!10', '[[0 1 2 3 4 5 6 7 8 9] []]')
380
- self.assert_eval_cmp('[1 4 7]:_!10', '[[0] [1 2 3] [4 5 6] [7 8 9]]')
381
- self.assert_eval_cmp('(!6):_!5', '[[] [0] [1] [2] [3] [4] []]')
382
- self.assert_eval_cmp('[]:_""', '[""]')
383
- self.assert_eval_cmp('[]:_"a"', '["a"]')
384
- self.assert_eval_cmp('[]:_"abc"', '["abc"]')
385
- self.assert_eval_cmp('[0 0]:_"a"', '["" "" "a"]')
386
- self.assert_eval_cmp('0:_""', '[""]')
387
- self.assert_eval_cmp('0:_"a"', '["" "a"]')
388
- self.assert_eval_cmp('1:_"a"', '["a" ""]')
389
- self.assert_eval_cmp('[0]:_"a"', '["" "a"]')
390
- self.assert_eval_cmp('[1]:_"a"', '["a" ""]')
391
- self.assert_eval_cmp('[0 1]:_"a"', '["" "a" ""]')
392
- self.assert_eval_cmp('[0]:_"abcdef"', '["" "abcdef"]')
393
- self.assert_eval_cmp('[6]:_"abcdef"', '["abcdef" ""]')
394
- self.assert_eval_cmp('[1 3 5]:_"abcdef"', '["a" "bc" "de" "f"]')
395
- self.assert_eval_cmp('(!7):_"abcdef"', '["" "a" "b" "c" "d" "e" "f" ""]')
396
-
397
- def test_equal(self):
398
- self.assert_eval_cmp('0=0', '1')
399
- self.assert_eval_cmp('1=1', '1')
400
- self.assert_eval_cmp('123=123', '1')
401
- self.assert_eval_cmp('1.23=1.23', '1')
402
- self.assert_eval_cmp('(-1)=-1', '1')
403
- self.assert_eval_cmp('(-123)=-123', '1')
404
- self.assert_eval_cmp('(-1.23)=-1.23', '1')
405
- self.assert_eval_cmp('123.0=123', '1')
406
- self.assert_eval_cmp('123=123.0', '1')
407
- self.assert_eval_cmp('0=1', '0')
408
- self.assert_eval_cmp('1=0', '0')
409
- self.assert_eval_cmp('123=-123', '0')
410
- self.assert_eval_cmp('(-123)=123', '0')
411
- self.assert_eval_cmp('1.23=123', '0')
412
- self.assert_eval_cmp('123=1.23', '0')
413
- self.assert_eval_cmp('0ca=0ca', '1')
414
- self.assert_eval_cmp('0ca=0cz', '0')
415
- self.assert_eval_cmp('0cz=0ca', '0')
416
- self.assert_eval_cmp('""=""', '1')
417
- self.assert_eval_cmp('"x"="x"', '1')
418
- self.assert_eval_cmp('"x"="y"', '0')
419
- self.assert_eval_cmp('"y"="x"', '0')
420
- self.assert_eval_cmp('"test"="test"', '1')
421
- self.assert_eval_cmp('"test"="tesz"', '0')
422
- self.assert_eval_cmp('"tesz"="test"', '0')
423
- self.assert_eval_cmp('"test"="tes"', '0')
424
- self.assert_eval_cmp('"tes"="test"', '0')
425
- self.assert_eval_cmp(':foo=:foo', '1')
426
- self.assert_eval_cmp(':foo=:bar', '0')
427
- self.assert_eval_cmp(':bar=:foo', '0')
428
- self.assert_eval_cmp(':foo=:fob', '0')
429
- self.assert_eval_cmp(':fob=:foo', '0')
430
- self.assert_eval_cmp(':foo=:fo', '0')
431
- self.assert_eval_cmp(':fo=:foo', '0')
432
- self.assert_eval_cmp('[1 2 3]=[1 2 3]', '[1 1 1]')
433
- self.assert_eval_cmp('1=[1 1 1]', '[1 1 1]')
434
- self.assert_eval_cmp('[1 1 1]=2', '[0 0 0]')
435
- self.assert_eval_cmp('[1 [2 [:x]]]=[1 [2 [:x]]]', '[1 [1 [1]]]')
436
- self.assert_eval_cmp('[1 [0 [:x]]]=[1 [2 [:x]]]', '[1 [0 [1]]]')
437
-
438
- def test_find(self):
439
- self.assert_eval_cmp('[]?0', '[]')
440
- self.assert_eval_cmp('[0]?0', '[0]')
441
- self.assert_eval_cmp('[0]?1', '[]')
442
- self.assert_eval_cmp('[1]?0', '[]')
443
- self.assert_eval_cmp('[1 2 3]?2', '[1]')
444
- self.assert_eval_cmp('[1 1 1]?1', '[0 1 2]')
445
- self.assert_eval_cmp('[1 2 1 2 1 2]?2', '[1 3 5]')
446
- self.assert_eval_cmp('[[1] [2] [3]]?[2]', '[1]')
447
- self.assert_eval_cmp('""?0ca', '[]')
448
- self.assert_eval_cmp('"a"?0ca', '[0]')
449
- self.assert_eval_cmp('"a"?0cb', '[]')
450
- self.assert_eval_cmp('"b"?0ca', '[]')
451
- self.assert_eval_cmp('"abc"?0cb', '[1]')
452
- self.assert_eval_cmp('"aaa"?0ca', '[0 1 2]')
453
- self.assert_eval_cmp('"abcabcabc"?0cc', '[2 5 8]')
454
- self.assert_eval_cmp('""?""', '[0]')
455
- self.assert_eval_cmp('""?"a"', '[]')
456
- self.assert_eval_cmp('"a"?"a"', '[0]')
457
- self.assert_eval_cmp('"a"?"b"', '[]')
458
- self.assert_eval_cmp('"b"?"a"', '[]')
459
- self.assert_eval_cmp('"abc"?"b"', '[1]')
460
- self.assert_eval_cmp('"aaa"?"a"', '[0 1 2]')
461
- self.assert_eval_cmp('"abcabcabc"?"abc"', '[0 3 6]')
462
- self.assert_eval_cmp('"abbbbbbbc"?"bbb"', '[1 2 3 4 5]')
463
- self.assert_eval_cmp(':{}?:foo', '1%0')
464
- self.assert_eval_cmp(':{[:foo :bar]}?:foo', ':bar')
465
- self.assert_eval_cmp(':{[:foo :bar]}?:bar', '1%0')
466
- self.assert_eval_cmp(':{[:foo :bar]}?123', '1%0')
467
-
468
- def test_format2(self):
469
- self.assert_eval_cmp('0$0', '"0"')
470
- self.assert_eval_cmp('0$123', '"123"')
471
- self.assert_eval_cmp('0$-123', '"-123"')
472
- self.assert_eval_cmp('0$1.23', '"1.23"')
473
- self.assert_eval_cmp('0$-1.23', '"-1.23"')
474
- self.assert_eval_cmp('10$0', '"0 "')
475
- self.assert_eval_cmp('10$123', '"123 "')
476
- self.assert_eval_cmp('10$-123', '"-123 "')
477
- self.assert_eval_cmp('10$1.23', '"1.23 "')
478
- self.assert_eval_cmp('10$-1.23', '"-1.23 "')
479
- self.assert_eval_cmp('3$123', '"123"')
480
- self.assert_eval_cmp('4$123', '"123 "')
481
- self.assert_eval_cmp('4$-123', '"-123"')
482
- self.assert_eval_cmp('5$-123', '"-123 "')
483
- self.assert_eval_cmp('4$1.23', '"1.23"')
484
- self.assert_eval_cmp('5$1.23', '"1.23 "')
485
- self.assert_eval_cmp('5$-1.23', '"-1.23"')
486
- self.assert_eval_cmp('6$-1.23', '"-1.23 "')
487
- self.assert_eval_cmp('(-10)$0', '" 0"')
488
- self.assert_eval_cmp('(-10)$123', '" 123"')
489
- self.assert_eval_cmp('(-10)$-123', '" -123"')
490
- self.assert_eval_cmp('(-10)$1.23', '" 1.23"')
491
- self.assert_eval_cmp('(-10)$-1.23', '" -1.23"')
492
- self.assert_eval_cmp('(-3)$123', '"123"')
493
- self.assert_eval_cmp('(-4)$123', '" 123"')
494
- self.assert_eval_cmp('(-4)$-123', '"-123"')
495
- self.assert_eval_cmp('(-5)$-123', '" -123"')
496
- self.assert_eval_cmp('(-4)$1.23', '"1.23"')
497
- self.assert_eval_cmp('(-5)$1.23', '" 1.23"')
498
- self.assert_eval_cmp('(-5)$-1.23', '"-1.23"')
499
- self.assert_eval_cmp('(-6)$-1.23', '" -1.23"')
500
- self.assert_eval_cmp('0$"test"', '"test"')
501
- self.assert_eval_cmp('4$"test"', '"test"')
502
- self.assert_eval_cmp('5$"test"', '"test "')
503
- self.assert_eval_cmp('10$"test"', '"test "')
504
- self.assert_eval_cmp('(-4)$"test"', '"test"')
505
- self.assert_eval_cmp('(-5)$"test"', '" test"')
506
- self.assert_eval_cmp('(-10)$"test"', '" test"')
507
- self.assert_eval_cmp('4$:foo', '":foo"')
508
- self.assert_eval_cmp('5$:foo', '":foo "')
509
- self.assert_eval_cmp('10$:foo', '":foo "')
510
- self.assert_eval_cmp('(-4)$:foo', '":foo"')
511
- self.assert_eval_cmp('(-5)$:foo', '" :foo"')
512
- self.assert_eval_cmp('(-10)$:foo', '" :foo"')
513
- self.assert_eval_cmp('0.0$123.45', '"123.45"')
514
- self.assert_eval_cmp('3.2$123.45', '"123.45"')
515
- self.assert_eval_cmp('4.2$123.45', '" 123.45"')
516
- self.assert_eval_cmp('3.3$123.45', '"123.450"')
517
- self.assert_eval_cmp('5.3$123.45', '" 123.450"')
518
- self.assert_eval_cmp('0.0$-123.45', '"-123.45"')
519
- self.assert_eval_cmp('4.2$-123.45', '"-123.45"')
520
- self.assert_eval_cmp('5.2$-123.45', '" -123.45"')
521
- self.assert_eval_cmp('4.3$-123.45', '"-123.450"')
522
- self.assert_eval_cmp('6.3$-123.45', '" -123.450"')
523
-
524
- def test_form(self):
525
- self.assert_eval_cmp('0:$""', '1.0%0')
526
- self.assert_eval_cmp('0.0:$""', '1.0%0')
527
- self.assert_eval_cmp(':x:$""', '1.0%0')
528
- self.assert_eval_cmp('"":$""', '""')
529
- self.assert_eval_cmp('0:$"123"', '123')
530
- self.assert_eval_cmp('0:$"-123"', '-123')
531
- self.assert_eval_cmp('0:$"1.23"', '1.0%0')
532
- self.assert_eval_cmp('0:$"-1.23"', '1.0%0')
533
- self.assert_eval_cmp('0.0:$"123"', '123.0')
534
- self.assert_eval_cmp('0.0:$"-123"', '-123.0')
535
- self.assert_eval_cmp('0.0:$"1.23"', '1.23')
536
- self.assert_eval_cmp('0.0:$"-1.23"', '-1.23')
537
- self.assert_eval_cmp(':x:$"foo"', ':foo')
538
- self.assert_eval_cmp(':x:$":foo"', ':foo')
539
- self.assert_eval_cmp('0c0:$""', '1.0%0')
540
- self.assert_eval_cmp('0c0:$"x"', '0cx')
541
- self.assert_eval_cmp('0c0:$"xx"', '1.0%0')
542
- self.assert_eval_cmp('"":$"foo bar baz"', '"foo bar baz"')
543
-
544
- def test_at___index(self):
545
- self.assert_eval_cmp('[]@[]', '[]')
546
- self.assert_eval_cmp('[1]@[]', '[]')
547
- self.assert_eval_cmp('[1]@0', '1')
548
- self.assert_eval_cmp('[1]@[0]', '[1]')
549
- self.assert_eval_cmp('[1]@[0 0 0]', '[1 1 1]')
550
- self.assert_eval_cmp('(!10)@[1 3 5 9]', '[1 3 5 9]')
551
- self.assert_eval_cmp('(!10)@!10', '[0 1 2 3 4 5 6 7 8 9]')
552
- self.assert_eval_cmp('[[1] [2] [3]]@[0 1 2]', '[[1] [2] [3]]')
553
- self.assert_eval_cmp('""@[]', '""')
554
- self.assert_eval_cmp('"x"@[]', '""')
555
- self.assert_eval_cmp('"x"@0', '0cx')
556
- self.assert_eval_cmp('"x"@[0]', '"x"')
557
- self.assert_eval_cmp('"x"@[0 0 0]', '"xxx"')
558
- self.assert_eval_cmp('"abcdefghij"@[1 3 5 9]', '"bdfj"')
559
- self.assert_eval_cmp('"abcdefghi"@!9', '"abcdefghi"')
560
-
561
- def test_at___index_2(self):
562
- self.assert_eval_cmp('{123}@[]', '123')
563
- self.assert_eval_cmp('{x}@[456]', '456')
564
- self.assert_eval_cmp('{x+y}@[5 7]', '12')
565
- self.assert_eval_cmp('{x+y+z}@[5 7 9]', '21')
566
-
567
- def test_join(self):
568
- self.assert_eval_cmp('0,1', '[0 1]')
569
- self.assert_eval_cmp('[],[]', '[]')
570
- self.assert_eval_cmp('[0],[]', '[0]')
571
- self.assert_eval_cmp('[],[1]', '[1]')
572
- self.assert_eval_cmp('[0],[1]', '[0 1]')
573
- self.assert_eval_cmp('[[0]],[1]', '[[0] 1]')
574
- self.assert_eval_cmp('[0],[[1]]', '[0 [1]]')
575
- self.assert_eval_cmp('[1 2 3],4', '[1 2 3 4]')
576
- self.assert_eval_cmp('1,[2 3 4]', '[1 2 3 4]')
577
- self.assert_eval_cmp('[1 2 3],[4 5 6]', '[1 2 3 4 5 6]')
578
- self.assert_eval_cmp('"",""', '""')
579
- self.assert_eval_cmp('"a",""', '"a"')
580
- self.assert_eval_cmp('"","b"', '"b"')
581
- self.assert_eval_cmp('"a","b"', '"ab"')
582
- self.assert_eval_cmp('"abc",0cd', '"abcd"')
583
- self.assert_eval_cmp('0ca,"bcd"', '"abcd"')
584
- self.assert_eval_cmp('"abc","def"', '"abcdef"')
585
- self.assert_eval_cmp('["abc"],"def"', '["abc" "def"]')
586
- self.assert_eval_cmp('"abc",["def"]', '["abc" "def"]')
587
- self.assert_eval_cmp('["abc"],["def"]', '["abc" "def"]')
588
-
589
- def test_less(self):
590
- self.assert_eval_cmp('0<0', '0')
591
- self.assert_eval_cmp('0<1', '1')
592
- self.assert_eval_cmp('1<0', '0')
593
- self.assert_eval_cmp('1<1', '0')
594
- self.assert_eval_cmp('(-1)<0', '1')
595
- self.assert_eval_cmp('(-1)<1', '1')
596
- self.assert_eval_cmp('(-1)<-1', '0')
597
- self.assert_eval_cmp('0<-1', '0')
598
- self.assert_eval_cmp('1<-1', '0')
599
- self.assert_eval_cmp('1.23<4.56', '1')
600
- self.assert_eval_cmp('(-1.23)<4.56', '1')
601
- self.assert_eval_cmp('1.23<-4.56', '0')
602
- self.assert_eval_cmp('(-1.23)<-4.56', '0')
603
- self.assert_eval_cmp('4.56<1.23', '0')
604
- self.assert_eval_cmp('(-4.56)<1.23', '1')
605
- self.assert_eval_cmp('4.56<-1.23', '0')
606
- self.assert_eval_cmp('(-4.56)<-1.23', '1')
607
- self.assert_eval_cmp('123<123.0', '0')
608
- self.assert_eval_cmp('123<123.1', '1')
609
- self.assert_eval_cmp('123.0<123', '0')
610
- self.assert_eval_cmp('123.1<123', '0')
611
- self.assert_eval_cmp('123<123', '0')
612
- self.assert_eval_cmp('0ca<0ca', '0')
613
- self.assert_eval_cmp('0ca<0cz', '1')
614
- self.assert_eval_cmp('0cz<0ca', '0')
615
- self.assert_eval_cmp('""<""', '0')
616
- self.assert_eval_cmp('"a"<"a"', '0')
617
- self.assert_eval_cmp('"a"<"b"', '1')
618
- self.assert_eval_cmp('"b"<"a"', '0')
619
- self.assert_eval_cmp('"b"<"b"', '0')
620
- self.assert_eval_cmp('"test"<"test"', '0')
621
- self.assert_eval_cmp('"tesz"<"test"', '0')
622
- self.assert_eval_cmp('"test"<"tesz"', '1')
623
- self.assert_eval_cmp('"tests"<"test"', '0')
624
- self.assert_eval_cmp('"test"<"tests"', '1')
625
- self.assert_eval_cmp(':foo<:foo', '0')
626
- self.assert_eval_cmp(':foo<:bar', '0')
627
- self.assert_eval_cmp(':bar<:foo', '1')
628
- self.assert_eval_cmp(':foo<:fob', '0')
629
- self.assert_eval_cmp(':fob<:foo', '1')
630
- self.assert_eval_cmp(':foo<:fooo', '1')
631
- self.assert_eval_cmp(':fooo<:foo', '0')
632
- self.assert_eval_cmp('[1 [3] 5]<[2 [3] 4]', '[1 [0] 0]')
633
-
634
- def test_match(self):
635
- self.assert_eval_cmp('0~0', '1')
636
- self.assert_eval_cmp('1~1', '1')
637
- self.assert_eval_cmp('123~123', '1')
638
- self.assert_eval_cmp('1.23~1.23', '1')
639
- self.assert_eval_cmp('(-1)~-1', '1')
640
- self.assert_eval_cmp('(-123)~-123', '1')
641
- self.assert_eval_cmp('(-1.23)~-1.23', '1')
642
- self.assert_eval_cmp('123.0~123', '1')
643
- self.assert_eval_cmp('123~123.0', '1')
644
- self.assert_eval_cmp('0~1', '0')
645
- self.assert_eval_cmp('1~0', '0')
646
- self.assert_eval_cmp('123~-123', '0')
647
- self.assert_eval_cmp('(-123)~123', '0')
648
- self.assert_eval_cmp('1.23~123', '0')
649
- self.assert_eval_cmp('123~1.23', '0')
650
- self.assert_eval_cmp('""~""', '1')
651
- self.assert_eval_cmp('"x"~"x"', '1')
652
- self.assert_eval_cmp('"x"~"y"', '0')
653
- self.assert_eval_cmp('"y"~"x"', '0')
654
- self.assert_eval_cmp('"test"~"test"', '1')
655
- self.assert_eval_cmp('"test"~"tesz"', '0')
656
- self.assert_eval_cmp('"tesz"~"test"', '0')
657
- self.assert_eval_cmp('"test"~"tes"', '0')
658
- self.assert_eval_cmp('"tes"~"test"', '0')
659
- self.assert_eval_cmp(':foo~:foo', '1')
660
- self.assert_eval_cmp(':foo~:bar', '0')
661
- self.assert_eval_cmp(':bar~:foo', '0')
662
- self.assert_eval_cmp(':foo~:fob', '0')
663
- self.assert_eval_cmp(':fob~:foo', '0')
664
- self.assert_eval_cmp(':foo~:fo', '0')
665
- self.assert_eval_cmp(':fo~:foo', '0')
666
- self.assert_eval_cmp('[1 2 3]~[1 2 3]', '1')
667
- self.assert_eval_cmp('[1 2 3]~[0 2 3]', '0')
668
- self.assert_eval_cmp('[1 2 3]~[1 0 3]', '0')
669
- self.assert_eval_cmp('[1 2 3]~[1 2 0]', '0')
670
- self.assert_eval_cmp('[1 [2 [:x]]]~[1 [2 [:x]]]', '1')
671
- self.assert_eval_cmp('[1 [0 [:x]]]~[1 [2 [:x]]]', '0')
672
- self.assert_eval_cmp('[0 [2 [:x]]]~[1 [2 [:x]]]', '0')
673
- self.assert_eval_cmp('[1 [2 [:y]]]~[1 [2 [:x]]]', '0')
674
- self.assert_eval_cmp(':{[1 2] [3 4]}~:{[1 2] [3 4]}', '1')
675
- self.assert_eval_cmp(':{[1 2] [3 4]}~:{[3 4] [1 2]}', '1')
676
- self.assert_eval_cmp(':{[1 2] [3 4]}~:{[1 2] [0 4]}', '0')
677
- self.assert_eval_cmp(':{[1 2] [3 4]}~:{[1 0] [3 4]}', '0')
678
- self.assert_eval_cmp(':{[1 2]}~:{[1 2] [3 4]}', '0')
679
- self.assert_eval_cmp(':{[1 2] [3 4]}~:{[3 4]}', '0')
680
- self.assert_eval_cmp('123~:foo', '0')
681
- self.assert_eval_cmp('123~"123"', '0')
682
- self.assert_eval_cmp('123~[1 2 3]', '0')
683
- self.assert_eval_cmp('123~:{[123 456]}', '0')
684
- self.assert_eval_cmp(':foo~123', '0')
685
- self.assert_eval_cmp('"123"~123', '0')
686
- self.assert_eval_cmp('[1 2 3]~123', '0')
687
- self.assert_eval_cmp(':{[123 456]}~123', '0')
688
- self.assert_eval_cmp(':foo~"foo"', '0')
689
- self.assert_eval_cmp(':foo~[f o o]', '0')
690
- self.assert_eval_cmp(':foo~:{[:foo :bar]}', '0')
691
- self.assert_eval_cmp('"foo"~:foo', '0')
692
- self.assert_eval_cmp('[f o o]~:foo', '0')
693
- self.assert_eval_cmp(':{[:foo bar]}~:foo', '0')
694
- self.assert_eval_cmp('[1 2 3]~"123"', '0')
695
- self.assert_eval_cmp('[1 2 3]~:{[1 2]}', '0')
696
- self.assert_eval_cmp('"123"~[1 2 3]', '0')
697
- self.assert_eval_cmp(':{[1 2]}~[1 2]', '0')
698
- self.assert_eval_cmp('"12"~:{[1 2]}', '0')
699
- self.assert_eval_cmp(':{[1 2]}~"12"', '0')
700
-
701
- def test_max(self):
702
- self.assert_eval_cmp('0|0', '0')
703
- self.assert_eval_cmp('0|1', '1')
704
- self.assert_eval_cmp('1|0', '1')
705
- self.assert_eval_cmp('1|1', '1')
706
- self.assert_eval_cmp('123|456', '456')
707
- self.assert_eval_cmp('123|-456', '123')
708
- self.assert_eval_cmp('(-123)|456', '456')
709
- self.assert_eval_cmp('(-123)|-456', '-123')
710
- self.assert_eval_cmp('456|123', '456')
711
- self.assert_eval_cmp('456|-123', '456')
712
- self.assert_eval_cmp('(-456)|123', '123')
713
- self.assert_eval_cmp('(-456)|-123', '-123')
714
- self.assert_eval_cmp('1.23|4.56', '4.56')
715
- self.assert_eval_cmp('1.23|-4.56', '1.23')
716
- self.assert_eval_cmp('(-1.23)|4.56', '4.56')
717
- self.assert_eval_cmp('(-1.23)|-4.56', '-1.23')
718
- self.assert_eval_cmp('4.56|1.23', '4.56')
719
- self.assert_eval_cmp('4.56|-1.23', '4.56')
720
- self.assert_eval_cmp('(-4.56)|1.23', '1.23')
721
- self.assert_eval_cmp('(-4.56)|-1.23', '-1.23')
722
- self.assert_eval_cmp('123|123.1', '123.1')
723
- self.assert_eval_cmp('123.1|123', '123.1')
724
- self.assert_eval_cmp('[1 2 3 4]|2', '[2 2 3 4]')
725
- self.assert_eval_cmp('2|[1 2 3 4]', '[2 2 3 4]')
726
- self.assert_eval_cmp('[1 5 3]|[4 2 6]', '[4 5 6]')
727
- self.assert_eval_cmp('[1 [2] 3]|2', '[2 [2] 3]')
728
-
729
- def test_min(self):
730
- self.assert_eval_cmp('0&0', '0')
731
- self.assert_eval_cmp('0&1', '0')
732
- self.assert_eval_cmp('1&0', '0')
733
- self.assert_eval_cmp('1&1', '1')
734
- self.assert_eval_cmp('123&456', '123')
735
- self.assert_eval_cmp('123&-456', '-456')
736
- self.assert_eval_cmp('(-123)&456', '-123')
737
- self.assert_eval_cmp('(-123)&-456', '-456')
738
- self.assert_eval_cmp('456&123', '123')
739
- self.assert_eval_cmp('456&-123', '-123')
740
- self.assert_eval_cmp('(-456)&123', '-456')
741
- self.assert_eval_cmp('(-456)&-123', '-456')
742
- self.assert_eval_cmp('1.23&4.56', '1.23')
743
- self.assert_eval_cmp('1.23&-4.56', '-4.56')
744
- self.assert_eval_cmp('(-1.23)&4.56', '-1.23')
745
- self.assert_eval_cmp('(-1.23)&-4.56', '-4.56')
746
- self.assert_eval_cmp('4.56&1.23', '1.23')
747
- self.assert_eval_cmp('4.56&-1.23', '-1.23')
748
- self.assert_eval_cmp('(-4.56)&1.23', '-4.56')
749
- self.assert_eval_cmp('(-4.56)&-1.23', '-4.56')
750
- self.assert_eval_cmp('123&123.1', '123')
751
- self.assert_eval_cmp('123.1&123', '123')
752
- self.assert_eval_cmp('[1 2 3 4]&2', '[1 2 2 2]')
753
- self.assert_eval_cmp('2&[1 2 3 4]', '[1 2 2 2]')
754
- self.assert_eval_cmp('[1 5 3]&[4 2 6]', '[1 2 3]')
755
- self.assert_eval_cmp('[1 [2] 3]&2', '[1 [2] 2]')
756
-
757
- def test_minus(self):
758
- self.assert_eval_cmp('0-0', '0')
759
- self.assert_eval_cmp('0-1', '-1')
760
- self.assert_eval_cmp('1-0', '1')
761
- self.assert_eval_cmp('1-1', '0')
762
- self.assert_eval_cmp('456-123', '333')
763
- self.assert_eval_cmp('456--123', '579')
764
- self.assert_eval_cmp('(-456)-123', '-579')
765
- self.assert_eval_cmp('(-456)--123', '-333')
766
- self.assert_eval_cmp('123-456', '-333')
767
- self.assert_eval_cmp('123--456', '579')
768
- self.assert_eval_cmp('(-123)-456', '-579')
769
- self.assert_eval_cmp('(-123)--456', '333')
770
- self.assert_eval_cmp('4.56-1.23', '3.33')
771
- self.assert_eval_cmp('4.56--1.23', '5.79')
772
- self.assert_eval_cmp('(-4.56)-1.23', '-5.79')
773
- self.assert_eval_cmp('(-4.56)--1.23', '-3.33')
774
- self.assert_eval_cmp('1.23-4.56', '-3.33')
775
- self.assert_eval_cmp('1.23--4.56', '5.79')
776
- self.assert_eval_cmp('(-1.23)-4.56', '-5.79')
777
- self.assert_eval_cmp('(-1.23)--4.56', '3.33')
778
- self.assert_eval_cmp('[1 2 3 4]-1', '[0 1 2 3]')
779
- self.assert_eval_cmp('1-[1 2 3 4]', '[0 -1 -2 -3]')
780
- self.assert_eval_cmp('[1 2 3]-[4 5 6]', '[-3 -3 -3]')
781
- self.assert_eval_cmp('[1 [2] 3]-1', '[0 [1] 2]')
782
-
783
- def test_more(self):
784
- self.assert_eval_cmp('0>0', '0')
785
- self.assert_eval_cmp('0>1', '0')
786
- self.assert_eval_cmp('1>0', '1')
787
- self.assert_eval_cmp('1>1', '0')
788
- self.assert_eval_cmp('(-1)>0', '0')
789
- self.assert_eval_cmp('(-1)>1', '0')
790
- self.assert_eval_cmp('(-1)>-1', '0')
791
- self.assert_eval_cmp('0>-1', '1')
792
- self.assert_eval_cmp('1>-1', '1')
793
- self.assert_eval_cmp('1.23>4.56', '0')
794
- self.assert_eval_cmp('(-1.23)>4.56', '0')
795
- self.assert_eval_cmp('1.23>-4.56', '1')
796
- self.assert_eval_cmp('(-1.23)>-4.56', '1')
797
- self.assert_eval_cmp('4.56>1.23', '1')
798
- self.assert_eval_cmp('(-4.56)>1.23', '0')
799
- self.assert_eval_cmp('4.56>-1.23', '1')
800
- self.assert_eval_cmp('(-4.56)>-1.23', '0')
801
- self.assert_eval_cmp('123>123.0', '0')
802
- self.assert_eval_cmp('123>123.1', '0')
803
- self.assert_eval_cmp('123.0>123', '0')
804
- self.assert_eval_cmp('123.1>123', '1')
805
- self.assert_eval_cmp('123>123', '0')
806
- self.assert_eval_cmp('0ca>0ca', '0')
807
- self.assert_eval_cmp('0ca>0cz', '0')
808
- self.assert_eval_cmp('0cz>0ca', '1')
809
- self.assert_eval_cmp('"">""', '0')
810
- self.assert_eval_cmp('"a">"a"', '0')
811
- self.assert_eval_cmp('"a">"b"', '0')
812
- self.assert_eval_cmp('"b">"a"', '1')
813
- self.assert_eval_cmp('"b">"b"', '0')
814
- self.assert_eval_cmp('"test">"test"', '0')
815
- self.assert_eval_cmp('"tesz">"test"', '1')
816
- self.assert_eval_cmp('"test">"tesz"', '0')
817
- self.assert_eval_cmp('"tests">"test"', '1')
818
- self.assert_eval_cmp('"test">"tests"', '0')
819
- self.assert_eval_cmp(':foo>:foo', '0')
820
- self.assert_eval_cmp(':foo>:bar', '1')
821
- self.assert_eval_cmp(':bar>:foo', '0')
822
- self.assert_eval_cmp(':foo>:fob', '1')
823
- self.assert_eval_cmp(':fob>:foo', '0')
824
- self.assert_eval_cmp(':foo>:fooo', '0')
825
- self.assert_eval_cmp(':fooo>:foo', '1')
826
- self.assert_eval_cmp('[1 [3] 5]>[2 [3] 4]', '[0 [0] 1]')
827
-
828
- def test_plus(self):
829
- self.assert_eval_cmp('0+0', '0')
830
- self.assert_eval_cmp('0+1', '1')
831
- self.assert_eval_cmp('1+0', '1')
832
- self.assert_eval_cmp('1+1', '2')
833
- self.assert_eval_cmp('456+123', '579')
834
- self.assert_eval_cmp('456+-123', '333')
835
- self.assert_eval_cmp('(-456)+123', '-333')
836
- self.assert_eval_cmp('(-456)+-123', '-579')
837
- self.assert_eval_cmp('123+456', '579')
838
- self.assert_eval_cmp('123+-456', '-333')
839
- self.assert_eval_cmp('(-123)+456', '333')
840
- self.assert_eval_cmp('(-123)+-456', '-579')
841
- self.assert_eval_cmp('4.56+1.23', '5.79')
842
- self.assert_eval_cmp('4.56+-1.23', '3.33')
843
- self.assert_eval_cmp('(-4.56)+1.23', '-3.33')
844
- self.assert_eval_cmp('(-4.56)+-1.23', '-5.79')
845
- self.assert_eval_cmp('1.23+4.56', '5.79')
846
- self.assert_eval_cmp('1.23+-4.56', '-3.33')
847
- self.assert_eval_cmp('(-1.23)+4.56', '3.33')
848
- self.assert_eval_cmp('(-1.23)+-4.56', '-5.79')
849
- self.assert_eval_cmp('[1 2 3 4]+1', '[2 3 4 5]')
850
- self.assert_eval_cmp('1+[1 2 3 4]', '[2 3 4 5]')
851
- self.assert_eval_cmp('[1 2 3]+[4 5 6]', '[5 7 9]')
852
- self.assert_eval_cmp('[1 [2] 3]+1', '[2 [3] 4]')
853
-
854
- def test_power(self):
855
- self.assert_eval_cmp('(:_0^0)|1~0^0', '1')
856
- self.assert_eval_cmp('0^1', '0')
857
- self.assert_eval_cmp('0^2', '0')
858
- self.assert_eval_cmp('0^3', '0')
859
- self.assert_eval_cmp('1^0', '1')
860
- self.assert_eval_cmp('1^1', '1')
861
- self.assert_eval_cmp('1^2', '1')
862
- self.assert_eval_cmp('1^3', '1')
863
- self.assert_eval_cmp('2^0', '1')
864
- self.assert_eval_cmp('2^1', '2')
865
- self.assert_eval_cmp('2^2', '4')
866
- self.assert_eval_cmp('2^3', '8')
867
- self.assert_eval_cmp('2^-1', '0.5')
868
- self.assert_eval_cmp('2^-2', '0.25')
869
- self.assert_eval_cmp('2^-3', '0.125')
870
- self.assert_eval_cmp('(-1)^0', '1')
871
- self.assert_eval_cmp('(-1)^1', '-1')
872
- self.assert_eval_cmp('(-1)^2', '1')
873
- self.assert_eval_cmp('(-1)^3', '-1')
874
- self.assert_eval_cmp('(-2)^0', '1')
875
- self.assert_eval_cmp('(-2)^1', '-2')
876
- self.assert_eval_cmp('(-2)^2', '4')
877
- self.assert_eval_cmp('(-2)^3', '-8')
878
- self.assert_eval_cmp('(-1)^-1', '-1')
879
- self.assert_eval_cmp('(-1)^-2', '1')
880
- self.assert_eval_cmp('(-1)^-3', '-1')
881
- self.assert_eval_cmp('(-2)^-1', '-0.5')
882
- self.assert_eval_cmp('(-2)^-2', '0.25')
883
- self.assert_eval_cmp('(-2)^-3', '-0.125')
884
- self.assert_eval_cmp('[1 2 [3] 4 5]^2', '[1 4 [9] 16 25]')
885
- self.assert_eval_cmp('2^[1 2 [3] 4 5]', '[2 4 [8] 16 32]')
886
- self.assert_eval_cmp('1^0.5', '1')
887
- self.assert_eval_test('t("4^0.5" ; rndn(4^0.5;10) ; 2)' )
888
- self.assert_eval_test('t("16^0.25" ; rndn(16^0.25;10) ; 2)' )
889
- self.assert_eval_test('t("256^0.125" ; rndn(256^0.125;10) ; 2)' )
890
-
891
- def test_rotate(self):
892
- self.assert_eval_cmp('0:+0', '0')
893
- self.assert_eval_cmp('1:+0', '0')
894
- self.assert_eval_cmp('2:+0', '0')
895
- self.assert_eval_cmp('(-1):+0', '0')
896
- self.assert_eval_cmp('(-2):+0', '0')
897
- self.assert_eval_cmp('0:+[]', '[]')
898
- self.assert_eval_cmp('1:+[]', '[]')
899
- self.assert_eval_cmp('2:+[]', '[]')
900
- self.assert_eval_cmp('(-2):+[]', '[]')
901
- self.assert_eval_cmp('(-1):+[]', '[]')
902
- self.assert_eval_cmp('0:+[1]', '[1]')
903
- self.assert_eval_cmp('1:+[1]', '[1]')
904
- self.assert_eval_cmp('2:+[1]', '[1]')
905
- self.assert_eval_cmp('(-2):+[1]', '[1]')
906
- self.assert_eval_cmp('(-1):+[1]', '[1]')
907
- self.assert_eval_cmp('0:+!5', '[0 1 2 3 4]')
908
- self.assert_eval_cmp('1:+!5', '[4 0 1 2 3]')
909
- self.assert_eval_cmp('2:+!5', '[3 4 0 1 2]')
910
- self.assert_eval_cmp('(-2):+!5', '[2 3 4 0 1]')
911
- self.assert_eval_cmp('(-1):+!5', '[1 2 3 4 0]')
912
- self.assert_eval_cmp('5:+!5', '[0 1 2 3 4]')
913
- self.assert_eval_cmp('(-5):+!5', '[0 1 2 3 4]')
914
- self.assert_eval_cmp('12:+!5', '[3 4 0 1 2]')
915
- self.assert_eval_cmp('(-12):+!5', '[2 3 4 0 1]')
916
- self.assert_eval_cmp('0:+""', '""')
917
- self.assert_eval_cmp('1:+""', '""')
918
- self.assert_eval_cmp('2:+""', '""')
919
- self.assert_eval_cmp('(-1):+""', '""')
920
- self.assert_eval_cmp('(-2):+""', '""')
921
- self.assert_eval_cmp('0:+"x"', '"x"')
922
- self.assert_eval_cmp('1:+"x"', '"x"')
923
- self.assert_eval_cmp('2:+"x"', '"x"')
924
- self.assert_eval_cmp('(-1):+"x"', '"x"')
925
- self.assert_eval_cmp('(-2):+"x"', '"x"')
926
- self.assert_eval_cmp('0:+"abcdef"', '"abcdef"')
927
- self.assert_eval_cmp('1:+"abcdef"', '"fabcde"')
928
- self.assert_eval_cmp('2:+"abcdef"', '"efabcd"')
929
- self.assert_eval_cmp('(-1):+"abcdef"', '"bcdefa"')
930
- self.assert_eval_cmp('(-2):+"abcdef"', '"cdefab"')
931
- self.assert_eval_cmp('8:+"abcdef"', '"efabcd"')
932
- self.assert_eval_cmp('(-8):+"abcdef"', '"cdefab"')
933
-
934
- def test_remainder(self):
935
- self.assert_eval_cmp('0!1', '0')
936
- self.assert_eval_cmp('1!1', '0')
937
- self.assert_eval_cmp('2!1', '0')
938
- self.assert_eval_cmp('1!2', '1')
939
- self.assert_eval_cmp('17!5', '2')
940
- self.assert_eval_cmp('(-17)!5', '-2')
941
- self.assert_eval_cmp('17!-5', '2')
942
- self.assert_eval_cmp('(-17)!-5', '-2')
943
- self.assert_eval_cmp('246!123', '0')
944
- self.assert_eval_cmp('123!123', '0')
945
-
946
- def test_take(self):
947
- self.assert_eval_cmp('0#[]', '[]')
948
- self.assert_eval_cmp('1#[]', '[]')
949
- self.assert_eval_cmp('3#[]', '[]')
950
- self.assert_eval_cmp('0#[1]', '[]')
951
- self.assert_eval_cmp('1#[1]', '[1]')
952
- self.assert_eval_cmp('3#[1]', '[1 1 1]')
953
- self.assert_eval_cmp('(-1)#[1]', '[1]')
954
- self.assert_eval_cmp('(-3)#[1]', '[1 1 1]')
955
- self.assert_eval_cmp('0#!5', '[]')
956
- self.assert_eval_cmp('1#!5', '[0]')
957
- self.assert_eval_cmp('5#!5', '[0 1 2 3 4]')
958
- self.assert_eval_cmp('9#!5', '[0 1 2 3 4 0 1 2 3]')
959
- self.assert_eval_cmp('(-1)#!5', '[4]')
960
- self.assert_eval_cmp('(-3)#!5', '[2 3 4]')
961
- self.assert_eval_cmp('(-7)#!5', '[3 4 0 1 2 3 4]')
962
- self.assert_eval_cmp('0#""', '""')
963
- self.assert_eval_cmp('1#""', '""')
964
- self.assert_eval_cmp('3#""', '""')
965
- self.assert_eval_cmp('0#"x"', '""')
966
- self.assert_eval_cmp('1#"x"', '"x"')
967
- self.assert_eval_cmp('3#"x"', '"xxx"')
968
- self.assert_eval_cmp('(-1)#"x"', '"x"')
969
- self.assert_eval_cmp('(-3)#"x"', '"xxx"')
970
- self.assert_eval_cmp('0#"abcdef"', '""')
971
- self.assert_eval_cmp('1#"abcdef"', '"a"')
972
- self.assert_eval_cmp('3#"abcdef"', '"abc"')
973
- self.assert_eval_cmp('10#"abcdef"', '"abcdefabcd"')
974
- self.assert_eval_cmp('(-1)#"abcdef"', '"f"')
975
- self.assert_eval_cmp('(-3)#"abcdef"', '"def"')
976
- self.assert_eval_cmp('(-9)#"abcdef"', '"defabcdef"')
977
-
978
- def test_reshape(self):
979
- self.assert_eval_cmp('0:^1', '1')
980
- self.assert_eval_cmp('0:^[]', '[]')
981
- self.assert_eval_cmp('0:^[1 2 3]', '[1 2 3]')
982
- self.assert_eval_cmp('1:^1', '[1]')
983
- self.assert_eval_cmp('2:^1', '[1 1]')
984
- self.assert_eval_cmp('5:^1', '[1 1 1 1 1]')
985
- self.assert_eval_cmp('[1]:^1', '[1]')
986
- self.assert_eval_cmp('[2]:^1', '[1 1]')
987
- self.assert_eval_cmp('[5]:^1', '[1 1 1 1 1]')
988
- self.assert_eval_cmp('[1 1]:^1', '[[1]]')
989
- self.assert_eval_cmp('[1 1 1]:^1', '[[[1]]]')
990
- self.assert_eval_cmp('[2 2 2]:^1', '[[[1 1] [1 1]] [[1 1] [1 1]]]')
991
- self.assert_eval_cmp('1:^!10', '[0]')
992
- self.assert_eval_cmp('3:^!10', '[0 1 2]')
993
- self.assert_eval_cmp('[3]:^!10', '[0 1 2]')
994
- self.assert_eval_cmp('[3 3]:^!10', '[[0 1 2] [3 4 5] [6 7 8]]')
995
- self.assert_eval_cmp('5:^[[1 2] [3 4]]', '[[1 2] [3 4] [1 2] [3 4] [1 2]]')
996
- self.assert_eval_cmp('[2 2]:^[1 2 3 4]', '[[1 2] [3 4]]')
997
- self.assert_eval_cmp('[3 3]:^[1 2 3 4]', '[[1 2 3] [4 1 2] [3 4 1]]')
998
- self.assert_eval_cmp('[2 -1]:^!8', '[[0 1 2 3] [4 5 6 7]]')
999
- self.assert_eval_cmp('[-1 2]:^!8', '[[0 1] [2 3] [4 5] [6 7]]')
1000
- self.assert_eval_cmp('[2 -1]:^!7', '[[0 1 2] [3 4 5]]')
1001
- self.assert_eval_cmp('[-1 2]:^!7', '[[0 1] [2 3] [4 5]]')
1002
- self.assert_eval_cmp('0:^"foo"', '"foo"')
1003
- self.assert_eval_cmp('1:^"x"', '"x"')
1004
- self.assert_eval_cmp('1:^"xyz"', '"x"')
1005
- self.assert_eval_cmp('3:^"xyz"', '"xyz"')
1006
- self.assert_eval_cmp('[3]:^"xyz"', '"xyz"')
1007
- self.assert_eval_cmp('[3 3]:^"xyz"', '["xyz" "xyz" "xyz"]')
1008
- self.assert_eval_cmp('[5 2]:^"xyz"', '["xy" "zx" "yz" "xy" "zx"]')
1009
- self.assert_eval_cmp('[2 5]:^"xyz"', '["xyzxy" "zxyzx"]')
1010
- self.assert_eval_cmp('[3 -1]:^!10', '[[0 1 2 3 4] [5 6 7 8 9] [0 1 2 3 4]]')
1011
- self.assert_eval_cmp('[-1 3]:^!10', '[[0 1 2] [3 4 5] [6 7 8] [9 0 1] [2 3 4]]')
1012
-
1013
- def test_split(self):
1014
- self.assert_eval_cmp('1:#[]', '[]')
1015
- self.assert_eval_cmp('1:#[1]', '[[1]]')
1016
- self.assert_eval_cmp('1:#[1 2]', '[[1] [2]]')
1017
- self.assert_eval_cmp('1:#[1 2 3]', '[[1] [2] [3]]')
1018
- self.assert_eval_cmp('2:#[1 2 3]', '[[1 2] [3]]')
1019
- self.assert_eval_cmp('3:#[1 2 3]', '[[1 2 3]]')
1020
- self.assert_eval_cmp('4:#[1 2 3]', '[[1 2 3]]')
1021
- self.assert_eval_cmp('[2]:#!10', '[[0 1] [2 3] [4 5] [6 7] [8 9]]')
1022
- self.assert_eval_cmp('[2 3]:#!10', '[[0 1] [2 3 4] [5 6] [7 8 9]]')
1023
- self.assert_eval_cmp('1:#""', '[]')
1024
- self.assert_eval_cmp('1:#"x"', '["x"]')
1025
- self.assert_eval_cmp('1:#"xy"', '["x" "y"]')
1026
- self.assert_eval_cmp('1:#"xyz"', '["x" "y" "z"]')
1027
- self.assert_eval_cmp('2:#"xyz"', '["xy" "z"]')
1028
- self.assert_eval_cmp('3:#"xyz"', '["xyz"]')
1029
- self.assert_eval_cmp('4:#"xyz"', '["xyz"]')
1030
- self.assert_eval_cmp('[2]:#"abcdefghijk"', '["ab" "cd" "ef" "gh" "ij" "k"]')
1031
- self.assert_eval_cmp('[2 3]:#"abcdefghijk"', '["ab" "cde" "fg" "hij" "k"]')
1032
-
1033
- def test_undefined(self):
1034
- self.assert_eval_cmp(':_:foo', '0')
1035
- self.assert_eval_cmp(':_0', '0')
1036
- self.assert_eval_cmp(':_123', '0')
1037
- self.assert_eval_cmp(':_-1', '0')
1038
- self.assert_eval_cmp(':_1.23', '0')
1039
- self.assert_eval_cmp(':_1e5', '0')
1040
- self.assert_eval_cmp(':_""', '0')
1041
- self.assert_eval_cmp(':_"string"', '0')
1042
- self.assert_eval_cmp(':_[]', '0')
1043
- self.assert_eval_cmp(':_[1 2 3]', '0')
1044
- self.assert_eval_cmp(':_{x}', '0')
1045
- self.assert_eval_cmp(':_:{}', '0')
1046
- self.assert_eval_cmp(':_:{[1 2]}', '0')
1047
- self.assert_eval_cmp(':_1.0%0.0', '1')
1048
- self.assert_eval_cmp(':_1.0%0', '1')
1049
- self.assert_eval_cmp(':_1%0.0', '1')
1050
- self.assert_eval_cmp(':_1%0', '1')
1051
- self.assert_eval_cmp(':_:{[1 2]}?3', '1')
1052
-
1053
- def test_times(self):
1054
- self.assert_eval_cmp('0*0', '0')
1055
- self.assert_eval_cmp('0*1', '0')
1056
- self.assert_eval_cmp('1*0', '0')
1057
- self.assert_eval_cmp('1*1', '1')
1058
- self.assert_eval_cmp('456*123', '56088')
1059
- self.assert_eval_cmp('456*-123', '-56088')
1060
- self.assert_eval_cmp('(-456)*123', '-56088')
1061
- self.assert_eval_cmp('(-456)*-123', '56088')
1062
- self.assert_eval_cmp('123*456', '56088')
1063
- self.assert_eval_cmp('123*-456', '-56088')
1064
- self.assert_eval_cmp('(-123)*456', '-56088')
1065
- self.assert_eval_cmp('(-123)*-456', '56088')
1066
- self.assert_eval_cmp('4.56*1.23', '5.6088')
1067
- self.assert_eval_cmp('4.56*-1.23', '-5.6088')
1068
- self.assert_eval_cmp('(-4.56)*1.23', '-5.6088')
1069
- self.assert_eval_cmp('(-4.56)*-1.23', '5.6088')
1070
- self.assert_eval_cmp('1.23*4.56', '5.6088')
1071
- self.assert_eval_cmp('1.23*-4.56', '-5.6088')
1072
- self.assert_eval_cmp('(-1.23)*4.56', '-5.6088')
1073
- self.assert_eval_cmp('(-1.23)*-4.56', '5.6088')
1074
- self.assert_eval_cmp('[1 2 3 4]*3', '[3 6 9 12]')
1075
- self.assert_eval_cmp('3*[1 2 3 4]', '[3 6 9 12]')
1076
- self.assert_eval_cmp('[1 2 3]*[4 5 6]', '[4 10 18]')
1077
- self.assert_eval_cmp('[1 [2] 3]*3', '[3 [6] 9]')
1078
-
1079
- def test_each(self):
1080
- klong = create_test_klong()
1081
- klong('D:::{[1 2] [3 4] [5 6]}')
1082
- self.assert_eval_cmp(",'[]", '[]', klong=klong)
1083
- self.assert_eval_cmp(",'[1]", '[[1]]', klong=klong)
1084
- self.assert_eval_cmp(",'[1 2 3]", '[[1] [2] [3]]', klong=klong)
1085
- klong('f::{x*x}')
1086
- self.assert_eval_cmp("f'[]", '[]', klong=klong)
1087
- self.assert_eval_cmp("f'[2]", '[4]', klong=klong)
1088
- self.assert_eval_cmp("f'[2 3 4]", '[4 9 16]', klong=klong)
1089
- self.assert_eval_cmp("{x+1}'[]", '[]', klong=klong)
1090
- self.assert_eval_cmp("{x+1}'[1]", '[2]', klong=klong)
1091
- self.assert_eval_cmp("{x+1}'[1 2 3]", '[2 3 4]', klong=klong)
1092
- self.assert_eval_cmp("*':{}", '[]', klong=klong)
1093
- self.assert_eval_cmp("*':{[1 2]}", '[1]', klong=klong)
1094
- self.assert_eval_cmp("s@<s::*'D", '[1 3 5]', klong=klong)
1095
- self.assert_eval_cmp("{1_x}':{}", '[]', klong=klong)
1096
- self.assert_eval_cmp("{1_x}':{[1 2]}", '[[2]]', klong=klong)
1097
- self.assert_eval_cmp('#\'""', '""', klong=klong)
1098
- self.assert_eval_cmp('{x}\'""', '""', klong=klong)
1099
- self.assert_eval_cmp('#\'"test"', '[116 101 115 116]', klong=klong)
1100
- self.assert_eval_cmp('{x}\'"foof"', '"foof"', klong=klong)
1101
- self.assert_eval_test('t("{x;0cx}\'""test""" ; {x;0cx}\'"test" ; "xxxx")', klong=klong )
1102
- self.assert_eval_test('t("{x;-1}\'""test""" ; {x;-1}\'"test" ; [-1 -1 -1 -1])', klong=klong )
1103
- self.assert_eval_cmp("s@<s::{1_x}'D", '[[2] [4] [6]]', klong=klong)
1104
-
1105
- def test_each2(self):
1106
- self.assert_eval_cmp("[],'[]", '[]')
1107
- self.assert_eval_cmp("[1],'[2]", '[[1 2]]')
1108
- self.assert_eval_cmp("[1 2 3],'[4 5 6]", '[[1 4] [2 5] [3 6]]')
1109
- self.assert_eval_cmp("[]{y-x}'[]", '[]')
1110
- self.assert_eval_cmp("[1]{y-x}'[2]", '[1]')
1111
- self.assert_eval_cmp("[1 2 3]{y-x}'[4 5 6]", '[3 3 3]')
1112
- self.assert_eval_cmp('""+\'""', '""')
1113
- self.assert_eval_cmp('""{x+y}\'""', '""')
1114
- self.assert_eval_test('t("""test""{x;y}\'""foof""" ; "test"{x;y}\'"foof" ; "foof")' )
1115
- self.assert_eval_test('t("""test""{y;x}\'""foof""" ; "test"{y;x}\'"foof" ; "test")' )
1116
- self.assert_eval_cmp('"tst",\'"foo"', '["tf" "so" "to"]')
1117
-
1118
- def test_each_left(self):
1119
- self.assert_eval_cmp('0,:\[]', '[]')
1120
- self.assert_eval_cmp('0,:\[1]', '[[0 1]]')
1121
- self.assert_eval_cmp('0,:\[1 2 3]', '[[0 1] [0 2] [0 3]]')
1122
- self.assert_eval_cmp('0{(,,x),y}:\[]', '[]')
1123
- self.assert_eval_cmp('0{(,,x),y}:\[1]', '[[[0] 1]]')
1124
- self.assert_eval_cmp('0{(,,x),y}:\[1 2 3]', '[[[0] 1] [[0] 2] [[0] 3]]')
1125
- self.assert_eval_cmp('1{x-#y}:\\"test"', '[-115 -100 -114 -115]')
1126
- self.assert_eval_cmp('0c!,:\\"test"', '["!t" "!e" "!s" "!t"]')
1127
-
1128
- def test_each_right(self):
1129
- self.assert_eval_cmp('0,:/[]', '[]')
1130
- self.assert_eval_cmp('0,:/[1]', '[[1 0]]')
1131
- self.assert_eval_cmp('0,:/[1 2 3]', '[[1 0] [2 0] [3 0]]')
1132
- self.assert_eval_cmp('0{(,,x),y}:/[]', '[]')
1133
- self.assert_eval_cmp('0{(,,x),y}:/[1]', '[[[1] 0]]')
1134
- self.assert_eval_cmp('0{(,,x),y}:/[1 2 3]', '[[[1] 0] [[2] 0] [[3] 0]]')
1135
- self.assert_eval_cmp('1{(#x)-y}:/"test"', '[115 100 114 115]')
1136
- self.assert_eval_cmp('0c!,:/"test"', '["t!" "e!" "s!" "t!"]')
1137
-
1138
- def test_each_pair(self):
1139
- self.assert_eval_cmp(",:'[]", '[]')
1140
- self.assert_eval_cmp(",:'[1]", '[1]')
1141
- self.assert_eval_cmp(",:'[1 2]", '[[1 2]]')
1142
- self.assert_eval_cmp(",:'[1 2 3]", '[[1 2] [2 3]]')
1143
- self.assert_eval_cmp("-:'!5", '[-1 -1 -1 -1]')
1144
- klong = create_test_klong()
1145
- klong('f::{y,x}')
1146
- self.assert_eval_cmp("f:'[]", '[]', klong=klong)
1147
- self.assert_eval_cmp("f:'[1]", '[1]', klong=klong)
1148
- self.assert_eval_cmp("f:'!5", '[[1 0] [2 1] [3 2] [4 3]]', klong=klong)
1149
- self.assert_eval_cmp("{y-x}:'[]", '[]', klong=klong)
1150
- self.assert_eval_cmp("{y-x}:'[1]", '[1]', klong=klong)
1151
- self.assert_eval_cmp("{y-x}:'!5", '[1 1 1 1]', klong=klong)
1152
- self.assert_eval_cmp(',:\'""', '""', klong=klong)
1153
- self.assert_eval_cmp(',:\'"x"', '"x"', klong=klong)
1154
- self.assert_eval_cmp(',:\'"test"', '["te" "es" "st"]', klong=klong)
1155
-
1156
- def test_over(self):
1157
- self.assert_eval_cmp(',/[]', '[]')
1158
- self.assert_eval_cmp(',/[1]', '1')
1159
- self.assert_eval_cmp(',/[1 2]', '[1 2]')
1160
- self.assert_eval_cmp(',/[1 2 3]', '[1 2 3]')
1161
- self.assert_eval_cmp('-/[1 2 3]', '-4')
1162
- klong = create_test_klong()
1163
- klong('f::{y-x}')
1164
- self.assert_eval_cmp('f/[]', '[]', klong=klong)
1165
- self.assert_eval_cmp('f/[1]', '1', klong=klong)
1166
- self.assert_eval_cmp('f/[1 2]', '1', klong=klong)
1167
- self.assert_eval_cmp('f/[1 2 3]', '2', klong=klong)
1168
- self.assert_eval_cmp('{(,x),y}/[]', '[]', klong=klong)
1169
- self.assert_eval_cmp('{(,x),y}/[1]', '1', klong=klong)
1170
- self.assert_eval_cmp('{(,x),y}/[1 2]', '[1 2]', klong=klong)
1171
- self.assert_eval_cmp('{(,x),y}/!5', '[[[[0 1] 2] 3] 4]', klong=klong)
1172
- self.assert_eval_cmp('+/""', '""', klong=klong)
1173
- self.assert_eval_cmp(',/""', '""', klong=klong)
1174
- self.assert_eval_cmp(',/"a"', '0ca', klong=klong)
1175
- self.assert_eval_cmp(',/"abc"', '"abc"', klong=klong)
1176
-
1177
- def test_over_neutral(self):
1178
- self.assert_eval_cmp('1,/2', '[1 2]')
1179
- self.assert_eval_cmp('[],/[]', '[]')
1180
- self.assert_eval_cmp('[],/[1]', '[1]')
1181
- self.assert_eval_cmp('[],/[1 2]', '[1 2]')
1182
- self.assert_eval_cmp('[],/[1 2 3]', '[1 2 3]')
1183
- self.assert_eval_cmp('4+/[1 2 3]', '10')
1184
- self.assert_eval_cmp('5{(,x),y}/[]', '5')
1185
- self.assert_eval_cmp('5{(,x),y}/[1]', '[5 1]')
1186
- self.assert_eval_cmp('5{(,x),y}/[1 2]', '[[5 1] 2]')
1187
- self.assert_eval_cmp('5{(,x),y}/!5', '[[[[[5 0] 1] 2] 3] 4]')
1188
- self.assert_eval_cmp('0c0,/""', '0c0')
1189
- self.assert_eval_cmp('0c0,/"a"', '"0a"')
1190
- self.assert_eval_cmp('0c0,/"abc"', '"0abc"')
1191
-
1192
- def test_converge(self):
1193
- self.assert_eval_cmp(',/:~[]', '[]')
1194
- self.assert_eval_cmp(',/:~[1]', '1')
1195
- self.assert_eval_cmp(',/:~[1 2 3]', '[1 2 3]')
1196
- self.assert_eval_cmp(',/:~[1 [2] 3]', '[1 2 3]')
1197
- self.assert_eval_cmp(',/:~[[1] [[2]] [3]]', '[1 2 3]')
1198
- self.assert_eval_cmp(',/:~[[[[[0]]]]]', '0')
1199
- self.assert_eval_cmp('{_x%2}:~0', '0')
1200
- self.assert_eval_cmp('{_x%2}:~1', '0')
1201
- self.assert_eval_cmp('{_x%2}:~1000', '0')
1202
-
1203
- def test_iterate(self):
1204
- self.assert_eval_cmp('0,:*1', '1')
1205
- self.assert_eval_cmp('1,:*1', '[1]')
1206
- self.assert_eval_cmp('2,:*1', '[[1]]')
1207
- self.assert_eval_cmp('3,:*1', '[[[1]]]')
1208
- self.assert_eval_cmp('0{1,x}:*[]', '[]')
1209
- self.assert_eval_cmp('1{1,x}:*[]', '[1]')
1210
- self.assert_eval_cmp('2{1,x}:*[]', '[1 1]')
1211
- self.assert_eval_cmp('5{1,x}:*[]', '[1 1 1 1 1]')
1212
-
1213
- def test_while(self):
1214
- self.assert_eval_test('t("{x;0}{x}:~0" ; {x;0}{x}:~0 ; 0)' )
1215
- self.assert_eval_cmp('{x<0}{x+1}:~0', '0')
1216
- self.assert_eval_cmp('{x<1}{x+1}:~0', '1')
1217
- self.assert_eval_cmp('{x<10}{x+1}:~0', '10')
1218
- self.assert_eval_cmp('{(#x)<5}{x,x}:~[1 2 3 4 5]', '[1 2 3 4 5]')
1219
- self.assert_eval_cmp('{(#x)<5}{1,x}:~1', '[1 1 1 1 1]')
1220
-
1221
- def test_scan_over(self):
1222
- self.assert_eval_cmp(',\[]', '[]')
1223
- self.assert_eval_cmp(',\[1]', '[1]')
1224
- self.assert_eval_cmp(',\[1 2]', '[1 [1 2]]')
1225
- self.assert_eval_cmp(',\[1 2 3]', '[1 [1 2] [1 2 3]]')
1226
- self.assert_eval_cmp('-\[1 2 3]', '[1 -1 -4]')
1227
- klong = create_test_klong()
1228
- klong('f::{y-x}')
1229
- self.assert_eval_cmp('f\[]', '[]', klong=klong)
1230
- self.assert_eval_cmp('f\[1]', '[1]', klong=klong)
1231
- self.assert_eval_cmp('f\[1 2]', '[1 1]', klong=klong)
1232
- self.assert_eval_cmp('f\[1 2 3]', '[1 1 2]', klong=klong)
1233
- self.assert_eval_cmp('{(,x),y}\[]', '[]', klong=klong)
1234
- self.assert_eval_cmp('{(,x),y}\[1]', '[1]', klong=klong)
1235
- self.assert_eval_cmp('{(,x),y}\[1 2]', '[1 [1 2]]', klong=klong)
1236
- self.assert_eval_cmp('{(,x),y}\!4', '[0 [0 1] [[0 1] 2] [[[0 1] 2] 3]]', klong=klong)
1237
- self.assert_eval_cmp('+\\""', '""', klong=klong)
1238
- self.assert_eval_cmp(',\\""', '""', klong=klong)
1239
- self.assert_eval_cmp(',\\"a"', '[0ca]', klong=klong)
1240
- self.assert_eval_cmp(',\\"abc"', '[0ca "ab" "abc"]', klong=klong)
1241
-
1242
- def test_scan_over_neutral(self):
1243
- self.assert_eval_cmp('1,\\2', '[1 [1 2]]')
1244
- self.assert_eval_cmp('[],\[]', '[]')
1245
- self.assert_eval_cmp('[],\[1]', '[[] [1]]')
1246
- self.assert_eval_cmp('[],\[1 2]', '[[] [1] [1 2]]')
1247
- self.assert_eval_cmp('[],\[1 2 3]', '[[] [1] [1 2] [1 2 3]]')
1248
- self.assert_eval_cmp('4+\[1 2 3]', '[4 5 7 10]')
1249
- self.assert_eval_cmp('5{(,x),y}\[]', '5')
1250
- self.assert_eval_cmp('5{(,x),y}\[1]', '[5 [5 1]]')
1251
- self.assert_eval_cmp('5{(,x),y}\[1 2]', '[5 [5 1] [[5 1] 2]]')
1252
- self.assert_eval_cmp('3{(,x),y}\!3', '[3 [3 0] [[3 0] 1] [[[3 0] 1] 2]]')
1253
- self.assert_eval_cmp('0cz,\\""', '0cz')
1254
- self.assert_eval_cmp('0c0,\\"a"', '[0c0 "0a"]')
1255
- self.assert_eval_cmp('0c0,\\"abc"', '[0c0 "0a" "0ab" "0abc"]')
1256
-
1257
- def test_scan_converging(self):
1258
- self.assert_eval_cmp(',/\~[]', '[[]]')
1259
- self.assert_eval_cmp(',/\~[1]', '[[1] 1]')
1260
- self.assert_eval_cmp(',/\~[1 2 3]', '[[1 2 3]]')
1261
- self.assert_eval_cmp(',/\~[1 [2] 3]', '[[1 [2] 3] [1 2 3]]')
1262
- self.assert_eval_cmp(',/\~[[1] [2] [3]]', '[[[1] [2] [3]] [1 2 3]]')
1263
- self.assert_eval_cmp(',/\~[[[0]]]', '[[[[0]]] [[0]] [0] 0]')
1264
- self.assert_eval_cmp('{_x%2}\~0', '[0]')
1265
- self.assert_eval_cmp('{_x%2}\~1', '[1 0]')
1266
- self.assert_eval_cmp('{_x%2}\~1000', '[1000 500 250 125 62 31 15 7 3 1 0]')
1267
-
1268
- def test_scan_iterating(self):
1269
- self.assert_eval_cmp('0,\*1', '1')
1270
- self.assert_eval_cmp('1,\*1', '[1 [1]]')
1271
- self.assert_eval_cmp('2,\*1', '[1 [1] [[1]]]')
1272
- self.assert_eval_cmp('3,\*1', '[1 [1] [[1]] [[[1]]]]')
1273
- self.assert_eval_cmp('0{1,x}\*[]', '[]')
1274
- self.assert_eval_cmp('1{1,x}\*[]', '[[] [1]]')
1275
- self.assert_eval_cmp('2{1,x}\*[]', '[[] [1] [1 1]]')
1276
- self.assert_eval_cmp('5{1,x}\*[]', '[[] [1] [1 1] [1 1 1] [1 1 1 1] [1 1 1 1 1]]')
1277
-
1278
- def test_scan_while(self):
1279
- self.assert_eval_test('t("{x;0}{x}\~0" ; {x;0}{x}\~0 ; [])' )
1280
- self.assert_eval_cmp('{x<0}{x+1}\~0', '[]')
1281
- self.assert_eval_cmp('{x<1}{x+1}\~0', '[0]')
1282
- self.assert_eval_cmp('{x<10}{x+1}\~0', '[0 1 2 3 4 5 6 7 8 9]')
1283
- self.assert_eval_cmp('{(#x)<5}{1,x}\~1', '[1 [1 1] [1 1 1] [1 1 1 1]]')
1284
- self.assert_eval_cmp('{(#x)<5}{x,x}\~[1 2 3 4 5]', '[]')
1285
-
1286
- def test_conditional(self):
1287
- self.assert_eval_test('t(":[0;1;2]" ;:[0;1;2] ;2)' )
1288
- self.assert_eval_test('t(":[0.0;1;2]" ;:[0.0;1;2] ;2)' )
1289
- self.assert_eval_test('t(":[[];1;2]" ;:[[];1;2] ;2)' )
1290
- self.assert_eval_test('t(":["""";1;2]" ;:["";1;2] ;2)' )
1291
- self.assert_eval_test('t(":[1;2;3]" ;:[1;2;3] ;2)' )
1292
- self.assert_eval_test('t(":[0.1;2;3]" ;:[0.1;2;3] ;2)' )
1293
- self.assert_eval_test('t(":[""x"";2;3]" ;:["x";2;3] ;2)' )
1294
- self.assert_eval_test('t(":[:foo;2;3]" ;:[:foo;2;3] ;2)' )
1295
- self.assert_eval_test('t(":[:{};2;3]" ;:[:{};2;3] ;2)' )
1296
- self.assert_eval_test('t(":[[1];2;3]" ;:[[1];2;3] ;2)' )
1297
- self.assert_eval_test('t(":[0;:[0;1;2];3]" ;:[0;:[0;1;2];3] ;3)' )
1298
- self.assert_eval_test('t(":[0;:[1;1;2];3]" ;:[0;:[1;1;2];3] ;3)' )
1299
- self.assert_eval_test('t(":[1;:[0;1;2];3]" ;:[1;:[0;1;2];3] ;2)' )
1300
- self.assert_eval_test('t(":[1;:[1;1;2];3]" ;:[1;:[1;1;2];3] ;1)' )
1301
- self.assert_eval_test('t(":[0;1:|2;3;4]" ;:[0;1:|2;3;4] ;3)' )
1302
- self.assert_eval_test('t(":[0.0;1:|2;3;4]" ;:[0.0;1:|2;3;4] ;3)' )
1303
- self.assert_eval_test('t(":[[];1:|2;3;4]" ;:[[];1:|2;3;4] ;3)' )
1304
- self.assert_eval_test('t(":["""";1:|2;3;4]" ;:["";1:|2;3;4] ;3)' )
1305
- self.assert_eval_test('t(":[1;2:|2;3;4]" ;:[1;2:|2;3;4] ;2)' )
1306
- self.assert_eval_test('t(":[0.1;2:|2;3;4]" ;:[0.1;2:|2;3;4] ;2)' )
1307
- self.assert_eval_test('t(":[""x"";2:|2;3;4]" ;:["x";2:|2;3;4] ;2)' )
1308
- self.assert_eval_test('t(":[:foo;2:|2;3;4]" ;:[:foo;2:|2;3;4] ;2)' )
1309
- self.assert_eval_test('t(":[:{};2:|2;3;4]" ;:[:{};2:|2;3;4] ;2)' )
1310
- self.assert_eval_test('t(":[[1];2:|2;3;4]" ;:[[1];2:|2;3;4] ;2)' )
1311
- self.assert_eval_test('t(":[0;2:|0;3;4]" ;:[0;2:|0;3;4] ;4)' )
1312
- self.assert_eval_test('t(":[0;2:|1;3;4]" ;:[0;2:|1;3;4] ;3)' )
1313
- self.assert_eval_test('t(":[1;2:|0;3;4]" ;:[1;2:|0;3;4] ;2)' )
1314
- self.assert_eval_test('t(":[1;2:|1;3;4]" ;:[1;2:|1;3;4] ;2)' )
1315
- self.assert_eval_test('t(":[0;2:|0;3:|0;4;5]" ;:[0;2:|0;3:|0;4;5] ;5)' )
1316
-
1317
- def test_function_application(self):
1318
- self.assert_eval_cmp('{0}:()', '0')
1319
- self.assert_eval_cmp('{1,2,3}:()', '[1 2 3]')
1320
- self.assert_eval_cmp('{x}:(1)', '1')
1321
- self.assert_eval_cmp('{0}:()', '0')
1322
- self.assert_eval_cmp('{1,2,3}:()', '[1 2 3]')
1323
- self.assert_eval_cmp('{x}:(1)', '1')
1324
- self.assert_eval_cmp('{x,x}:(1)', '[1 1]')
1325
- self.assert_eval_cmp('{x,x,x}:(1)', '[1 1 1]')
1326
- self.assert_eval_cmp('{(x+1),(x+2),x+3}:(1)', '[2 3 4]')
1327
- self.assert_eval_test('t("{x,y}:(1;2)" ; {x,y}:(1;2) ; [1 2])' )
1328
- self.assert_eval_test('t("{(x+y),x+y}:(1;2)" ; {(x+y),x+y}:(1;2) ; [3 3])' )
1329
- self.assert_eval_test('t("{x,y,z}:(1;2;3)" ; {x,y,z}:(1;2;3) ; [1 2 3])' )
1330
- self.assert_eval_test('t("{x,x,y,y,z,z}:(1;2;3)" ; {x,x,y,y,z,z}:(1;2;3) ; [1 1 2 2 3 3])' )
1331
- self.assert_eval_test('t("{x;y;z}:(1;2;3)" ; {x;y;z}:(1;2;3) ; 3)' )
1332
- self.assert_eval_cmp('{*/1+!x}:(10)', '3628800')
1333
- klong = create_test_klong()
1334
- klong('f0::{123}')
1335
- self.assert_eval_cmp('f0()', '123', klong=klong)
1336
- klong('f1::{:[x=0;[];1,f1(x-1)]}')
1337
- self.assert_eval_cmp('f1(0)', '[]', klong=klong)
1338
- self.assert_eval_cmp('f1(1)', '[1]', klong=klong)
1339
- self.assert_eval_cmp('f1(2)', '[1 1]', klong=klong)
1340
- self.assert_eval_cmp('f1(10)', '[1 1 1 1 1 1 1 1 1 1]', klong=klong)
1341
- klong('f1b::{:[x=0;1;(,f1b(x-1)),,f1b(x-1)]}')
1342
- self.assert_eval_cmp('f1b(0)', '1', klong=klong)
1343
- self.assert_eval_cmp('f1b(1)', '[1 1]', klong=klong)
1344
- self.assert_eval_cmp('f1b(2)', '[[1 1] [1 1]]', klong=klong)
1345
- self.assert_eval_cmp('f1b(3)', '[[[1 1] [1 1]] [[1 1] [1 1]]]', klong=klong)
1346
- klong('f2::{:[0=y;1;x*f2(x;y-1)]}')
1347
- self.assert_eval_test('t("f2(1;0)" ; f2(1;0) ; 1)', klong=klong )
1348
- self.assert_eval_test('t("f2(2;0)" ; f2(2;0) ; 1)', klong=klong )
1349
- self.assert_eval_test('t("f2(3;0)" ; f2(3;0) ; 1)', klong=klong )
1350
- self.assert_eval_test('t("f2(2;1)" ; f2(2;1) ; 2)', klong=klong )
1351
- self.assert_eval_test('t("f2(2;2)" ; f2(2;2) ; 4)', klong=klong )
1352
- self.assert_eval_test('t("f2(2;5)" ; f2(2;5) ; 32)', klong=klong )
1353
- klong('f3::{:[0=x;:[y=0;z;f3(x;y-1;z+1)];f3(x-1;y;z+1)]}')
1354
- self.assert_eval_test('t("f3(0;0;0)" ; f3(0;0;0) ; 0)', klong=klong )
1355
- self.assert_eval_test('t("f3(0;0;3)" ; f3(0;0;3) ; 3)', klong=klong )
1356
- self.assert_eval_test('t("f3(0;3;3)" ; f3(0;3;3) ; 6)', klong=klong )
1357
- self.assert_eval_test('t("f3(3;0;0)" ; f3(3;0;0) ; 3)', klong=klong )
1358
- self.assert_eval_test('t("f3(3;0;3)" ; f3(3;0;3) ; 6)', klong=klong )
1359
- self.assert_eval_test('t("f3(3;3;0)" ; f3(3;3;0) ; 6)', klong=klong )
1360
- self.assert_eval_test('t("f3(3;3;3)" ; f3(3;3;3) ; 9)', klong=klong )
1361
- klong('fr::{:[0=x;[];1,.f(x-1)]}')
1362
- self.assert_eval_cmp('fr(0)', '[]', klong=klong)
1363
- self.assert_eval_cmp('fr(1)', '[1]', klong=klong)
1364
- self.assert_eval_cmp('fr(3)', '[1 1 1]', klong=klong)
1365
- self.assert_eval_cmp('fr(10)', '[1 1 1 1 1 1 1 1 1 1]', klong=klong)
1366
-
1367
- def test_projection(self):
1368
- self.assert_eval_test('t("{x-y}:(1;)@2" ; {x-y}:(1;)@2 ; -1)' )
1369
- self.assert_eval_test('t("{x-y}:(;2)@2" ; {x-y}:(;2)@3 ; 1)' )
1370
- self.assert_eval_test('t("{x-y*z}:(1;2;)@4" ; {x-y*z}:(1;2;)@4 ; -7)' )
1371
- self.assert_eval_test('t("{x-y*z}:(1;;3)@4" ; {x-y*z}:(1;;3)@4 ; -11)' )
1372
- self.assert_eval_test('t("{x-y*z}:(;2;3)@4" ; {x-y*z}:(;2;3)@4 ; -2)' )
1373
- self.assert_eval_test('t("{x-y*z}:(1;;)@[4 5]" ; {x-y*z}:(1;;)@[4 5] ; -19)' )
1374
- self.assert_eval_test('t("{x-y*z}:(;2;)@[4 5]" ; {x-y*z}:(;2;)@[4 5] ; -6)' )
1375
- self.assert_eval_test('t("{x-y*z}:(;;3)@[4 5]" ; {x-y*z}:(;;3)@[4 5] ; -11)' )
1376
- klong = create_test_klong()
1377
- klong('f2::{x-y}')
1378
- klong('f3::{x-y*z}')
1379
- self.assert_eval_test('t("f2(1;)@2" ; f2(1;)@2 ; -1)', klong=klong )
1380
- self.assert_eval_test('t("f2(;2)@2" ; f2(;2)@3 ; 1)', klong=klong )
1381
- self.assert_eval_test('t("f3(1;2;)@4" ; f3(1;2;)@4 ; -7)', klong=klong )
1382
- self.assert_eval_test('t("f3(1;;3)@4" ; f3(1;;3)@4 ; -11)', klong=klong )
1383
- self.assert_eval_test('t("f3(;2;3)@4" ; f3(;2;3)@4 ; -2)', klong=klong )
1384
- self.assert_eval_test('t("f3(1;;)@[4 5]" ; f3(1;;)@[4 5] ; -19)', klong=klong )
1385
- self.assert_eval_test('t("f3(;2;)@[4 5]" ; f3(;2;)@[4 5] ; -6)', klong=klong )
1386
- self.assert_eval_test('t("f3(;;3)@[4 5]" ; f3(;;3)@[4 5] ; -11)', klong=klong )
1387
-
1388
- def test_monad_contexts(self):
1389
- klong = create_test_klong()
1390
- klong('f::{,x}')
1391
- klong('g::{x,y}')
1392
- self.assert_eval_cmp(',1', '[1]', klong=klong)
1393
- self.assert_eval_cmp(",'[1 2 3]", '[[1] [2] [3]]', klong=klong)
1394
- self.assert_eval_cmp("f'[1 2 3]", '[[1] [2] [3]]', klong=klong)
1395
- self.assert_eval_cmp("{,x}'[1 2 3]", '[[1] [2] [3]]', klong=klong)
1396
- self.assert_eval_test('t("g(;0)\'[1 2 3]" ; g(;0)\'[1 2 3] ; [[1 0] [2 0] [3 0]])', klong=klong )
1397
- self.assert_eval_test('t("{x,y}(0;)\'[1 2 3]" ; {x,y}(0;)\'[1 2 3] ; [[0 1] [0 2] [0 3]])', klong=klong )
1398
-
1399
- def test_dyad_contexts(self):
1400
- klong = create_test_klong()
1401
- klong('f::{x,y}')
1402
- klong('g::{x,y,z}')
1403
- self.assert_eval_cmp('1,2', '[1 2]', klong=klong)
1404
- self.assert_eval_cmp('0,:\[1 2 3]', '[[0 1] [0 2] [0 3]]', klong=klong)
1405
- self.assert_eval_cmp('0{x,y}[1 2 3]', '[0 1 2 3]', klong=klong)
1406
- self.assert_eval_cmp('0{x,y}:/[1 2 3]', '[[1 0] [2 0] [3 0]]', klong=klong)
1407
- self.assert_eval_cmp('0f[1 2 3]', '[0 1 2 3]', klong=klong)
1408
- self.assert_eval_cmp('9f:/[1 2 3]', '[[1 9] [2 9] [3 9]]', klong=klong)
1409
- self.assert_eval_test('t("[1 2 3]g(;0;)[4 5 6]" ; [1 2 3]g(;0;)[4 5 6] ; [1 2 3 0 4 5 6])', klong=klong )
1410
- self.assert_eval_test('t("[1 2 3]g(;0;)\'[4 5 6]" ; [1 2 3]g(;0;)\'[4 5 6] ; [[1 0 4] [2 0 5] [3 0 6]])', klong=klong )
1411
- self.assert_eval_test('t("1{x,y,z}(;0;)2" ; 1{x,y,z}(;0;)2 ; [1 0 2])', klong=klong )
1412
- self.assert_eval_test('t("[1 2]{x,y,z}(;0;)\'[3 4]" ; [1 2]{x,y,z}(;0;)\'[3 4] ; [[1 0 3] [2 0 4]])', klong=klong )
1413
-
1414
- def test_local_variables(self):
1415
- klong = create_test_klong()
1416
- klong('fv::{[a];a::1;a} ; t("fv()" ; fv() ; 1)')
1417
- klong('a::2 ; t("a,fv(),a" ; a,fv(),a ; [2 1 2])')
1418
-
1419
- def test_symbol_identity(self):
1420
- self.assert_eval_cmp(':test~:test', '1')
1421
- self.assert_eval_cmp(':test~*[test]', '1')
1422
- self.assert_eval_cmp('(*[test])~:test', '1')
1423
- self.assert_eval_cmp('(*[test])~*[test]', '1')
1424
- self.assert_eval_cmp(':{[foo bar]}?:foo', ':bar')
1425
-
1426
- def test_dictionaries__in_situ_mutation(self):
1427
- klong = create_test_klong()
1428
- klong("D:::{};{D,x,x}'!5")
1429
- self.assert_eval_test('t("D:::{};{D,x,x}\'!5;D" ; s@<s::*\'D ; [0 1 2 3 4])', klong=klong )
1430
-
1431
- def test_dictionaries__creation(self):
1432
- klong = create_test_klong()
1433
- klong("uniq::{[d];d:::{};{d,x,x}'x;d@<d::*'d}")
1434
- self.assert_eval_cmp('uniq(!5)', '[0 1 2 3 4 ]', klong=klong)
1435
- self.assert_eval_cmp('uniq(!7)', '[0 1 2 3 4 5 6]', klong=klong)
1436
- self.assert_eval_cmp('uniq(!3)', '[0 1 2]', klong=klong)
1437
-
1438
- def test_real_number_similarity(self):
1439
- klong = create_test_klong()
1440
- klong('s::{(x+2%x)%2}:~2')
1441
- self.assert_eval_cmp('(s+10*.e)~s', '1', klong=klong)
1442
-
1443
- def test_modules(self):
1444
- klong = create_test_klong()
1445
- klong('a::0')
1446
- self.assert_eval_cmp('a', '0', klong=klong)
1447
- klong('.module(:test)')
1448
- klong('a::1')
1449
- klong('g::{a}')
1450
- klong('f::{g()}')
1451
- klong('s::{a::x}')
1452
- klong('.module(0)')
1453
- self.assert_eval_cmp('a', '1', klong=klong)
1454
- self.assert_eval_cmp('g()', '1', klong=klong)
1455
- self.assert_eval_cmp('s(2)', '2', klong=klong)
1456
- self.assert_eval_cmp('g()', '2', klong=klong)
1457
- klong('a::0 ; t("g()" ; g() ; 2)')
1458
- klong('g::0 ; t("f()" ; f() ; 2)')
1459
-
1460
- def test_forward_reference(self):
1461
- klong = create_test_klong()
1462
- klong('fw::0')
1463
- klong('.module(:fwd)')
1464
- klong('fw::1')
1465
- klong('fwd::{fw}')
1466
- klong('fw::2')
1467
- klong('.module(0)')
1468
- klong('fw::3')
1469
- self.assert_eval_cmp('fwd()', '2', klong=klong)
1470
-
1471
- def test_regression_tests(self):
1472
- klong = create_test_klong()
1473
- klong('a::!8192')
1474
- klong('.tc(.oc("test.tmp"));.w(a);.cc(.tc(0))')
1475
- klong('.fc(.ic("test.tmp"));t(".r" ; .r() ; a);.cc(.fc(0))')
1476
- klong('.df("test.tmp")')
1477
-
1478
- if __name__ == '__main__':
1479
- unittest.main()