mittens 0.3.1 → 0.3.2

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +1 -0
  4. data/README.md +2 -2
  5. data/Rakefile +10 -3
  6. data/lib/mittens/version.rb +1 -1
  7. data/vendor/snowball/.github/workflows/ci.yml +144 -17
  8. data/vendor/snowball/.github/workflows/coverage.yml +117 -0
  9. data/vendor/snowball/.github/workflows/runtime-tests.yml +26 -0
  10. data/vendor/snowball/.gitignore +33 -7
  11. data/vendor/snowball/CONTRIBUTING.rst +7 -0
  12. data/vendor/snowball/COPYING +1 -1
  13. data/vendor/snowball/GNUmakefile +736 -298
  14. data/vendor/snowball/NEWS +1394 -7
  15. data/vendor/snowball/README.rst +8 -8
  16. data/vendor/snowball/ada/generate/generate.adb +5 -5
  17. data/vendor/snowball/ada/src/stemmer.adb +177 -188
  18. data/vendor/snowball/ada/src/stemmer.ads +86 -89
  19. data/vendor/snowball/ada/src/stemwords.adb +21 -5
  20. data/vendor/snowball/algorithms/czech.sbl +255 -0
  21. data/vendor/snowball/algorithms/danish.sbl +22 -10
  22. data/vendor/snowball/algorithms/english.sbl +7 -4
  23. data/vendor/snowball/algorithms/esperanto.sbl +6 -7
  24. data/vendor/snowball/algorithms/estonian.sbl +9 -4
  25. data/vendor/snowball/algorithms/finnish.sbl +33 -21
  26. data/vendor/snowball/algorithms/german.sbl +5 -0
  27. data/vendor/snowball/algorithms/indonesian.sbl +115 -96
  28. data/vendor/snowball/algorithms/italian.sbl +26 -1
  29. data/vendor/snowball/algorithms/lithuanian.sbl +13 -13
  30. data/vendor/snowball/algorithms/norwegian.sbl +17 -6
  31. data/vendor/snowball/algorithms/persian.sbl +387 -0
  32. data/vendor/snowball/algorithms/polish.sbl +177 -0
  33. data/vendor/snowball/algorithms/sesotho.sbl +115 -0
  34. data/vendor/snowball/algorithms/turkish.sbl +4 -4
  35. data/vendor/snowball/compiler/analyser.c +2002 -711
  36. data/vendor/snowball/compiler/driver.c +460 -298
  37. data/vendor/snowball/compiler/generator.c +439 -1965
  38. data/vendor/snowball/compiler/generator_ada.c +605 -430
  39. data/vendor/snowball/compiler/generator_c.c +2227 -0
  40. data/vendor/snowball/compiler/generator_csharp.c +365 -274
  41. data/vendor/snowball/compiler/generator_dart.c +1476 -0
  42. data/vendor/snowball/compiler/generator_go.c +348 -270
  43. data/vendor/snowball/compiler/generator_java.c +330 -233
  44. data/vendor/snowball/compiler/generator_js.c +534 -385
  45. data/vendor/snowball/compiler/generator_pascal.c +361 -320
  46. data/vendor/snowball/compiler/generator_php.c +1445 -0
  47. data/vendor/snowball/compiler/generator_python.c +399 -299
  48. data/vendor/snowball/compiler/generator_rust.c +370 -261
  49. data/vendor/snowball/compiler/generator_zig.c +1474 -0
  50. data/vendor/snowball/compiler/header.h +153 -86
  51. data/vendor/snowball/compiler/space.c +121 -63
  52. data/vendor/snowball/compiler/tokeniser.c +286 -182
  53. data/vendor/snowball/compiler/tokens.h +71 -0
  54. data/vendor/snowball/csharp/Snowball/Among.cs +14 -26
  55. data/vendor/snowball/csharp/Snowball/AssemblyInfo.cs +3 -3
  56. data/vendor/snowball/csharp/Snowball/Stemmer.cs +41 -45
  57. data/vendor/snowball/csharp/Stemwords/Program.cs +20 -14
  58. data/vendor/snowball/cxx/.gitignore +4 -0
  59. data/vendor/snowball/cxx/generate_algorithms.pl +87 -0
  60. data/vendor/snowball/cxx/stemmer.h +12 -0
  61. data/vendor/snowball/cxx/stemwords.cxx +176 -0
  62. data/vendor/snowball/cxx/utilities.cxx +2 -0
  63. data/vendor/snowball/dart/.gitignore +4 -0
  64. data/vendor/snowball/dart/analysis_options.yaml +1 -0
  65. data/vendor/snowball/dart/example/test_app.dart +65 -0
  66. data/vendor/snowball/dart/generate_algorithms.pl +21 -0
  67. data/vendor/snowball/dart/lib/snowball.dart +18 -0
  68. data/vendor/snowball/dart/lib/src/snowball.dart +339 -0
  69. data/vendor/snowball/dart/pubspec.yaml +17 -0
  70. data/vendor/snowball/doc/libstemmer_dart_README +37 -0
  71. data/vendor/snowball/doc/libstemmer_js_README +2 -2
  72. data/vendor/snowball/doc/libstemmer_php_README +38 -0
  73. data/vendor/snowball/doc/libstemmer_python_README +3 -3
  74. data/vendor/snowball/examples/stemwords.c +18 -3
  75. data/vendor/snowball/go/README.md +12 -4
  76. data/vendor/snowball/go/env.go +12 -14
  77. data/vendor/snowball/go/stemwords/main.go +2 -1
  78. data/vendor/snowball/java/org/tartarus/snowball/CharArraySequence.java +36 -0
  79. data/vendor/snowball/java/org/tartarus/snowball/SnowballProgram.java +17 -34
  80. data/vendor/snowball/java/org/tartarus/snowball/SnowballStemmer.java +0 -2
  81. data/vendor/snowball/javascript/base-stemmer.js +219 -252
  82. data/vendor/snowball/javascript/stemwords.js +86 -58
  83. data/vendor/snowball/libstemmer/mkmodules.pl +1 -1
  84. data/vendor/snowball/libstemmer/modules.txt +4 -0
  85. data/vendor/snowball/pascal/SnowballProgram.pas +18 -31
  86. data/vendor/snowball/php/base-stemmer.php +453 -0
  87. data/vendor/snowball/php/stemwords.php +25 -0
  88. data/vendor/snowball/python/create_init.py +16 -21
  89. data/vendor/snowball/python/pyproject.toml +3 -0
  90. data/vendor/snowball/python/setup.py +5 -7
  91. data/vendor/snowball/python/snowballstemmer/among.py +1 -2
  92. data/vendor/snowball/python/snowballstemmer/basestemmer.py +24 -33
  93. data/vendor/snowball/python/stemwords.py +72 -63
  94. data/vendor/snowball/runtime/api.c +11 -42
  95. data/vendor/snowball/runtime/api.h +11 -9
  96. data/vendor/snowball/runtime/snowball_runtime.h +110 -0
  97. data/vendor/snowball/runtime/utilities.c +282 -106
  98. data/vendor/snowball/rust/src/main.rs +2 -2
  99. data/vendor/snowball/rust/src/snowball/snowball_env.rs +7 -9
  100. data/vendor/snowball/tests/compilertest +62 -0
  101. data/vendor/snowball/tests/errors/ae-errors.sbl +53 -0
  102. data/vendor/snowball/tests/errors/ae-errors.stderr +8 -0
  103. data/vendor/snowball/tests/errors/bad-dollar.sbl +14 -0
  104. data/vendor/snowball/tests/errors/bad-dollar.stderr +4 -0
  105. data/vendor/snowball/tests/errors/bad-grouping-definition.sbl +9 -0
  106. data/vendor/snowball/tests/errors/bad-grouping-definition.stderr +6 -0
  107. data/vendor/snowball/tests/errors/missing-bra.sbl +6 -0
  108. data/vendor/snowball/tests/errors/missing-bra.stderr +3 -0
  109. data/vendor/snowball/tests/errors/missing-command.sbl +9 -0
  110. data/vendor/snowball/tests/errors/missing-command.stderr +1 -0
  111. data/vendor/snowball/tests/errors/missing-ket-backwardmode.sbl +3 -0
  112. data/vendor/snowball/tests/errors/missing-ket-backwardmode.stderr +1 -0
  113. data/vendor/snowball/tests/errors/missing-ket.sbl +7 -0
  114. data/vendor/snowball/tests/errors/missing-ket.stderr +6 -0
  115. data/vendor/snowball/tests/errors/notdefined.sbl +4 -0
  116. data/vendor/snowball/tests/errors/notdefined.stderr +2 -0
  117. data/vendor/snowball/tests/errors/string-omitted.sbl +5 -0
  118. data/vendor/snowball/tests/errors/string-omitted.stderr +1 -0
  119. data/vendor/snowball/tests/errors/undeclared.sbl +20 -0
  120. data/vendor/snowball/tests/errors/undeclared.stderr +9 -0
  121. data/vendor/snowball/tests/errors/unexpected-token.sbl +24 -0
  122. data/vendor/snowball/tests/errors/unexpected-token.stderr +17 -0
  123. data/vendor/snowball/tests/errors/wrongdirection.sbl +14 -0
  124. data/vendor/snowball/tests/errors/wrongdirection.stderr +1 -0
  125. data/vendor/snowball/tests/runtime/among.sbl +19 -0
  126. data/vendor/snowball/tests/runtime/arithmeticexpr.sbl +86 -0
  127. data/vendor/snowball/tests/runtime/attachinsert.sbl +47 -0
  128. data/vendor/snowball/tests/runtime/booleans.sbl +19 -0
  129. data/vendor/snowball/tests/runtime/externals.sbl +22 -0
  130. data/vendor/snowball/tests/runtime/hop.sbl +12 -0
  131. data/vendor/snowball/tests/runtime/integertests.sbl +60 -0
  132. data/vendor/snowball/tests/runtime/intlimits.sbl +25 -0
  133. data/vendor/snowball/tests/runtime/naming.sbl +20 -0
  134. data/vendor/snowball/tests/runtime/not.sbl +30 -0
  135. data/vendor/snowball/tests/runtime/or.sbl +17 -0
  136. data/vendor/snowball/tests/runtime/repeat.sbl +16 -0
  137. data/vendor/snowball/tests/runtime/setlimit.sbl +24 -0
  138. data/vendor/snowball/tests/runtime/sizelen.sbl +56 -0
  139. data/vendor/snowball/tests/runtime/slice.sbl +27 -0
  140. data/vendor/snowball/tests/runtime/stringdollar.sbl +39 -0
  141. data/vendor/snowball/tests/runtime/strings.sbl +66 -0
  142. data/vendor/snowball/tests/runtime/test.sbl +19 -0
  143. data/vendor/snowball/tests/stemtest.c +41 -1
  144. data/vendor/snowball/tests/syntax/canon.sbl +32 -0
  145. data/vendor/snowball/tests/syntax/canon.stderr +0 -0
  146. data/vendor/snowball/tests/syntax/canon.syntax +57 -0
  147. data/vendor/snowball/tests/syntax/emptyprogram.sbl +2 -0
  148. data/vendor/snowball/tests/syntax/emptyprogram.syntax +0 -0
  149. data/vendor/snowball/tests/syntax/groupings.sbl +11 -0
  150. data/vendor/snowball/tests/syntax/inline.sbl +144 -0
  151. data/vendor/snowball/tests/syntax/inline.stderr +0 -0
  152. data/vendor/snowball/tests/syntax/inline.syntax +121 -0
  153. data/vendor/snowball/tests/syntax/legacy.sbl +17 -0
  154. data/vendor/snowball/tests/syntax/legacy.stderr +5 -0
  155. data/vendor/snowball/tests/syntax/legacy.syntax +19 -0
  156. data/vendor/snowball/tests/syntax/loops.sbl +14 -0
  157. data/vendor/snowball/tests/syntax/loops.stderr +9 -0
  158. data/vendor/snowball/tests/syntax/loops.syntax +29 -0
  159. data/vendor/snowball/tests/syntax/noops.sbl +76 -0
  160. data/vendor/snowball/tests/syntax/noops.stderr +27 -0
  161. data/vendor/snowball/tests/syntax/noops.syntax +135 -0
  162. data/vendor/snowball/tests/syntax/simplifyae.sbl +21 -0
  163. data/vendor/snowball/tests/syntax/simplifyae.stderr +0 -0
  164. data/vendor/snowball/tests/syntax/simplifyae.syntax +39 -0
  165. data/vendor/snowball/tests/syntax/unused.sbl +18 -0
  166. data/vendor/snowball/tests/syntax/unused.stderr +7 -0
  167. data/vendor/snowball/tests/syntax/unused.syntax +3 -0
  168. data/vendor/snowball/zig/env.zig +599 -0
  169. data/vendor/snowball/zig/generate_algorithms.pl +19 -0
  170. data/vendor/snowball/zig/stemwords.zig +123 -0
  171. metadata +102 -4
  172. data/vendor/snowball/compiler/syswords.h +0 -86
  173. data/vendor/snowball/runtime/header.h +0 -62
@@ -0,0 +1,53 @@
1
+ externals (stem)
2
+ integers (x)
3
+ define stem as (
4
+ // One token per line to check which token the line number is taken from.
5
+
6
+ $x
7
+ =
8
+ 1
9
+ / // Error here
10
+ 0
11
+
12
+ $x
13
+ /= // Error here
14
+ 0
15
+
16
+ $
17
+ (
18
+ x
19
+ = // Error here
20
+ 0
21
+ )
22
+
23
+ $
24
+ stem // Error here
25
+ =
26
+ 0
27
+
28
+ $
29
+ unknown // Error here
30
+ =
31
+ 0
32
+
33
+ $
34
+ (
35
+ x
36
+ => // Error here
37
+ 0
38
+ )
39
+
40
+ $
41
+ (
42
+ x
43
+ /= // Error here
44
+ 0
45
+ )
46
+
47
+ $
48
+ (
49
+ x
50
+ += // Error here
51
+ 0
52
+ )
53
+ )
@@ -0,0 +1,8 @@
1
+ errors/ae-errors.sbl:9: Division by zero
2
+ errors/ae-errors.sbl:13: Division by zero
3
+ errors/ae-errors.sbl:19: Expected relational operator, got '=' (did you mean '=='?)
4
+ errors/ae-errors.sbl:24: 'stem' not of type integer or string
5
+ errors/ae-errors.sbl:29: 'unknown' undeclared
6
+ errors/ae-errors.sbl:36: Expected relational operator, got '=>' (did you mean '>='?)
7
+ errors/ae-errors.sbl:43: Expected relational operator, got '/=' (did you mean '!='?)
8
+ errors/ae-errors.sbl:50: Expected relational operator, got '+='
@@ -0,0 +1,14 @@
1
+ strings ( x )
2
+
3
+ externals ( stem )
4
+
5
+ booleans ( b )
6
+
7
+ groupings ( g )
8
+
9
+ define stem as (
10
+ $ = 'xxx'
11
+ $stem = 1
12
+ $b = 1
13
+ $g = 1
14
+ )
@@ -0,0 +1,4 @@
1
+ errors/bad-dollar.sbl:10: unexpected = in integer test expression after $
2
+ errors/bad-dollar.sbl:11: 'stem' not of type integer or string
3
+ errors/bad-dollar.sbl:12: 'b' not of type integer or string
4
+ errors/bad-dollar.sbl:13: 'g' not of type integer or string
@@ -0,0 +1,9 @@
1
+ groupings (g1 g2 g3 g4 gempty gself)
2
+ define g1
3
+ define g2 'abc' -
4
+ define g3
5
+ externals (stem)
6
+ define stem as ()
7
+ define gempty 'a' - 'a'
8
+ define gself gself
9
+ define g4 stem
@@ -0,0 +1,6 @@
1
+ errors/bad-grouping-definition.sbl:3: unexpected define in grouping definition after name
2
+ errors/bad-grouping-definition.sbl:4: unexpected define in grouping definition after -
3
+ errors/bad-grouping-definition.sbl:5: unexpected externals in grouping definition after name
4
+ errors/bad-grouping-definition.sbl:7: empty grouping
5
+ errors/bad-grouping-definition.sbl:8: gself defined in terms of itself
6
+ errors/bad-grouping-definition.sbl:9: 'stem' not of type grouping
@@ -0,0 +1,6 @@
1
+ strings
2
+ externals (stem)
3
+ backwardmode
4
+ define stem as (
5
+ among
6
+ )
@@ -0,0 +1,3 @@
1
+ errors/missing-bra.sbl:2: ( omitted after strings
2
+ errors/missing-bra.sbl:4: ( omitted after backwardmode
3
+ errors/missing-bra.sbl:6: ( omitted after among
@@ -0,0 +1,9 @@
1
+ // Regression test for segfault introduced and fixed in git before 3.1.0.
2
+
3
+ externals (stem)
4
+ define stem as ( 'q' or )
5
+
6
+ // Also, we swallowed the token for the `)` and emitted an bogus extra error
7
+ // here (this bug was present in releases):
8
+ //
9
+ // ) omitted after )
@@ -0,0 +1 @@
1
+ errors/missing-command.sbl:4: unexpected ) after or
@@ -0,0 +1,3 @@
1
+ externals (stem)
2
+ routines (f)
3
+ backwardmode ( define f as true
@@ -0,0 +1 @@
1
+ errors/missing-ket-backwardmode.sbl:4: ) omitted after true
@@ -0,0 +1,7 @@
1
+ externals (stem
2
+ integers (i
3
+ define stem as (
4
+ non-()
5
+ $(cursor > 0
6
+ $i = (1 + 2
7
+ hop 5 [tolimit] delete
@@ -0,0 +1,6 @@
1
+ errors/missing-ket.sbl:2: ) omitted after name
2
+ errors/missing-ket.sbl:3: ) omitted after name
3
+ errors/missing-ket.sbl:4: name omitted after -
4
+ errors/missing-ket.sbl:6: ) omitted after number
5
+ errors/missing-ket.sbl:7: ) omitted after number
6
+ errors/missing-ket.sbl:8: ) omitted after delete
@@ -0,0 +1,4 @@
1
+ externals (stem)
2
+ groupings (g)
3
+ routines (r)
4
+ define stem as (g r)
@@ -0,0 +1,2 @@
1
+ errors/notdefined.sbl:4: routine 'r' declared but not defined
2
+ errors/notdefined.sbl:4: grouping 'g' declared but not defined
@@ -0,0 +1,5 @@
1
+ externals (stem)
2
+ define stem as (
3
+ <-
4
+ hop 2
5
+ )
@@ -0,0 +1 @@
1
+ errors/string-omitted.sbl:4: string omitted after <-
@@ -0,0 +1,20 @@
1
+ // Regression test for bug reporting names.
2
+ externals (stem)
3
+ booleans (rb longbool rb)
4
+ groupings (rg longgroup rg)
5
+ integers (ri longint ri)
6
+ strings (rs longstring rs)
7
+
8
+ define rg 'rg'
9
+ define longgroup 'aeiou'
10
+ define rg 'xy'
11
+
12
+ define stem as (
13
+ set longbool
14
+ set xb
15
+ $longint = 1
16
+ $xi = 1
17
+ ri
18
+ $longstring = ''
19
+ $(sizeof xs > 0)
20
+ )
@@ -0,0 +1,9 @@
1
+ errors/undeclared.sbl:3: 'rb' re-declared
2
+ errors/undeclared.sbl:4: 'rg' re-declared
3
+ errors/undeclared.sbl:5: 'ri' re-declared
4
+ errors/undeclared.sbl:6: 'rs' re-declared
5
+ errors/undeclared.sbl:10: 'rg' redefined
6
+ errors/undeclared.sbl:14: 'xb' undeclared
7
+ errors/undeclared.sbl:16: 'xi' undeclared
8
+ errors/undeclared.sbl:17: integer name 'ri' misplaced
9
+ errors/undeclared.sbl:19: 'xs' undeclared
@@ -0,0 +1,24 @@
1
+ externals (stem)
2
+ integers (i)
3
+ groupings (g)
4
+ define g +
5
+ define stem as (
6
+ $
7
+ next
8
+ $(i 0)
9
+ $i = hop 2
10
+ $(i = )
11
+ backwardmode (next)
12
+ $(i = 1)
13
+ $(i /= 1)
14
+ $(i => 1)
15
+ $(i += 1)
16
+ $(i -= 1)
17
+ $(i *= 1)
18
+ )
19
+ next
20
+
21
+ strings (s1 s2)
22
+ define s1 'string'
23
+ define s2 as 'string'
24
+ define
@@ -0,0 +1,17 @@
1
+ errors/unexpected-token.sbl:4: unexpected + in grouping definition after name
2
+ errors/unexpected-token.sbl:7: unexpected next in integer test expression after $
3
+ errors/unexpected-token.sbl:8: unexpected number 0 in integer test expression after name
4
+ errors/unexpected-token.sbl:9: unexpected hop in integer expression after =
5
+ errors/unexpected-token.sbl:10: Expected relational operator, got '=' (did you mean '=='?)
6
+ errors/unexpected-token.sbl:10: unexpected ) in integer expression after =
7
+ errors/unexpected-token.sbl:11: unexpected backwardmode after )
8
+ errors/unexpected-token.sbl:12: Expected relational operator, got '=' (did you mean '=='?)
9
+ errors/unexpected-token.sbl:13: Expected relational operator, got '/=' (did you mean '!='?)
10
+ errors/unexpected-token.sbl:14: Expected relational operator, got '=>' (did you mean '>='?)
11
+ errors/unexpected-token.sbl:15: Expected relational operator, got '+='
12
+ errors/unexpected-token.sbl:16: Expected relational operator, got '-='
13
+ errors/unexpected-token.sbl:17: Expected relational operator, got '*='
14
+ errors/unexpected-token.sbl:19: unexpected next after )
15
+ errors/unexpected-token.sbl:22: 's1' not of type grouping
16
+ errors/unexpected-token.sbl:23: 's2' not of type routine or external
17
+ errors/unexpected-token.sbl:25: name omitted after define
@@ -0,0 +1,14 @@
1
+ externals ( stem )
2
+ routines ( remove_suffix )
3
+
4
+ backwardmode (
5
+ define remove_suffix as (
6
+ [substring] among (
7
+ 'al' 'ance' 'ence' 'er' 'ic' (delete)
8
+ )
9
+ )
10
+ )
11
+
12
+ define stem as (
13
+ remove_suffix
14
+ )
@@ -0,0 +1 @@
1
+ errors/wrongdirection.sbl:13: routine 'remove_suffix' mis-used in string forward mode
@@ -0,0 +1,19 @@
1
+ // Test among.
2
+
3
+ externals (stem)
4
+
5
+ routines (gate)
6
+
7
+ stringescapes {}
8
+
9
+ define gate as 'q'
10
+
11
+ define stem as (
12
+ test (
13
+ among (
14
+ 'x' ()
15
+ '' gate ()
16
+ )
17
+ ='gated default among case did not fail as expected'
18
+ )
19
+ )
@@ -0,0 +1,86 @@
1
+ // Test arithmetic expressions (AEs).
2
+ externals (stem)
3
+ routines (operators pseudovars)
4
+ integers (x y)
5
+
6
+ define stem as (
7
+ operators
8
+ pseudovars
9
+ )
10
+
11
+ define operators as (
12
+ $x = 3 * 2
13
+ $x *= 5
14
+ $(x * 7 == 210) or fail='multiplication gave wrong answer'
15
+
16
+ $x = 1 + 2
17
+ $x += 4
18
+ $(x + 8 == 15) or fail='addition gave wrong answer'
19
+
20
+ $x = 1 - 2
21
+ $x -= 4
22
+ $(8 - x == 13) or fail='subtraction gave wrong answer'
23
+
24
+ $(-x == 5) or fail='negation gave wrong answer'
25
+
26
+ // Test division truncates towards zero.
27
+
28
+ $x = 7
29
+ $x /= 4
30
+ $(x == 1) or fail='/= should truncate towards zero (+/+)'
31
+
32
+ $y = 7
33
+ $x = y / 4
34
+ $(x == 1) or fail='/ should truncate towards zero (+/+)'
35
+
36
+ $(7 / 4 * 4 == 4) or fail='should use integer / (+/+)'
37
+
38
+ $x = -7
39
+ $x /= -4
40
+ $(x == 1) or fail='/= should truncate towards zero (-/-)'
41
+
42
+ $y = -7
43
+ $x = y / -4
44
+ $(x == 1) or fail='/ should truncate towards zero (-/-)'
45
+
46
+ $(-7 / -4 * 4 == 4) or fail='should use integer / (-/-)'
47
+
48
+ $x = -7
49
+ $x /= 4
50
+ $(x == -1) or fail='/= should truncate towards zero (-/+)'
51
+
52
+ $y = -7
53
+ $x = y / 4
54
+ $(x == -1) or fail='/ should truncate towards zero (-/+)'
55
+
56
+ $(-7 / 4 * 4 == -4) or fail='should use integer / (-/+)'
57
+
58
+ $x = 7
59
+ $x /= -4
60
+ $(x == -1) or fail='/= should truncate towards zero (+/-)'
61
+
62
+ $y = 7
63
+ $x = y / -4
64
+ $(x == -1) or fail='/ should truncate towards zero (+/-)'
65
+
66
+ $(7 / -4 * 4 == -4) or fail='should use integer / (+/-)'
67
+
68
+ // Some target languages warn or even error for self-assignment.
69
+ $x = x $(x == -1) or fail='self assignment changed value'
70
+ $x = cursor tomark cursor $(x == cursor) or fail='tomark cursor moved cursor'
71
+ )
72
+
73
+ define pseudovars as (
74
+ $(cursor == 0) or fail='cursor should be 0'
75
+ $(limit == 2) or fail='limit should be 2'
76
+ test (next $(cursor == 1)) or fail='cursor should be 1'
77
+ test (hop 2 $(cursor == 2)) or fail='cursor should be 2'
78
+ setlimit next for $(limit == 1) or fail='limit should be 1'
79
+ test (reverse $(cursor == 0)) or fail='cursor should be 0 (reverse)'
80
+ test (reverse $(limit == 0)) or fail='limit should be 0 (reverse)'
81
+ test (next reverse $(limit == 0)) or fail='limit should be 0 (reverse)'
82
+ test (next reverse $(cursor == 1)) or fail='cursor should be 1 (reverse)'
83
+ test (backwards $(cursor == 2)) or fail='cursor should be 2 (backwards)'
84
+ test (backwards $(limit == 0)) or fail='limit should be 0 (backwards)'
85
+ test (next backwards $(limit == 1)) or fail='limit should be 1 (backwards)'
86
+ )
@@ -0,0 +1,47 @@
1
+ // Test `attach` and `insert`.
2
+
3
+ externals (stem)
4
+
5
+ define stem as (
6
+ ='abcd'
7
+ do (
8
+ hop 2
9
+ attach '-'
10
+ $(cursor == 2) or fail='forwards attach changed cursor'
11
+ next
12
+ )
13
+ $(cursor == 0) or fail='do failed to restore cursor after forwards attach'
14
+
15
+ ='abcd'
16
+ do (
17
+ hop 2
18
+ insert '-'
19
+ $(cursor == 3) or fail='forwards insert failed to move cursor'
20
+ next
21
+ )
22
+ $(cursor == 0) or fail='do failed to restore cursor after forwards insert'
23
+
24
+ ='abcd'
25
+ backwards (
26
+ do (
27
+ hop 2
28
+ attach '-'
29
+ $(cursor == 3) or fail='backwards attach failed to move cursor'
30
+ next
31
+ )
32
+ $(cursor == size) or fail='do failed to restore cursor after backwards attach'
33
+ )
34
+
35
+ ='abcd'
36
+ backwards (
37
+ do (
38
+ hop 2
39
+ insert '-'
40
+ $(cursor == 2) or fail='backwards insert moved cursor'
41
+ next
42
+ )
43
+ $(cursor == size) or fail='do failed to restore cursor after backwards insert'
44
+ )
45
+
46
+ ='ok'
47
+ )
@@ -0,0 +1,19 @@
1
+ // Test strings
2
+
3
+ externals (stem)
4
+
5
+ booleans (b)
6
+
7
+ stringescapes {}
8
+
9
+ define stem as (
10
+ true or fail='true failed'
11
+ not false or fail='false did not fail'
12
+
13
+ set b
14
+ b or fail='set b did not set b'
15
+ unset b
16
+ not b or fail='unset b did not unset b'
17
+ set b
18
+ b or fail='set b did not set b (2)'
19
+ )
@@ -0,0 +1,22 @@
1
+ // Test calling externals within the program.
2
+
3
+ externals (stem e1 e2)
4
+
5
+ define stem as (
6
+ not e2 or fail='failed to call external e2'
7
+
8
+ test e1 or fail='external as among function failed'
9
+ $(len == 4) or fail='external as among function result wrong'
10
+ not e1 or fail='external as among function did not fail'
11
+
12
+ ='ok'
13
+ )
14
+
15
+ define e1 as (
16
+ [substring] among (
17
+ 'ok' e2 ( <-'oops' )
18
+ 'no' ( <-'nope' )
19
+ )
20
+ )
21
+
22
+ define e2 as atlimit
@@ -0,0 +1,12 @@
1
+ // Test `hop` and `next`.
2
+
3
+ externals (stem)
4
+
5
+ strings (s)
6
+
7
+ define stem as (
8
+ next or fail='next failed'
9
+ not (hop len-3) or fail='hop by calculated negative signalled t'
10
+ test (tolimit not next or fail='next at end of string signalled t')
11
+ not (hop len-cursor+1) or fail='hop past end of string signalled t'
12
+ )
@@ -0,0 +1,60 @@
1
+ // Test integer tests.
2
+ externals (stem)
3
+ routines (var_local_bug var_local_bug_)
4
+ integers (x y var_local_bug_a var_local_bug_b)
5
+ define stem as (
6
+ var_local_bug
7
+
8
+ $x = len
9
+
10
+ $x == 2 or fail='== failed (old style)'
11
+ $(x == 2) or fail='== failed'
12
+ $(2 == x) or fail='== failed (reversed)'
13
+
14
+ $x != 3 or fail='!= failed (old style)'
15
+ $(x != 3) or fail='!= failed'
16
+ $(3 != x) or fail='!= failed (reversed)'
17
+
18
+ $x >= 2 or fail='>= failed (old style)'
19
+ $(x >= 2) or fail='>= failed'
20
+ $(x >= 1) or fail='>= failed (nonequal)'
21
+ $(2 >= x) or fail='>= failed (reversed)'
22
+ $(3 >= x) or fail='>= failed (nonequal, reversed)'
23
+
24
+ $x <= 2 or fail='<= failed (old style)'
25
+ $(x <= 2) or fail='<= failed'
26
+ $(x <= 3) or fail='<= failed (nonequal)'
27
+ $(2 <= x) or fail='<= failed (reversed)'
28
+ $(1 <= x) or fail='<= failed (nonequal, reversed)'
29
+
30
+ $x > 1 or fail='> failed (old style)'
31
+ $(x > 1) or fail='> failed'
32
+ $(3 > x) or fail='> failed (nonequal, reversed)'
33
+
34
+ $x < 3 or fail='< failed (old style)'
35
+ $(x < 3) or fail='< failed'
36
+ $(1 < x) or fail='< failed (reversed)'
37
+ )
38
+
39
+ // Regression test for bug in fixed in 3.1.1 - the variable localisation
40
+ // machinery failed to look at the rhs of integer tests.
41
+ define var_local_bug as (
42
+ $var_local_bug_a = 0
43
+ var_local_bug_
44
+ $var_local_bug_a = 1
45
+ var_local_bug_
46
+ )
47
+
48
+ define var_local_bug_ as (
49
+ do (
50
+ $(var_local_bug_a == 1)
51
+ // The bug was that this use before set was not spotted.
52
+ $(7 != var_local_bug_b)
53
+ ['a'] delete
54
+ )
55
+ do (
56
+ $(var_local_bug_a == 0)
57
+ $var_local_bug_b = 7
58
+ )
59
+ $(7 == var_local_bug_b) or fail='var_local_bug_b was incorrectly localised'
60
+ )
@@ -0,0 +1,25 @@
1
+ // Test minint and maxint work as expected.
2
+
3
+ externals (stem)
4
+
5
+ integers (x y)
6
+
7
+ define stem as (
8
+ $(minint < 0) or fail='minint should be negative'
9
+ $(maxint > 0) or fail='maxint should be positive'
10
+
11
+ $(minint <= -32767) or fail='minint should be <= -32767'
12
+ $(maxint >= 32767) or fail='maxint should be >= 32767'
13
+
14
+ $(minint + maxint == 0) or $(minint + maxint == -1) or fail='minint+maxint should be 0 or -1'
15
+
16
+ $x = minint
17
+ $(x == minint) or fail='minint cannot be stored in a variable'
18
+ $y = x + 1
19
+ $(y - x == 1) or fail='Adding one to minint does not work'
20
+
21
+ $x = maxint
22
+ $(x == maxint) or fail='maxint cannot be stored in a variable'
23
+ $y = x - 1
24
+ $(x - y == 1) or fail='Subtracting one from maxint does not work'
25
+ )
@@ -0,0 +1,20 @@
1
+ // Test target language naming problem cases.
2
+ // Test handling of names which only differ by case (for e.g. Pascal).
3
+ strings (notable NoTable NOTABLE)
4
+ // Test handling of name ending `_`.
5
+ // (Regression test for bug in Ada generator fixed in 3.1.0.)
6
+ integers (x_ x_e x_ee)
7
+ externals (stem)
8
+ define stem as (
9
+ try (
10
+ [next] -> notable
11
+ next] -> NoTable
12
+ next] -> NOTABLE
13
+ $x_ = lenof notable + lenof NoTable + lenof NOTABLE
14
+ $x_ee = 2
15
+ $x_e = len
16
+ $(x_ + x_ee < x_e)
17
+ delete
18
+ )
19
+ [tolimit] <- 'ok'
20
+ )
@@ -0,0 +1,30 @@
1
+ // Test `not`.
2
+
3
+ externals (stem)
4
+
5
+ define stem as (
6
+ ='stopknot'
7
+
8
+ test (
9
+ $(cursor == 0) or fail='cursor not 0 before test'
10
+ next or fail='next failed'
11
+ do (
12
+ not ([next] delete 'o')
13
+ )
14
+ $(cursor == 1) or fail='do failed to restore cursor'
15
+ )
16
+
17
+ backwards (
18
+ $(cursor == 7) or fail='cursor not 7 before test'
19
+ next or fail='next failed'
20
+ do (
21
+ not ([next] delete 'n')
22
+ )
23
+ $(cursor == 5) or fail='backwards do failed to restore cursor'
24
+ )
25
+
26
+ not (next fail='this should never be seen')
27
+ $(cursor == 0) or fail='`not` failed to restore cursor'
28
+ ='ok'
29
+ not true and fail='`not true` raised signal t'
30
+ )
@@ -0,0 +1,17 @@
1
+ // Test `or`.
2
+
3
+ externals (stem)
4
+ routines (a)
5
+ integers (x)
6
+
7
+ define a as
8
+ try (
9
+ next
10
+ $(x < 2)
11
+ )
12
+
13
+ define stem as (
14
+ $x = limit
15
+ a or fail='a did not signal t'
16
+ $(cursor == 0) or fail='a did not restore cursor'
17
+ )
@@ -0,0 +1,16 @@
1
+ // Test `repeat`.
2
+
3
+ stringescapes { }
4
+
5
+ externals ( stem )
6
+
7
+ define stem as (
8
+ ='ok'
9
+
10
+ $(limit==size) or fail='limit not size by default'
11
+
12
+ // Regression tests for Ada `repeat` codegen bug.
13
+ // https://github.com/snowballstem/snowball/issues/275
14
+ setlimit tomark cursor+1 for repeat 'Q' $(limit==size) or fail='limit not restored after repeat'
15
+ setlimit next for repeat 'Q' $(limit==size) or fail='limit not restored after repeat (2)'
16
+ )