@naanlang/naan 1.0.0

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 (98) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +46 -0
  3. package/dist/env_web.js +431 -0
  4. package/dist/naan.min.js +73 -0
  5. package/frameworks/browser/browser.nlg +30 -0
  6. package/frameworks/browser/pouchdb/pouchdb.min.js +7 -0
  7. package/frameworks/browser/spark-md5/spark-md5.min.js +1 -0
  8. package/frameworks/browser/sworker.js +192 -0
  9. package/frameworks/browser/terminals.nlg +787 -0
  10. package/frameworks/browser/workers.nlg +386 -0
  11. package/frameworks/client/apiclient.nlg +183 -0
  12. package/frameworks/client/client.nlg +29 -0
  13. package/frameworks/client/psm_client.nlg +572 -0
  14. package/frameworks/common/common.nlg +464 -0
  15. package/frameworks/common/preferences.nlg +131 -0
  16. package/frameworks/common/repltools.nlg +100 -0
  17. package/frameworks/common/watching.nlg +97 -0
  18. package/frameworks/node/apiserver.nlg +399 -0
  19. package/frameworks/node/filesystem.nlg +1012 -0
  20. package/frameworks/node/gitter.nlg +234 -0
  21. package/frameworks/node/node.nlg +81 -0
  22. package/frameworks/node/psm_server.nlg +465 -0
  23. package/frameworks/node/worker.nlg +560 -0
  24. package/frameworks/project/build.nlg +1229 -0
  25. package/frameworks/project/jszip.js +30 -0
  26. package/frameworks/project/jszip.nlg +87 -0
  27. package/frameworks/project/proj_cliser.nlg +139 -0
  28. package/frameworks/project/proj_console.nlg +137 -0
  29. package/frameworks/project/proj_folder.nlg +143 -0
  30. package/frameworks/project/proj_lambda.nlg +137 -0
  31. package/frameworks/project/proj_static.nlg +138 -0
  32. package/frameworks/project/project.nlg +29 -0
  33. package/frameworks/project/projects.nlg +587 -0
  34. package/frameworks/project/uglifyjs.js +1 -0
  35. package/frameworks/project/uglifyjs.nlg +79 -0
  36. package/frameworks/running/debugcom.nlg +163 -0
  37. package/frameworks/running/debugnub.nlg +565 -0
  38. package/frameworks/running/debugutil.nlg +510 -0
  39. package/frameworks/running/executors.nlg +767 -0
  40. package/frameworks/running/running.nlg +151 -0
  41. package/frameworks/running/sourcecode.nlg +346 -0
  42. package/frameworks/running/taskexec.nlg +196 -0
  43. package/frameworks/storage/dbt_pouch.nlg +773 -0
  44. package/frameworks/storage/file_manager.nlg +772 -0
  45. package/frameworks/storage/psm.nlg +326 -0
  46. package/frameworks/storage/psm_dbtables.nlg +814 -0
  47. package/frameworks/storage/resources.nlg +445 -0
  48. package/frameworks/storage/storage.nlg +52 -0
  49. package/lib/browser/env_web.js +431 -0
  50. package/lib/browser/env_webworker.js +146 -0
  51. package/lib/browser/require.js +1653 -0
  52. package/lib/core/naanlib.js +73 -0
  53. package/lib/env_node.js +282 -0
  54. package/lib/env_nodeworker.js +165 -0
  55. package/lib/node_repl.js +25 -0
  56. package/lib/node_repl_init.nlg +52 -0
  57. package/package.json +13 -0
  58. package/plugins/gitClient/clientops.nlg +317 -0
  59. package/plugins/gitClient/gitClient.nlg +63 -0
  60. package/plugins/gitClient/gitutils.nlg +1331 -0
  61. package/plugins/gitClient/minimatch.js +945 -0
  62. package/plugins/gitClient/minimatch_license.txt +15 -0
  63. package/plugins/gitClient/minimatch_readme.md +208 -0
  64. package/plugins/nodeLib/nodeLib.nlg +26 -0
  65. package/plugins/nodeLib/node_cp.nlg +65 -0
  66. package/plugins/nodeLib/node_fs.nlg +137 -0
  67. package/plugins/nodeLib/node_https.nlg +172 -0
  68. package/plugins/nodeLib/node_util.nlg +180 -0
  69. package/plugins/serviceAws/aws/aws-sdk.min.js +88 -0
  70. package/plugins/serviceAws/aws/lambda_rest_index.js +122 -0
  71. package/plugins/serviceAws/aws/lambda_rest_init.nlg +58 -0
  72. package/plugins/serviceAws/aws/lambda_ws_index.js +498 -0
  73. package/plugins/serviceAws/aws/lambda_ws_init.nlg +49 -0
  74. package/plugins/serviceAws/aws_cloudwatchlogs.nlg +122 -0
  75. package/plugins/serviceAws/aws_cognito.nlg +76 -0
  76. package/plugins/serviceAws/aws_dynamo.nlg +509 -0
  77. package/plugins/serviceAws/aws_lambda.nlg +95 -0
  78. package/plugins/serviceAws/aws_s3.nlg +134 -0
  79. package/plugins/serviceAws/aws_utils.nlg +86 -0
  80. package/plugins/serviceAws/dbt_aws.nlg +769 -0
  81. package/plugins/serviceAws/lambda_naan_control.nlg +175 -0
  82. package/plugins/serviceAws/psm_aws.nlg +258 -0
  83. package/plugins/serviceAws/serviceAws.nlg +38 -0
  84. package/plugins/serviceGitHub/gitops.nlg +522 -0
  85. package/plugins/serviceGitHub/psm_github.nlg +205 -0
  86. package/plugins/serviceGitHub/serviceGitHub.nlg +65 -0
  87. package/plugins/serviceGitLab/gitops.nlg +528 -0
  88. package/plugins/serviceGitLab/psm_gitlab.nlg +205 -0
  89. package/plugins/serviceGitLab/serviceGitLab.nlg +65 -0
  90. package/test/harness.nlg +312 -0
  91. package/test/node_test.js +33 -0
  92. package/test/test_01_core.nlg +768 -0
  93. package/test/test_02_context.nlg +269 -0
  94. package/test/test_03_jsinterop.nlg +137 -0
  95. package/test/test_04_numerics.nlg +450 -0
  96. package/test/test_05_strings.nlg +63 -0
  97. package/test/test_06_lingoparse.nlg +500 -0
  98. package/test/test_07_lingo.nlg +623 -0
@@ -0,0 +1,450 @@
1
+ /*
2
+ * test_04_numerics.nlg
3
+ * Test
4
+ *
5
+ * Perform basic unit tests for Naan.
6
+ *
7
+ * column positioning: // // !
8
+ *
9
+ * Copyright (c) 2017-2021 by Richard C. Zulch
10
+ *
11
+ */
12
+
13
+
14
+ /*
15
+ * Test Category 4 - numerics
16
+ *
17
+ */
18
+
19
+ RegisterTestCategory("numerics", [
20
+ [ "4+3;", "7" ], // generic first test
21
+
22
+
23
+ //
24
+ // numeric representations
25
+ //
26
+
27
+ [ "quote(1);>", "1" ],
28
+ [ "quote(-1);>", "-1" ],
29
+ [ "quote(1.0);>", "1.0" ],
30
+ [ "quote(-1.0);>", "-1.0" ],
31
+ [ "car(1);>", "1" ],
32
+ [ "car(-1);>", "-1" ],
33
+ [ "car(0x0f);>", "0xf" ], // leading zeros not preserved ###
34
+ [ "second(1);>", "false" ],
35
+ [ "second(-1);>", "false" ],
36
+ [ "second(0x0f);>", "Dictionary{1}" ],
37
+ [ "third(1);>", "false" ],
38
+ [ "third(-1);>", "false" ],
39
+ [ "third(0x0f);>", "false" ],
40
+ [ "rest(1);>", "false" ],
41
+ [ "rest(-1);>", "false" ],
42
+ [ "rest(0x0f);>", "Dictionary{1}" ], // rest field tag indicates hex escape
43
+
44
+
45
+ //
46
+ // addition/subtraction bigint numerics
47
+ //
48
+ // These tests look for off-by-one errors in carrying and borrowing. The internal Leemon
49
+ // representation for -1 is [32767], for -2 is [32766, 32767], for 32767 is [32767, 0], etc.
50
+ //
51
+
52
+ [ "0+0;", "0" ],
53
+ [ "0+1;", "1" ],
54
+ [ "0+-1;", "-1" ],
55
+ [ "0-1;", "-1" ],
56
+ [ "0- -1;", "1" ],
57
+
58
+ [ "1+0;", "1" ],
59
+ [ "1+1;", "2" ],
60
+ [ "1+-1;", "0" ],
61
+ [ "1-0;", "1" ],
62
+ [ "1-1;", "0" ],
63
+ [ "1- -1;", "2" ],
64
+
65
+ [ "-1+0;", "-1" ],
66
+ [ "-1+1;", "0" ],
67
+ [ "-1+-1;", "-2" ],
68
+ [ "-1-0;", "-1" ],
69
+ [ "-1-1;", "-2" ],
70
+ [ "-1- -1;", "0" ],
71
+
72
+ [ "0+2;", "2" ],
73
+ [ "0+-2;", "-2" ],
74
+ [ "0-2;", "-2" ],
75
+ [ "0- -2;", "2" ],
76
+
77
+ [ "1+2;", "3" ],
78
+ [ "1+-2;", "-1" ],
79
+ [ "1-2;", "-1" ],
80
+ [ "1- -2;", "3" ],
81
+
82
+ [ "-1+2;", "1" ],
83
+ [ "-1+-2;", "-3" ],
84
+ [ "-1-2;", "-3" ],
85
+ [ "-1- -2;", "1" ],
86
+
87
+ [ "2+0;", "2" ],
88
+ [ "2+1;", "3" ],
89
+ [ "2+-1;", "1" ],
90
+ [ "2-0;", "2" ],
91
+ [ "2-1;", "1" ],
92
+ [ "2- -1;", "3" ],
93
+
94
+ [ "-2+0;", "-2" ],
95
+ [ "-2+1;", "-1" ],
96
+ [ "-2+-1;", "-3" ],
97
+ [ "-2-0;", "-2" ],
98
+ [ "-2-1;", "-3" ],
99
+ [ "-2- -1;", "-1" ],
100
+
101
+ [ "32767+0;", "32767" ],
102
+ [ "32767+1;", "32768" ],
103
+ [ "32767+-1;", "32766" ],
104
+ [ "32767-0;", "32767" ],
105
+ [ "32767-1;", "32766" ],
106
+ [ "32767- -1;", "32768" ],
107
+
108
+ [ "-32767+0;", "-32767" ],
109
+ [ "-32767+1;", "-32766" ],
110
+ [ "-32767+-1;", "-32768" ],
111
+ [ "-32767-0;", "-32767" ],
112
+ [ "-32767-1;", "-32768" ],
113
+ [ "-32767- -1;", "-32766" ],
114
+
115
+ [ "-32768+0;", "-32768" ],
116
+ [ "-32768+1;", "-32767" ],
117
+ [ "-32768+-1;", "-32769" ],
118
+ [ "-32768-0;", "-32768" ],
119
+ [ "-32768-1;", "-32769" ],
120
+ [ "-32768- -1;", "-32767" ],
121
+
122
+ [ "0+32767;", "32767" ],
123
+ [ "0+-32767;", "-32767" ],
124
+ [ "0-32767;", "-32767" ],
125
+ [ "0- -32767;", "32767" ],
126
+
127
+ [ "1+32767;", "32768" ],
128
+ [ "1+-32767;", "-32766" ],
129
+ [ "1-32767;", "-32766" ],
130
+ [ "1- -32767;", "32768" ],
131
+
132
+ [ "-1+32767;", "32766" ],
133
+ [ "-1+-32767;", "-32768" ],
134
+ [ "-1-32767;", "-32768" ],
135
+ [ "-1- -32767;", "32766" ],
136
+
137
+
138
+ //
139
+ // multiplication/division bigint numerics
140
+ //
141
+
142
+ [ "0*0;", "0" ],
143
+ [ "0*1;", "0" ],
144
+ [ "1*0;", "0" ],
145
+ [ "1*1;", "1" ],
146
+ [ "1*-1;", "-1" ],
147
+ [ "-1*1;", "-1" ],
148
+ [ "-1*-1;", "1" ],
149
+
150
+ [ "0/0;", { errors: "divide by zero" } ],
151
+ [ "0/1;", "0" ],
152
+ [ "1/0;", { errors: "divide by zero" } ],
153
+ [ "1/1;", "1" ],
154
+ [ "1/-1;", "-1" ],
155
+ [ "-1/1;", "-1" ],
156
+ [ "-1/-1;", "1" ],
157
+
158
+ [ "32767*2;", "65534" ],
159
+ [ "32768*2;", "65536" ],
160
+ [ "32768/-1;", "-32768" ],
161
+ [ "32767/-1;", "-32767" ],
162
+
163
+ [ "-32767*2;", "-65534" ],
164
+ [ "-32768*2;", "-65536" ],
165
+ [ "-32768/-1;", "32768" ],
166
+ [ "-32767/-1;", "32767" ],
167
+
168
+ [ "65534/2;", "32767" ],
169
+ [ "65536/2;", "32768" ],
170
+ [ "-65534/2;", "-32767" ],
171
+ [ "-65536/2;", "-32768" ],
172
+ [ "65534/-2;", "-32767" ],
173
+ [ "65536/-2;", "-32768" ],
174
+ [ "-65534/-2;", "32767" ],
175
+ [ "-65536/-2;", "32768" ],
176
+
177
+
178
+ //
179
+ // divide/modulo bigint numerics
180
+ //
181
+ // Naan uses Euclidean division and modulo, so for modulo(dividend, divisor), the result is
182
+ // always positive and periodic through zero. The quotient resulting from a calculation of
183
+ // dividend/divisor (equivalently numerator/denominator) is consistent with the modulo by the
184
+ // following relations:
185
+ //
186
+ // quotient = {
187
+ // divisor > 0: floor( dividend / divisor )
188
+ // divisor < 0: ceiling ( dividend / divisor )
189
+ // }
190
+ // modulo = dividend - divisor * quotient
191
+ // dividend = divisor * quotient + modulo
192
+ //
193
+ // For example, the following apply to -5/3 and mod(-5,3):
194
+ //
195
+ // quotient = floor( -5 / 3 )
196
+ // = -2
197
+ // remainder = -5 - 3 * -2
198
+ // = 1
199
+ //
200
+ // For more information, see:
201
+ // https://en.wikipedia.org/wiki/Modulo_operation
202
+ // https://en.wikipedia.org/wiki/Euclidean_division
203
+ //
204
+
205
+ [ "divide(667, 3);>", "(222 . 1)" ],
206
+ [ "divide(667, -3);>", "(222 . 1)" ],
207
+ [ "divide(-667, 3);>", "(223 . 2)" ],
208
+ [ "divide(-667, -3);>", "(223 . 2)" ],
209
+
210
+ [ "mod(5, 3);", "2" ],
211
+ [ "mod(5, -3);", "2" ],
212
+ [ "mod(-5, 3);", "1" ],
213
+ [ "mod(-5, -3);", "1" ],
214
+
215
+
216
+ //
217
+ // floats
218
+ //
219
+
220
+ [ "0.0/0.0;", "NaN" ],
221
+ [ "1.0/0.0;", "Infinity" ],
222
+ [ "-1.0/0.0;", "-Infinity" ],
223
+ [ "Math.log10(9007199254740991);", "15.954589770191003" ],
224
+ [ "toint(tofloat(Number.MAX_SAFE_INTEGER)) == Number.MAX_SAFE_INTEGER;", "true" ],
225
+ [ "tofloat(Number.MAX_SAFE_INTEGER+1) == tofloat(Number.MAX_SAFE_INTEGER+2);", "true" ],
226
+ [ "Number.MAX_SAFE_INTEGER+1 == Number.MAX_SAFE_INTEGER+2;", "false" ],
227
+ [ "tofloat(Number.MAX_SAFE_INTEGER);", "9007199254740991.0" ],
228
+ [ "Number.MIN_SAFE_INTEGER;", "-9007199254740991" ],
229
+ [ "tofloat(Number.MIN_SAFE_INTEGER);", "-9007199254740991.0" ],
230
+ [ "Math.pow(2,1024);", "Infinity" ],
231
+ [ "Math.log10(Math.pow(2,1023));", "307.95368556425274" ],
232
+ [ "Math.log10(Number.MAX_VALUE);", "308.25471555991675" ],
233
+ [ "Math.log2(Math.pow(2,1023));", "1023" ],
234
+ [ "Math.log2(Math.pow(2,1024));", "Infinity" ],
235
+ [ "tofloat(Math.pow(2,512) * Math.pow(2,512));", "Infinity" ],
236
+ [ "tofloat(Math.pow(2,512) * -Math.pow(2,512));", "-Infinity" ],
237
+ [ "tofloat(Math.pow(2,-537) * Math.pow(2,-537));", "5e-324" ],
238
+
239
+
240
+ //
241
+ // bignums and Uint8Arrays
242
+ //
243
+
244
+ [ "ba = xnew(js.g.Uint8Array, [32, 48]);", "[Uint8Array 32,48]" ],
245
+ [ "$$ = toint(ba);", "8240" ],
246
+ [ "xnew($$);", "[Uint8Array 32,48]" ],
247
+
248
+ [ "ba = xnew(js.g.Uint8Array, [55, 32, 48]);", "[Uint8Array 55,32,48]" ],
249
+ [ "$$ = toint(ba);", "3612720" ],
250
+ [ "xnew($$);", "[Uint8Array 55,32,48]" ],
251
+
252
+ [ "xnew(5553);", "[Uint8Array 21,177]" ],
253
+ [ "xnew(-5553);", "[Uint8Array 21,177]" ],
254
+ [ "ba = xnew(js.g.Uint8Array, [21,177]);", "[Uint8Array 21,177]" ],
255
+ [ "$$ = toint(ba);", "5553" ],
256
+
257
+ //
258
+ // bitwise operators
259
+ //
260
+
261
+ [ "bitand(5, 1);", "1" ],
262
+ [ "bitand(-5, 1);", "1" ],
263
+ [ "bitand(5, -1);", "5" ],
264
+ [ "bitand(-5, -1);", "-5" ],
265
+ [ "bitand(5, 1.0);", "1.0" ],
266
+ [ "bitand(-5, 1.0);", "1.0" ],
267
+ [ "bitand(5, -1.0);", "5.0" ],
268
+ [ "bitand(-5, -1.0);", "-5.0" ],
269
+
270
+ [ "bitor(8, 2);", "10" ],
271
+ [ "bitor(-8, 2);", "-6" ],
272
+ [ "bitor(8, -2);", "-2" ],
273
+ [ "bitor(-8, -2);", "-2" ],
274
+ [ "bitor(8, 2.0);", "10.0" ],
275
+ [ "bitor(-8, 2.0);", "-6.0" ],
276
+ [ "bitor(8, -2.0);", "-2.0" ],
277
+ [ "bitor(-8, -2.0);", "-2.0" ],
278
+
279
+ [ "bitxor(8, 2);", "10" ],
280
+ [ "bitxor(-8, 2);", "-6" ],
281
+ [ "bitxor(8, -2);", "-10" ],
282
+ [ "bitxor(-8, -2);", "6" ],
283
+ [ "bitxor(8, 2.0);", "10.0" ],
284
+ [ "bitxor(-8, 2.0);", "-6.0" ],
285
+ [ "bitxor(8, -2.0);", "-10.0" ],
286
+ [ "bitxor(-8, -2.0);", "6.0" ],
287
+
288
+ [ "bitnot(7);", "-8" ],
289
+ [ "bitnot(-7);", "6" ],
290
+ [ "bitnot(7.0);", "-8.0" ],
291
+ [ "bitnot(-7.0);", "6.0" ],
292
+
293
+ [ "shiftleft(7,0);", "7" ],
294
+ [ "shiftleft(7,0.0);", "7.0" ],
295
+ [ "shiftleft(7,-1);", "7" ],
296
+ [ "shiftleft(7,-1.0);", "-2147483648.0" ],
297
+
298
+ [ "shiftleft(7,4);", "112" ],
299
+ [ "shiftleft(7,40);", "7696581394432" ],
300
+ [ "shiftleft(7,4.0);", "112.0" ],
301
+ [ "shiftleft(7,40.0);", "1792.0" ],
302
+
303
+ [ "shiftleft(-7,4);", "-112" ],
304
+ [ "shiftleft(-7,40);", "-7696581394432" ],
305
+ [ "shiftleft(-7,4.0);", "-112.0" ],
306
+ [ "shiftleft(-7,40.0);", "-1792.0" ],
307
+
308
+ [ "shiftright(7,0);", "7" ],
309
+ [ "shiftright(7,0.0);", "7.0" ],
310
+ [ "shiftright(7,-1);", "7" ],
311
+ [ "shiftright(7,-1.0);", "0.0" ],
312
+
313
+ [ "shiftright(23042,4);", "1440" ],
314
+ [ "shiftright(23042,40);", "0" ],
315
+ [ "shiftright(23042,4.0);", "1440.0" ],
316
+ [ "shiftright(23042,40.0);", "90.0" ],
317
+
318
+ [ "shiftright(-23042,4);", "-1441" ],
319
+ [ "shiftright(-23042,40);", "-1" ],
320
+ [ "shiftright(-23042,4.0);", "-1441.0" ],
321
+ [ "shiftright(-23042,40.0);", "-91.0" ],
322
+
323
+
324
+ //
325
+ // Javascript Number functions
326
+ //
327
+
328
+ [ "55.isInteger();", "true" ],
329
+ [ "55 .isInteger();", "true" ],
330
+ [ "55.5 .isInteger();", "false" ],
331
+
332
+ [ "33 .toString(16);", "\"21\"" ],
333
+ [ "33 .toString(16);", "\"21\"" ],
334
+ [ "xcall(Number, toString, 33, 16);", "\"21\"" ],
335
+ [ "xapply(Number, toString, list(33, 16));", "\"21\"" ],
336
+
337
+ [ "Number.isFinite(1.0/0.0);", "false" ],
338
+ [ "Number.isNaN(1.0/0.0);", "false" ],
339
+ [ "Number.isNaN(0.0/1.0);", "false" ],
340
+ [ "Number.isNaN(0.0/0.0);", "true" ],
341
+
342
+ [ "(1.0/3.0).toPrecision(4);", "\"0.3333\"" ],
343
+ [ "xcall(Number, toPrecision, 1.0/3.0, 4);", "\"0.3333\"" ],
344
+ [ "xapply(Number, toPrecision, list(1.0/3.0, 4));", "\"0.3333\"" ],
345
+
346
+
347
+ //
348
+ // numeric types
349
+ //
350
+
351
+ [ "float(1);", "false" ],
352
+ [ "float(1.0);", "true" ],
353
+ [ "integer(1);", "true" ],
354
+ [ "integer(1.0);", "false" ],
355
+
356
+ [ "numeric();", "false" ],
357
+ [ "numeric(1);", "true" ],
358
+ [ "numeric(1.0);", "true" ],
359
+ [ "numeric(1, 2);", "true" ],
360
+ [ "numeric(1.0, 2.0);", "true" ],
361
+ [ "numeric(1, 2.0);", "true" ],
362
+ [ "numeric(1, \"abc\");", "false" ],
363
+ [ "numeric(1.0, \"abc\");", "false" ],
364
+
365
+
366
+ //
367
+ // Comparisons
368
+ //
369
+
370
+ [ "getproc(`>);", "[Builtin greater]" ],
371
+ [ "getproc(`<);", "[Builtin lesser]" ],
372
+ [ "getproc(`equal);", "[Builtin equal]" ],
373
+ [ "getproc(`==);", "[Builtin equal]" ],
374
+
375
+ [ "1 > false;", "false" ],
376
+ [ "1 >= false;", "false" ],
377
+ [ "1 == false;", "false" ],
378
+ [ "1 <= false;", "false" ],
379
+ [ "1 < false;", "false" ],
380
+
381
+ [ "false > 1;", "false" ],
382
+ [ "false >= 1;", "false" ],
383
+ [ "false == 1;", "false" ],
384
+ [ "false <= 1;", "false" ],
385
+ [ "false < 1;", "false" ],
386
+
387
+ [ "1 > 2;", "false" ],
388
+ [ "1 >= 2;", "false" ],
389
+ [ "1 == 2;", "false" ],
390
+ [ "1 <= 2;", "true" ],
391
+ [ "1 < 2;", "true" ],
392
+ [ "1 == 1;", "true" ],
393
+ [ "1.0 == 1;", "true" ],
394
+
395
+ [ "2 > 1;", "true" ],
396
+ [ "2 >= 1;", "true" ],
397
+ [ "2 == 1;", "false" ],
398
+ [ "2 <= 1;", "false" ],
399
+ [ "2 < 1;", "false" ],
400
+ [ "2 == 2;", "true" ],
401
+ [ "2.0 == 2;", "true" ],
402
+ [ "2 == 2.0;", "true" ],
403
+
404
+ [ "1.0 > false;", "false" ],
405
+ [ "1.0 >= false;", "false" ],
406
+ [ "1.0 == false;", "false" ],
407
+ [ "1.0 <= false;", "false" ],
408
+ [ "1.0 < false;", "false" ],
409
+
410
+ [ "false > 1.0;", "false" ],
411
+ [ "false >= 1.0;", "false" ],
412
+ [ "false == 1.0;", "false" ],
413
+ [ "false <= 1.0;", "false" ],
414
+ [ "false < 1.0;", "false" ],
415
+
416
+ [ "1.0 > 2.0;", "false" ],
417
+ [ "1.0 >= 2.0;", "false" ],
418
+ [ "1.0 == 2.0;", "false" ],
419
+ [ "1.0 <= 2.0;", "true" ],
420
+ [ "1.0 < 2.0;", "true" ],
421
+ [ "1.0 == 1.0;", "true" ],
422
+ [ "1.0 eq 1.0;", "true" ],
423
+
424
+ [ "2.0 > 1.0;", "true" ],
425
+ [ "2.0 >= 1.0;", "true" ],
426
+ [ "2.0 == 1.0;", "false" ],
427
+ [ "2.0 <= 1.0;", "false" ],
428
+ [ "2.0 < 1.0;", "false" ],
429
+ [ "2.0 != 1.0;", "true" ],
430
+ [ "2.0 == 2.0;", "true" ],
431
+ [ "2.0 eq 2.0;", "true" ],
432
+
433
+ [ "1 > 2.0;", "false" ],
434
+ [ "1 >= 2.0;", "false" ],
435
+ [ "1 == 2.0;", "false" ],
436
+ [ "1 <= 2.0;", "true" ],
437
+ [ "1 < 2.0;", "true" ],
438
+ [ "1 != 2.0;", "true" ],
439
+ [ "1 == 1.0;", "true" ],
440
+ [ "1 eq 1.0;", "false" ],
441
+
442
+ [ "2 > 1.0;", "true" ],
443
+ [ "2 >= 1.0;", "true" ],
444
+ [ "2 == 1.0;", "false" ],
445
+ [ "2 <= 1.0;", "false" ],
446
+ [ "2 < 1.0;", "false" ],
447
+ [ "2 != 1.0;", "true" ],
448
+ [ "2 == 2.0;", "true" ],
449
+ [ "2 eq 2.0;", "false" ]
450
+ ]);
@@ -0,0 +1,63 @@
1
+ /*
2
+ * test_05_strings.nlg
3
+ * Test
4
+ *
5
+ * Perform basic unit tests for Naan.
6
+ *
7
+ * column positioning: // // !
8
+ *
9
+ * Copyright (c) 2017-2021 by Richard C. Zulch
10
+ *
11
+ */
12
+
13
+
14
+ /*
15
+ * Test Category 5 - strings
16
+ *
17
+ */
18
+
19
+ RegisterTestCategory("strings", [
20
+ [ "4+3;", "7" ], // generic first test
21
+
22
+
23
+ //
24
+ // string literals
25
+ //
26
+
27
+ [ '"abc";', '"abc"' ],
28
+ [ "'abc';", '"abc"' ],
29
+ [ '"abc" "def";', '"abcdef"' ],
30
+ [ ' "abc\ndef";', '"abc\\ndef"' ],
31
+ [ ' "abc\n def";', '"abc\\ndef"' ],
32
+ [ ' "abc\n def";', '"abc\\n def"' ],
33
+ [ " 'abc\ndef';", '"abc\\ndef"' ],
34
+ [ " 'abc\n def';", '"abc\\n def"' ],
35
+ [ " 'abc\n def';", '"abc\\n def"' ],
36
+
37
+
38
+ //
39
+ // string builtins
40
+ //
41
+
42
+ [ "\"abc\";", "\"abc\"" ],
43
+ [ "strcat(\"abc\", \"def\");", "\"abcdef\"" ],
44
+ [ "c=compress(\"abc\", \"def\");", "abcdef" ],
45
+ [ "typeof(c);", "symbol" ],
46
+ [ "explode(c);>", "(\"a\" \"b\" \"c\" \"d\" \"e\" \"f\")" ],
47
+ [ "c=compress(\"b\", 123);", "b123" ],
48
+
49
+
50
+ //
51
+ // string native functions
52
+ //
53
+
54
+ [ "\"abc\".indexOf(\"b\");", "1" ],
55
+ [ "strcat(\"0x\", 33 .toString(16));", "\"0x21\"" ],
56
+ [ "$$=unicode(0x2748);", "\"❈\"" ], // "heavy sparkle"
57
+ [ "strcat(\"0x\", unicode($$).toString(16));", "\"0x2748\"" ],
58
+ [ "\"abc\".toString();", "\"abc\"" ],
59
+ [ "xapply(String, toString, list(\"abc\"));", "\"abc\"" ],
60
+ [ "xcall(String, toString, \"abc\");", "\"abc\"" ],
61
+ [ "function(local match) { \"abc\".match(RegExp(\"abc\")) }();", "[Array abc]" ]
62
+
63
+ ]);