basic101 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (526) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +7 -0
  3. data/Gemfile +3 -12
  4. data/Gemfile.lock +33 -72
  5. data/Rakefile +0 -8
  6. data/basic101.gemspec +63 -663
  7. data/lib/basic101.rb +3 -0
  8. data/lib/basic101/abs_function.rb +2 -0
  9. data/lib/basic101/argument_checker.rb +2 -0
  10. data/lib/basic101/arguments.rb +2 -0
  11. data/lib/basic101/array_reference.rb +2 -0
  12. data/lib/basic101/asc_function.rb +2 -0
  13. data/lib/basic101/basic_array.rb +2 -0
  14. data/lib/basic101/basic_comparisons.rb +2 -0
  15. data/lib/basic101/basic_float.rb +2 -0
  16. data/lib/basic101/basic_integer.rb +2 -0
  17. data/lib/basic101/basic_math.rb +2 -0
  18. data/lib/basic101/basic_numeric.rb +2 -0
  19. data/lib/basic101/basic_object.rb +2 -0
  20. data/lib/basic101/basic_string.rb +2 -0
  21. data/lib/basic101/binary_operation.rb +2 -0
  22. data/lib/basic101/binary_operations.rb +2 -0
  23. data/lib/basic101/built_in_functions.rb +2 -0
  24. data/lib/basic101/chr_function.rb +2 -0
  25. data/lib/basic101/cos_function.rb +2 -0
  26. data/lib/basic101/data_statement.rb +2 -0
  27. data/lib/basic101/define_function_statement.rb +2 -0
  28. data/lib/basic101/dim_statement.rb +2 -0
  29. data/lib/basic101/else_statement.rb +2 -0
  30. data/lib/basic101/end_statement.rb +2 -0
  31. data/lib/basic101/endif_statement.rb +2 -0
  32. data/lib/basic101/errors.rb +2 -0
  33. data/lib/basic101/exp_function.rb +2 -0
  34. data/lib/basic101/for_stack.rb +2 -0
  35. data/lib/basic101/for_statement.rb +2 -0
  36. data/lib/basic101/function.rb +2 -0
  37. data/lib/basic101/function_call.rb +2 -0
  38. data/lib/basic101/function_identifier.rb +2 -0
  39. data/lib/basic101/functions.rb +2 -0
  40. data/lib/basic101/gosub_statement.rb +2 -0
  41. data/lib/basic101/goto_statement.rb +2 -0
  42. data/lib/basic101/identifier.rb +2 -0
  43. data/lib/basic101/identity.rb +2 -0
  44. data/lib/basic101/if_statement.rb +3 -0
  45. data/lib/basic101/input.rb +2 -0
  46. data/lib/basic101/input_reader.rb +3 -1
  47. data/lib/basic101/input_statement.rb +2 -0
  48. data/lib/basic101/int_function.rb +2 -0
  49. data/lib/basic101/left_function.rb +2 -0
  50. data/lib/basic101/len_function.rb +2 -0
  51. data/lib/basic101/let_statement.rb +2 -0
  52. data/lib/basic101/line.rb +2 -0
  53. data/lib/basic101/log_function.rb +2 -0
  54. data/lib/basic101/main.rb +2 -0
  55. data/lib/basic101/mid_function.rb +2 -0
  56. data/lib/basic101/negate_operation.rb +2 -0
  57. data/lib/basic101/next_statement.rb +2 -0
  58. data/lib/basic101/not_operation.rb +2 -0
  59. data/lib/basic101/null_prompt_delimeter.rb +2 -0
  60. data/lib/basic101/null_transcript.rb +2 -0
  61. data/lib/basic101/numeric_identifier.rb +2 -0
  62. data/lib/basic101/on_goto_statement.rb +2 -0
  63. data/lib/basic101/output.rb +2 -0
  64. data/lib/basic101/parser.rb +2 -0
  65. data/lib/basic101/parser/data_statement.rb +2 -0
  66. data/lib/basic101/parser/define_function_statement.rb +2 -0
  67. data/lib/basic101/parser/dim_statement.rb +2 -0
  68. data/lib/basic101/parser/end_statement.rb +2 -0
  69. data/lib/basic101/parser/expression.rb +2 -0
  70. data/lib/basic101/parser/for_statement.rb +2 -0
  71. data/lib/basic101/parser/function_call.rb +2 -0
  72. data/lib/basic101/parser/gosub_statement.rb +2 -0
  73. data/lib/basic101/parser/goto_statement.rb +2 -0
  74. data/lib/basic101/parser/identifier.rb +2 -0
  75. data/lib/basic101/parser/if_statement.rb +2 -0
  76. data/lib/basic101/parser/input_statement.rb +2 -0
  77. data/lib/basic101/parser/let_statement.rb +2 -0
  78. data/lib/basic101/parser/next_statement.rb +2 -0
  79. data/lib/basic101/parser/numeric.rb +2 -0
  80. data/lib/basic101/parser/on_goto_statement.rb +2 -0
  81. data/lib/basic101/parser/print_statement.rb +2 -0
  82. data/lib/basic101/parser/program.rb +2 -0
  83. data/lib/basic101/parser/randomize_statement.rb +2 -0
  84. data/lib/basic101/parser/read_statement.rb +2 -0
  85. data/lib/basic101/parser/reference.rb +2 -0
  86. data/lib/basic101/parser/remark_statement.rb +2 -0
  87. data/lib/basic101/parser/restore_statement.rb +2 -0
  88. data/lib/basic101/parser/return_statement.rb +2 -0
  89. data/lib/basic101/parser/space.rb +2 -0
  90. data/lib/basic101/parser/statements.rb +2 -0
  91. data/lib/basic101/parser/stop_statement.rb +2 -0
  92. data/lib/basic101/parser/string.rb +2 -0
  93. data/lib/basic101/power_operation.rb +2 -0
  94. data/lib/basic101/print_comma.rb +2 -0
  95. data/lib/basic101/print_semicolon.rb +2 -0
  96. data/lib/basic101/print_statement.rb +2 -0
  97. data/lib/basic101/program.rb +2 -0
  98. data/lib/basic101/program_counter.rb +2 -0
  99. data/lib/basic101/prompt_delimeter.rb +2 -0
  100. data/lib/basic101/randomize_statement.rb +2 -0
  101. data/lib/basic101/read_statement.rb +2 -0
  102. data/lib/basic101/reference.rb +2 -0
  103. data/lib/basic101/release.rb +13 -0
  104. data/lib/basic101/remark_statement.rb +2 -0
  105. data/lib/basic101/restore_statement.rb +2 -0
  106. data/lib/basic101/return_statement.rb +2 -0
  107. data/lib/basic101/right_function.rb +2 -0
  108. data/lib/basic101/rnd_function.rb +2 -0
  109. data/lib/basic101/runtime.rb +2 -0
  110. data/lib/basic101/scalar_reference.rb +2 -0
  111. data/lib/basic101/sgn_function.rb +2 -0
  112. data/lib/basic101/sin_function.rb +2 -0
  113. data/lib/basic101/sqr_function.rb +2 -0
  114. data/lib/basic101/statement.rb +2 -0
  115. data/lib/basic101/stop_statement.rb +2 -0
  116. data/lib/basic101/str_function.rb +2 -0
  117. data/lib/basic101/string_identifier.rb +2 -0
  118. data/lib/basic101/tab.rb +2 -0
  119. data/lib/basic101/tab_function.rb +2 -0
  120. data/lib/basic101/tan_function.rb +2 -0
  121. data/lib/basic101/transcript.rb +2 -0
  122. data/lib/basic101/transform.rb +2 -0
  123. data/lib/basic101/user_defined_function.rb +2 -0
  124. data/lib/basic101/val_function.rb +2 -0
  125. metadata +27 -445
  126. data/.rspec +0 -2
  127. data/.simplecov +0 -1
  128. data/.travis.yml +0 -5
  129. data/.yardopts +0 -7
  130. data/rake_tasks/default.rake +0 -1
  131. data/rake_tasks/integration.rake +0 -8
  132. data/rake_tasks/jeweler.rake +0 -28
  133. data/rake_tasks/spec.rake +0 -8
  134. data/rake_tasks/test.rake +0 -2
  135. data/rake_tasks/yard.rake +0 -3
  136. data/test/integration/arguments.rb +0 -25
  137. data/test/integration/errors.rb +0 -7
  138. data/test/integration/integration_test.rb +0 -28
  139. data/test/integration/main.rb +0 -49
  140. data/test/integration/output_file.rb +0 -40
  141. data/test/integration/test.rb +0 -135
  142. data/test/integration/tests/basic_computer_games/23-match.input +0 -1
  143. data/test/integration/tests/basic_computer_games/23-match.output +0 -29
  144. data/test/integration/tests/basic_computer_games/3dplot.input +0 -0
  145. data/test/integration/tests/basic_computer_games/3dplot.output +0 -47
  146. data/test/integration/tests/basic_computer_games/aceyducy.input +0 -8
  147. data/test/integration/tests/basic_computer_games/aceyducy.output +0 -78
  148. data/test/integration/tests/basic_computer_games/amazing.input +0 -1
  149. data/test/integration/tests/basic_computer_games/amazing.output +0 -32
  150. data/test/integration/tests/basic_computer_games/animal.input +0 -17
  151. data/test/integration/tests/basic_computer_games/animal.output +0 -38
  152. data/test/integration/tests/basic_computer_games/awari.input +0 -11
  153. data/test/integration/tests/basic_computer_games/awari.output +0 -117
  154. data/test/integration/tests/basic_computer_games/bagels.input +0 -12
  155. data/test/integration/tests/basic_computer_games/bagels.output +0 -42
  156. data/test/integration/tests/basic_computer_games/banner.input +0 -6
  157. data/test/integration/tests/basic_computer_games/banner.output +0 -135
  158. data/test/integration/tests/basic_computer_games/basketbl.input +0 -46
  159. data/test/integration/tests/basic_computer_games/basketbl.output +0 -509
  160. data/test/integration/tests/basic_computer_games/batnum.input +0 -14
  161. data/test/integration/tests/basic_computer_games/batnum.output +0 -67
  162. data/test/integration/tests/basic_computer_games/battle.input +0 -21
  163. data/test/integration/tests/basic_computer_games/battle.output +0 -118
  164. data/test/integration/tests/basic_computer_games/blackjck.input +0 -26
  165. data/test/integration/tests/basic_computer_games/blackjck.output +0 -144
  166. data/test/integration/tests/basic_computer_games/bombard.input +0 -20
  167. data/test/integration/tests/basic_computer_games/bombard.output +0 -175
  168. data/test/integration/tests/basic_computer_games/bounce.input +0 -0
  169. data/test/integration/tests/basic_computer_games/bounce.output +0 -15
  170. data/test/integration/tests/basic_computer_games/bowling.input +0 -23
  171. data/test/integration/tests/basic_computer_games/bowling.output +0 -229
  172. data/test/integration/tests/basic_computer_games/boxing.input +0 -8
  173. data/test/integration/tests/basic_computer_games/boxing.output +0 -47
  174. data/test/integration/tests/basic_computer_games/bug.input +0 -17
  175. data/test/integration/tests/basic_computer_games/bug.output +0 -847
  176. data/test/integration/tests/basic_computer_games/bullfght.input +0 -4
  177. data/test/integration/tests/basic_computer_games/bullfght.output +0 -60
  178. data/test/integration/tests/basic_computer_games/bullseye.input +0 -10
  179. data/test/integration/tests/basic_computer_games/bullseye.output +0 -79
  180. data/test/integration/tests/basic_computer_games/bunny.input +0 -0
  181. data/test/integration/tests/basic_computer_games/bunny.output +0 -67
  182. data/test/integration/tests/basic_computer_games/buzzword.input +0 -4
  183. data/test/integration/tests/basic_computer_games/buzzword.output +0 -25
  184. data/test/integration/tests/basic_computer_games/calendar.input +0 -0
  185. data/test/integration/tests/basic_computer_games/calendar.output +0 -213
  186. data/test/integration/tests/basic_computer_games/change.input +0 -4
  187. data/test/integration/tests/basic_computer_games/change.output +0 -28
  188. data/test/integration/tests/basic_computer_games/checkers.input +0 -74
  189. data/test/integration/tests/basic_computer_games/checkers.output +0 -673
  190. data/test/integration/tests/basic_computer_games/chemist.input +0 -11
  191. data/test/integration/tests/basic_computer_games/chemist.output +0 -54
  192. data/test/integration/tests/basic_computer_games/chief.input +0 -5
  193. data/test/integration/tests/basic_computer_games/chief.output +0 -19
  194. data/test/integration/tests/basic_computer_games/chomp.input +0 -15
  195. data/test/integration/tests/basic_computer_games/chomp.output +0 -159
  196. data/test/integration/tests/basic_computer_games/combat.input +0 -7
  197. data/test/integration/tests/basic_computer_games/combat.output +0 -33
  198. data/test/integration/tests/basic_computer_games/craps.input +0 -9
  199. data/test/integration/tests/basic_computer_games/craps.output +0 -51
  200. data/test/integration/tests/basic_computer_games/cube.input +0 -25
  201. data/test/integration/tests/basic_computer_games/cube.output +0 -72
  202. data/test/integration/tests/basic_computer_games/depthchg.input +0 -16
  203. data/test/integration/tests/basic_computer_games/depthchg.output +0 -83
  204. data/test/integration/tests/basic_computer_games/diamond.input +0 -1
  205. data/test/integration/tests/basic_computer_games/diamond.output +0 -65
  206. data/test/integration/tests/basic_computer_games/dice.input +0 -4
  207. data/test/integration/tests/basic_computer_games/dice.output +0 -46
  208. data/test/integration/tests/basic_computer_games/digits.input +0 -5
  209. data/test/integration/tests/basic_computer_games/digits.output +0 -70
  210. data/test/integration/tests/basic_computer_games/evenwin1.input +0 -13
  211. data/test/integration/tests/basic_computer_games/evenwin1.output +0 -116
  212. data/test/integration/tests/basic_computer_games/evenwin2.input +0 -14
  213. data/test/integration/tests/basic_computer_games/evenwin2.output +0 -56
  214. data/test/integration/tests/basic_computer_games/flipflop.input +0 -8
  215. data/test/integration/tests/basic_computer_games/flipflop.output +0 -45
  216. data/test/integration/tests/basic_computer_games/footbal1.input +0 -13
  217. data/test/integration/tests/basic_computer_games/footbal1.output +0 -315
  218. data/test/integration/tests/basic_computer_games/footbal2.input +0 -23
  219. data/test/integration/tests/basic_computer_games/footbal2.output +0 -318
  220. data/test/integration/tests/basic_computer_games/furtradr.input +0 -20
  221. data/test/integration/tests/basic_computer_games/furtradr.output +0 -133
  222. data/test/integration/tests/basic_computer_games/golf.input +0 -11
  223. data/test/integration/tests/basic_computer_games/golf.output +0 -69
  224. data/test/integration/tests/basic_computer_games/gomoko.input +0 -6
  225. data/test/integration/tests/basic_computer_games/gomoko.output +0 -66
  226. data/test/integration/tests/basic_computer_games/guess.input +0 -8
  227. data/test/integration/tests/basic_computer_games/guess.output +0 -37
  228. data/test/integration/tests/basic_computer_games/gunner.input +0 -18
  229. data/test/integration/tests/basic_computer_games/gunner.output +0 -91
  230. data/test/integration/tests/basic_computer_games/hamurabi.input +0 -7
  231. data/test/integration/tests/basic_computer_games/hamurabi.output +0 -51
  232. data/test/integration/tests/basic_computer_games/hangman.input +0 -69
  233. data/test/integration/tests/basic_computer_games/hangman.output +0 -889
  234. data/test/integration/tests/basic_computer_games/hello.input +0 -7
  235. data/test/integration/tests/basic_computer_games/hello.output +0 -46
  236. data/test/integration/tests/basic_computer_games/hexapawn.input +0 -38
  237. data/test/integration/tests/basic_computer_games/hexapawn.output +0 -521
  238. data/test/integration/tests/basic_computer_games/hi-q.input +0 -14
  239. data/test/integration/tests/basic_computer_games/hi-q.output +0 -115
  240. data/test/integration/tests/basic_computer_games/hilo.input +0 -20
  241. data/test/integration/tests/basic_computer_games/hilo.output +0 -76
  242. data/test/integration/tests/basic_computer_games/hockey.input +0 -59
  243. data/test/integration/tests/basic_computer_games/hockey.output +0 -243
  244. data/test/integration/tests/basic_computer_games/horsrace.input +0 -11
  245. data/test/integration/tests/basic_computer_games/horsrace.output +0 -517
  246. data/test/integration/tests/basic_computer_games/hurkle.input +0 -16
  247. data/test/integration/tests/basic_computer_games/hurkle.output +0 -81
  248. data/test/integration/tests/basic_computer_games/kinema.input +0 -9
  249. data/test/integration/tests/basic_computer_games/kinema.output +0 -64
  250. data/test/integration/tests/basic_computer_games/king.input +0 -7
  251. data/test/integration/tests/basic_computer_games/king.output +0 -57
  252. data/test/integration/tests/basic_computer_games/lem.input +0 -4
  253. data/test/integration/tests/basic_computer_games/lem.output +0 -68
  254. data/test/integration/tests/basic_computer_games/letter.input +0 -24
  255. data/test/integration/tests/basic_computer_games/letter.output +0 -123
  256. data/test/integration/tests/basic_computer_games/life.input +0 -4
  257. data/test/integration/tests/basic_computer_games/life.options +0 -1
  258. data/test/integration/tests/basic_computer_games/life.output +0 -200
  259. data/test/integration/tests/basic_computer_games/life2.input +0 -17
  260. data/test/integration/tests/basic_computer_games/life2.output +0 -113
  261. data/test/integration/tests/basic_computer_games/litquiz.input +0 -4
  262. data/test/integration/tests/basic_computer_games/litquiz.output +0 -36
  263. data/test/integration/tests/basic_computer_games/love.input +0 -1
  264. data/test/integration/tests/basic_computer_games/love.output +0 -67
  265. data/test/integration/tests/basic_computer_games/lunar.input +0 -87
  266. data/test/integration/tests/basic_computer_games/lunar.output +0 -195
  267. data/test/integration/tests/basic_computer_games/mastrmnd.input +0 -18
  268. data/test/integration/tests/basic_computer_games/mastrmnd.output +0 -67
  269. data/test/integration/tests/basic_computer_games/mathdice.input +0 -4
  270. data/test/integration/tests/basic_computer_games/mathdice.output +0 -86
  271. data/test/integration/tests/basic_computer_games/mugwump.input +0 -16
  272. data/test/integration/tests/basic_computer_games/mugwump.output +0 -139
  273. data/test/integration/tests/basic_computer_games/name.input +0 -2
  274. data/test/integration/tests/basic_computer_games/name.output +0 -22
  275. data/test/integration/tests/basic_computer_games/nicoma.input +0 -8
  276. data/test/integration/tests/basic_computer_games/nicoma.output +0 -36
  277. data/test/integration/tests/basic_computer_games/nim.input +0 -8
  278. data/test/integration/tests/basic_computer_games/nim.output +0 -30
  279. data/test/integration/tests/basic_computer_games/number.input +0 -19
  280. data/test/integration/tests/basic_computer_games/number.output +0 -73
  281. data/test/integration/tests/basic_computer_games/onecheck.input +0 -6
  282. data/test/integration/tests/basic_computer_games/onecheck.output +0 -77
  283. data/test/integration/tests/basic_computer_games/orbit.input +0 -10
  284. data/test/integration/tests/basic_computer_games/orbit.output +0 -113
  285. data/test/integration/tests/basic_computer_games/pizza.input +0 -10
  286. data/test/integration/tests/basic_computer_games/pizza.output +0 -93
  287. data/test/integration/tests/basic_computer_games/poetry.input +0 -0
  288. data/test/integration/tests/basic_computer_games/poetry.options +0 -1
  289. data/test/integration/tests/basic_computer_games/poetry.output +0 -50
  290. data/test/integration/tests/basic_computer_games/poker.input +0 -34
  291. data/test/integration/tests/basic_computer_games/poker.output +0 -197
  292. data/test/integration/tests/basic_computer_games/queen.input +0 -10
  293. data/test/integration/tests/basic_computer_games/queen.output +0 -133
  294. data/test/integration/tests/basic_computer_games/reverse.input +0 -12
  295. data/test/integration/tests/basic_computer_games/reverse.output +0 -79
  296. data/test/integration/tests/basic_computer_games/rocket.input +0 -42
  297. data/test/integration/tests/basic_computer_games/rocket.output +0 -149
  298. data/test/integration/tests/basic_computer_games/rocksp.input +0 -9
  299. data/test/integration/tests/basic_computer_games/rocksp.output +0 -69
  300. data/test/integration/tests/basic_computer_games/roulette.input +0 -9
  301. data/test/integration/tests/basic_computer_games/roulette.output +0 -98
  302. data/test/integration/tests/basic_computer_games/rusrou.input +0 -9
  303. data/test/integration/tests/basic_computer_games/rusrou.output +0 -50
  304. data/test/integration/tests/basic_computer_games/salvo.input +0 -21
  305. data/test/integration/tests/basic_computer_games/salvo.output +0 -49
  306. data/test/integration/tests/basic_computer_games/sinewave.input +0 -0
  307. data/test/integration/tests/basic_computer_games/sinewave.output +0 -168
  308. data/test/integration/tests/basic_computer_games/slalom.input +0 -20
  309. data/test/integration/tests/basic_computer_games/slalom.output +0 -122
  310. data/test/integration/tests/basic_computer_games/slots.input +0 -2
  311. data/test/integration/tests/basic_computer_games/slots.output +0 -20
  312. data/test/integration/tests/basic_computer_games/splat.input +0 -9
  313. data/test/integration/tests/basic_computer_games/splat.output +0 -61
  314. data/test/integration/tests/basic_computer_games/stars.input +0 -15
  315. data/test/integration/tests/basic_computer_games/stars.output +0 -70
  316. data/test/integration/tests/basic_computer_games/stock.input +0 -30
  317. data/test/integration/tests/basic_computer_games/stock.output +0 -156
  318. data/test/integration/tests/basic_computer_games/superstartrek.input +0 -21
  319. data/test/integration/tests/basic_computer_games/superstartrek.output +0 -151
  320. data/test/integration/tests/basic_computer_games/superstartrekins.input +0 -1
  321. data/test/integration/tests/basic_computer_games/superstartrekins.output +0 -134
  322. data/test/integration/tests/basic_computer_games/synonym.input +0 -13
  323. data/test/integration/tests/basic_computer_games/synonym.output +0 -57
  324. data/test/integration/tests/basic_computer_games/target.input +0 -2
  325. data/test/integration/tests/basic_computer_games/target.output +0 -39
  326. data/test/integration/tests/basic_computer_games/tictac1.input +0 -10
  327. data/test/integration/tests/basic_computer_games/tictac1.output +0 -49
  328. data/test/integration/tests/basic_computer_games/tictac2.input +0 -6
  329. data/test/integration/tests/basic_computer_games/tictac2.output +0 -104
  330. data/test/integration/tests/basic_computer_games/towers.input +0 -9
  331. data/test/integration/tests/basic_computer_games/towers.output +0 -70
  332. data/test/integration/tests/basic_computer_games/train.input +0 -4
  333. data/test/integration/tests/basic_computer_games/train.output +0 -23
  334. data/test/integration/tests/basic_computer_games/trap.input +0 -7
  335. data/test/integration/tests/basic_computer_games/trap.output +0 -40
  336. data/test/integration/tests/basic_computer_games/war.input +0 -11
  337. data/test/integration/tests/basic_computer_games/war.output +0 -54
  338. data/test/integration/tests/basic_computer_games/weekday.input +0 -2
  339. data/test/integration/tests/basic_computer_games/weekday.output +0 -28
  340. data/test/integration/tests/basic_computer_games/word.input +0 -6
  341. data/test/integration/tests/basic_computer_games/word.output +0 -0
  342. data/test/integration/tests/fast/abs.bas +0 -5
  343. data/test/integration/tests/fast/abs.input +0 -0
  344. data/test/integration/tests/fast/abs.output +0 -5
  345. data/test/integration/tests/fast/add.bas +0 -5
  346. data/test/integration/tests/fast/add.input +0 -0
  347. data/test/integration/tests/fast/add.output +0 -5
  348. data/test/integration/tests/fast/and.bas +0 -5
  349. data/test/integration/tests/fast/and.input +0 -0
  350. data/test/integration/tests/fast/and.output +0 -5
  351. data/test/integration/tests/fast/array.bas +0 -11
  352. data/test/integration/tests/fast/array.input +0 -0
  353. data/test/integration/tests/fast/array.output +0 -6
  354. data/test/integration/tests/fast/asc.bas +0 -1
  355. data/test/integration/tests/fast/asc.input +0 -0
  356. data/test/integration/tests/fast/asc.output +0 -1
  357. data/test/integration/tests/fast/chr.bas +0 -1
  358. data/test/integration/tests/fast/chr.input +0 -0
  359. data/test/integration/tests/fast/chr.output +0 -1
  360. data/test/integration/tests/fast/cos.bas +0 -1
  361. data/test/integration/tests/fast/cos.input +0 -0
  362. data/test/integration/tests/fast/cos.output +0 -1
  363. data/test/integration/tests/fast/def_fn.bas +0 -9
  364. data/test/integration/tests/fast/def_fn.input +0 -0
  365. data/test/integration/tests/fast/def_fn.output +0 -5
  366. data/test/integration/tests/fast/divide.bas +0 -5
  367. data/test/integration/tests/fast/divide.input +0 -0
  368. data/test/integration/tests/fast/divide.output +0 -5
  369. data/test/integration/tests/fast/end.bas +0 -3
  370. data/test/integration/tests/fast/end.input +0 -0
  371. data/test/integration/tests/fast/end.output +0 -1
  372. data/test/integration/tests/fast/eq.bas +0 -3
  373. data/test/integration/tests/fast/eq.input +0 -0
  374. data/test/integration/tests/fast/eq.output +0 -3
  375. data/test/integration/tests/fast/exp.bas +0 -2
  376. data/test/integration/tests/fast/exp.input +0 -0
  377. data/test/integration/tests/fast/exp.output +0 -2
  378. data/test/integration/tests/fast/float.bas +0 -3
  379. data/test/integration/tests/fast/float.input +0 -0
  380. data/test/integration/tests/fast/float.output +0 -2
  381. data/test/integration/tests/fast/for_next.bas +0 -61
  382. data/test/integration/tests/fast/for_next.input +0 -0
  383. data/test/integration/tests/fast/for_next.output +0 -46
  384. data/test/integration/tests/fast/ge.bas +0 -3
  385. data/test/integration/tests/fast/ge.input +0 -0
  386. data/test/integration/tests/fast/ge.output +0 -3
  387. data/test/integration/tests/fast/gosub_return.bas +0 -10
  388. data/test/integration/tests/fast/gosub_return.input +0 -0
  389. data/test/integration/tests/fast/gosub_return.output +0 -4
  390. data/test/integration/tests/fast/goto.bas +0 -3
  391. data/test/integration/tests/fast/goto.input +0 -0
  392. data/test/integration/tests/fast/goto.output +0 -1
  393. data/test/integration/tests/fast/gt.bas +0 -3
  394. data/test/integration/tests/fast/gt.input +0 -0
  395. data/test/integration/tests/fast/gt.output +0 -3
  396. data/test/integration/tests/fast/if.bas +0 -25
  397. data/test/integration/tests/fast/if.input +0 -0
  398. data/test/integration/tests/fast/if.output +0 -8
  399. data/test/integration/tests/fast/input.bas +0 -24
  400. data/test/integration/tests/fast/input.input +0 -10
  401. data/test/integration/tests/fast/input.output +0 -28
  402. data/test/integration/tests/fast/int.bas +0 -5
  403. data/test/integration/tests/fast/int.input +0 -0
  404. data/test/integration/tests/fast/int.output +0 -5
  405. data/test/integration/tests/fast/integer_plus_string.bas +0 -1
  406. data/test/integration/tests/fast/integer_plus_string.input +0 -0
  407. data/test/integration/tests/fast/integer_plus_string.output +0 -1
  408. data/test/integration/tests/fast/invalid_argument.bas +0 -1
  409. data/test/integration/tests/fast/invalid_argument.input +0 -0
  410. data/test/integration/tests/fast/invalid_argument.output +0 -1
  411. data/test/integration/tests/fast/le.bas +0 -3
  412. data/test/integration/tests/fast/le.input +0 -0
  413. data/test/integration/tests/fast/le.output +0 -3
  414. data/test/integration/tests/fast/left.bas +0 -1
  415. data/test/integration/tests/fast/left.input +0 -0
  416. data/test/integration/tests/fast/left.output +0 -1
  417. data/test/integration/tests/fast/len.bas +0 -2
  418. data/test/integration/tests/fast/len.input +0 -0
  419. data/test/integration/tests/fast/len.output +0 -2
  420. data/test/integration/tests/fast/let.bas +0 -6
  421. data/test/integration/tests/fast/let.input +0 -0
  422. data/test/integration/tests/fast/let.output +0 -4
  423. data/test/integration/tests/fast/log.bas +0 -1
  424. data/test/integration/tests/fast/log.input +0 -0
  425. data/test/integration/tests/fast/log.output +0 -1
  426. data/test/integration/tests/fast/lt.bas +0 -3
  427. data/test/integration/tests/fast/lt.input +0 -0
  428. data/test/integration/tests/fast/lt.output +0 -3
  429. data/test/integration/tests/fast/math.output +0 -0
  430. data/test/integration/tests/fast/mid.bas +0 -2
  431. data/test/integration/tests/fast/mid.input +0 -0
  432. data/test/integration/tests/fast/mid.output +0 -2
  433. data/test/integration/tests/fast/multiply.bas +0 -5
  434. data/test/integration/tests/fast/multiply.input +0 -0
  435. data/test/integration/tests/fast/multiply.output +0 -5
  436. data/test/integration/tests/fast/ne.bas +0 -3
  437. data/test/integration/tests/fast/ne.input +0 -0
  438. data/test/integration/tests/fast/ne.output +0 -3
  439. data/test/integration/tests/fast/negate.bas +0 -4
  440. data/test/integration/tests/fast/negate.input +0 -0
  441. data/test/integration/tests/fast/negate.output +0 -3
  442. data/test/integration/tests/fast/not.bas +0 -4
  443. data/test/integration/tests/fast/not.input +0 -0
  444. data/test/integration/tests/fast/not.output +0 -4
  445. data/test/integration/tests/fast/on_goto.bas +0 -6
  446. data/test/integration/tests/fast/on_goto.input +0 -0
  447. data/test/integration/tests/fast/on_goto.output +0 -2
  448. data/test/integration/tests/fast/or.bas +0 -5
  449. data/test/integration/tests/fast/or.input +0 -0
  450. data/test/integration/tests/fast/or.output +0 -5
  451. data/test/integration/tests/fast/parentheses.bas +0 -1
  452. data/test/integration/tests/fast/parentheses.input +0 -0
  453. data/test/integration/tests/fast/parentheses.output +0 -1
  454. data/test/integration/tests/fast/power.bas +0 -4
  455. data/test/integration/tests/fast/power.input +0 -0
  456. data/test/integration/tests/fast/power.output +0 -4
  457. data/test/integration/tests/fast/print.bas +0 -6
  458. data/test/integration/tests/fast/print.input +0 -0
  459. data/test/integration/tests/fast/print.output +0 -4
  460. data/test/integration/tests/fast/read_data.bas +0 -15
  461. data/test/integration/tests/fast/read_data.input +0 -0
  462. data/test/integration/tests/fast/read_data.output +0 -4
  463. data/test/integration/tests/fast/rem.bas +0 -1
  464. data/test/integration/tests/fast/rem.input +0 -0
  465. data/test/integration/tests/fast/rem.output +0 -0
  466. data/test/integration/tests/fast/right.bas +0 -1
  467. data/test/integration/tests/fast/right.input +0 -0
  468. data/test/integration/tests/fast/right.output +0 -1
  469. data/test/integration/tests/fast/rnd.bas +0 -5
  470. data/test/integration/tests/fast/rnd.input +0 -0
  471. data/test/integration/tests/fast/rnd.output +0 -5
  472. data/test/integration/tests/fast/sgn.bas +0 -5
  473. data/test/integration/tests/fast/sgn.input +0 -0
  474. data/test/integration/tests/fast/sgn.output +0 -5
  475. data/test/integration/tests/fast/sin.bas +0 -1
  476. data/test/integration/tests/fast/sin.input +0 -0
  477. data/test/integration/tests/fast/sin.output +0 -1
  478. data/test/integration/tests/fast/sqr.bas +0 -2
  479. data/test/integration/tests/fast/sqr.input +0 -0
  480. data/test/integration/tests/fast/sqr.output +0 -2
  481. data/test/integration/tests/fast/stop.bas +0 -3
  482. data/test/integration/tests/fast/stop.input +0 -0
  483. data/test/integration/tests/fast/stop.output +0 -2
  484. data/test/integration/tests/fast/str.bas +0 -3
  485. data/test/integration/tests/fast/str.input +0 -0
  486. data/test/integration/tests/fast/str.output +0 -3
  487. data/test/integration/tests/fast/string_addition.bas +0 -1
  488. data/test/integration/tests/fast/string_addition.input +0 -0
  489. data/test/integration/tests/fast/string_addition.output +0 -1
  490. data/test/integration/tests/fast/string_comparisons.bas +0 -7
  491. data/test/integration/tests/fast/string_comparisons.input +0 -0
  492. data/test/integration/tests/fast/string_comparisons.output +0 -4
  493. data/test/integration/tests/fast/string_plus_integer.bas +0 -1
  494. data/test/integration/tests/fast/string_plus_integer.input +0 -0
  495. data/test/integration/tests/fast/string_plus_integer.output +0 -1
  496. data/test/integration/tests/fast/subtract.bas +0 -5
  497. data/test/integration/tests/fast/subtract.input +0 -0
  498. data/test/integration/tests/fast/subtract.output +0 -5
  499. data/test/integration/tests/fast/tab.bas +0 -4
  500. data/test/integration/tests/fast/tab.input +0 -0
  501. data/test/integration/tests/fast/tab.output +0 -3
  502. data/test/integration/tests/fast/tan.bas +0 -1
  503. data/test/integration/tests/fast/tan.input +0 -0
  504. data/test/integration/tests/fast/tan.output +0 -1
  505. data/test/integration/tests/fast/val.bas +0 -3
  506. data/test/integration/tests/fast/val.input +0 -0
  507. data/test/integration/tests/fast/val.output +0 -3
  508. data/test/spec/argument_checker_spec.rb +0 -128
  509. data/test/spec/basic_array_spec.rb +0 -100
  510. data/test/spec/basic_float_spec.rb +0 -168
  511. data/test/spec/basic_integer_spec.rb +0 -270
  512. data/test/spec/basic_numeric_spec.rb +0 -16
  513. data/test/spec/basic_object_spec.rb +0 -22
  514. data/test/spec/basic_string_spec.rb +0 -259
  515. data/test/spec/for_stack_spec.rb +0 -70
  516. data/test/spec/input_reader_spec.rb +0 -143
  517. data/test/spec/input_spec.rb +0 -102
  518. data/test/spec/line_spec.rb +0 -18
  519. data/test/spec/output_spec.rb +0 -153
  520. data/test/spec/parser_spec.rb +0 -562
  521. data/test/spec/program_spec.rb +0 -45
  522. data/test/spec/spec_helper.rb +0 -16
  523. data/test/spec/support/basic_numeric_helpers.rb +0 -327
  524. data/test/spec/support/basic_object_helpers.rb +0 -22
  525. data/test/spec/transcript_spec.rb +0 -37
  526. data/test/spec/transform_spec.rb +0 -513
@@ -1,102 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- module Basic101
4
-
5
- describe Input do
6
-
7
- let(:output_isatty) {true}
8
- let(:input_isatty) {true}
9
- let(:file) {StringIO.new(input_string)}
10
- let(:output) {double Output, :isatty => output_isatty}
11
- subject(:input) {described_class.new(output, file)}
12
- before(:each) {allow(file).to receive(:isatty).and_return(input_isatty)}
13
-
14
- describe 'transcript' do
15
-
16
- let(:input_string) {"abc\n"}
17
- let(:input_file) {StringIO.new}
18
- let(:output_file) {StringIO.new}
19
- let(:transcript) {Transcript.new(input_file, output_file)}
20
-
21
- it 'should echo to the transcript' do
22
- input.transcript = transcript
23
- input.read_line
24
- expect(input_file.string).to eq input_string
25
- end
26
-
27
- end
28
-
29
- describe '#read_line' do
30
-
31
- describe 'output' do
32
-
33
- context 'when normal' do
34
- let(:input_string) {"abc\ndef\n"}
35
- specify do
36
- expect(input.read_line).to eq "abc"
37
- expect(input.read_line).to eq "def"
38
- expect {
39
- input.read_line
40
- }.to raise_error NoMoreInputError, "No more input"
41
- end
42
- end
43
-
44
- context 'when no terminating new-line' do
45
- let(:input_string) {"abc"}
46
- specify do
47
- expect(input.read_line).to eq "abc"
48
- expect {
49
- input.read_line
50
- }.to raise_error NoMoreInputError, "No more input"
51
- end
52
- end
53
-
54
- end
55
-
56
- describe 'echo' do
57
-
58
- let(:input_string) {"abc\n"}
59
-
60
- context 'when input is not tty and output is not tty' do
61
- let(:input_isatty) {false}
62
- let(:output_isatty) {false}
63
- specify do
64
- expect(output).to receive(:echo).with(input_string)
65
- input.read_line
66
- end
67
- end
68
-
69
- context 'when input is not tty and output is tty' do
70
- let(:input_isatty) {false}
71
- let(:output_isatty) {true}
72
- specify do
73
- expect(output).to receive(:echo).with(input_string)
74
- input.read_line
75
- end
76
- end
77
-
78
- context 'when input is tty and output is not tty' do
79
- let(:input_isatty) {true}
80
- let(:output_isatty) {false}
81
- specify do
82
- expect(output).to receive(:echo).with(input_string)
83
- input.read_line
84
- end
85
- end
86
-
87
- context 'when input is tty and output is tty' do
88
- let(:input_isatty) {true}
89
- let(:output_isatty) {true}
90
- specify do
91
- expect(output).to_not receive(:print)
92
- input.read_line
93
- end
94
- end
95
-
96
- end
97
-
98
- end
99
-
100
- end
101
-
102
- end
@@ -1,18 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- module Basic101
4
-
5
- describe Line do
6
-
7
- let(:line_number) {10}
8
- let(:statement1) {RemarkStatement.new}
9
- let(:statement2) {RemarkStatement.new}
10
- let(:statements) {[statement1, statement2]}
11
- subject!(:line) {Line.new(line_number, statements)}
12
-
13
- its(:line_number) {should eq line_number}
14
- its(:statements) {should eq statements}
15
-
16
- end
17
-
18
- end
@@ -1,153 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- module Basic101
4
-
5
- describe Output do
6
-
7
- let(:file) {StringIO.new}
8
- subject(:output) {described_class.new(file)}
9
-
10
- describe '#puts' do
11
-
12
- context 'with no string' do
13
- specify do
14
- output.puts
15
- expect(file.string).to eq "\n"
16
- end
17
- end
18
-
19
- context 'with string' do
20
- specify do
21
- output.puts "abc"
22
- expect(file.string).to eq "abc\n"
23
- end
24
- end
25
-
26
- end
27
-
28
- describe '#print' do
29
-
30
- context 'when string' do
31
- specify do
32
- output.print 'abc'
33
- expect(file.string).to eq 'abc'
34
- end
35
- end
36
-
37
- context 'when new line' do
38
- specify do
39
- output.print "\n"
40
- expect(file.string).to eq "\n"
41
- end
42
- end
43
-
44
- context 'when tab' do
45
-
46
- specify do
47
- output.print "\tx"
48
- expect(file.string).to eq " x"
49
- end
50
-
51
- specify do
52
- output.print "abcdefghijklm\tx"
53
- expect(file.string).to eq "abcdefghijklm x"
54
- end
55
-
56
- specify do
57
- output.print "abcdefghijklmn\tx"
58
- expect(file.string).to eq "abcdefghijklmn x"
59
- end
60
-
61
- end
62
-
63
- end
64
-
65
- describe '#tab_to' do
66
-
67
- context 'when tab to following column' do
68
- specify do
69
- output.tab_to(3)
70
- output.print('x')
71
- expect(file.string).to eq ' x'
72
- end
73
- end
74
-
75
- context 'when tab to current column' do
76
- specify do
77
- output.print(' ')
78
- output.tab_to(3)
79
- output.print('x')
80
- expect(file.string).to eq ' x'
81
- end
82
- end
83
-
84
- context 'when tab to previous column' do
85
- specify do
86
- output.print(' x')
87
- output.tab_to(3)
88
- output.print('y')
89
- expect(file.string).to eq " xy"
90
- end
91
- end
92
-
93
- context 'when tab to first column' do
94
- specify do
95
- output.tab_to(0)
96
- output.print('x')
97
- expect(file.string).to eq "x"
98
- end
99
- end
100
-
101
- context 'when tab to negative column' do
102
- specify do
103
- output.tab_to(-1)
104
- output.print('x')
105
- expect(file.string).to eq "x"
106
- end
107
- end
108
-
109
- end
110
-
111
- describe 'transcript' do
112
-
113
- let(:input_file) {StringIO.new}
114
- let(:output_file) {StringIO.new}
115
- let(:transcript) {Transcript.new(input_file, output_file)}
116
-
117
- context 'when puts called' do
118
- it 'should echo to the transcript' do
119
- output.transcript = transcript
120
- output.puts "abc"
121
- expect(output_file.string).to eq "abc\n"
122
- end
123
- end
124
-
125
- context 'when echo called' do
126
- it 'should not echo to the transcript' do
127
- output.transcript = transcript
128
- output.echo "abc"
129
- expect(output_file.string).to eq ""
130
- end
131
- end
132
-
133
- end
134
-
135
- describe '#isatty' do
136
-
137
- before(:each) {allow(file).to receive(:isatty).and_return(file_isatty)}
138
-
139
- context 'when file is tty' do
140
- let(:file_isatty) {true}
141
- its(:isatty) {should be_truthy}
142
- end
143
-
144
- context 'when file is tty' do
145
- let(:file_isatty) {false}
146
- its(:isatty) {should be_falsey}
147
- end
148
-
149
- end
150
-
151
- end
152
-
153
- end
@@ -1,562 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- module Basic101
4
-
5
- describe Parser do
6
-
7
- def self.it_should_match(s)
8
- it "should consume #{s.inspect}" do
9
- expect {rule.parse(s)}.to_not raise_error
10
- end
11
- end
12
-
13
- def self.it_should_not_match(s)
14
- it "should not consume #{s.inspect}" do
15
- expect{rule.parse(s)}.to raise_error Parslet::ParseFailed
16
- end
17
- end
18
-
19
- let(:parser) {Parser.new}
20
-
21
- describe 'new_line' do
22
- let(:rule) {parser.new_line}
23
- it_should_match "\n"
24
- it_should_match "\r\n"
25
- end
26
-
27
- describe 'space' do
28
- let(:rule) {parser.space}
29
- it_should_not_match ''
30
- it_should_match ' '
31
- it_should_match ' '
32
- end
33
-
34
- describe 'space?' do
35
- let(:rule) {parser.space?}
36
- it_should_match ''
37
- it_should_match ' '
38
- it_should_match ' '
39
- end
40
-
41
- describe 'printable' do
42
- let(:rule) {parser.printable}
43
- it_should_not_match "\x1f"
44
- it_should_match "\x20"
45
- it_should_match "\x7e"
46
- it_should_not_match "\x7f"
47
- end
48
-
49
- describe 'decimal' do
50
- let(:rule) {parser.decimal}
51
- it_should_match '0'
52
- it_should_match '123'
53
- end
54
-
55
- describe 'sign' do
56
- let(:rule) {parser.sign}
57
- it_should_match '+'
58
- it_should_match '-'
59
- end
60
-
61
- describe 'integer' do
62
- let(:rule) {parser.integer}
63
- it_should_match '123'
64
- it_should_match '-123'
65
- it_should_match '+123'
66
- end
67
-
68
- describe 'fixed' do
69
- let(:rule) {parser.float}
70
- it_should_match '.2'
71
- it_should_match '2.'
72
- it_should_match '1.2'
73
- it_should_match '-1.2'
74
- it_should_match '+1.2'
75
- it_should_not_match '1'
76
- end
77
-
78
- describe 'exponent' do
79
- let(:rule) {parser.exponent}
80
- it_should_match 'E10'
81
- it_should_match 'E-10'
82
- it_should_match 'E+10'
83
- end
84
-
85
- describe 'float' do
86
- let(:rule) {parser.float}
87
- it_should_match '1.2'
88
- it_should_match '1E10'
89
- it_should_match '1E+10'
90
- it_should_match '1E-10'
91
- it_should_not_match '1'
92
- end
93
-
94
- describe 'line_number' do
95
- let(:rule) {parser.integer}
96
- it_should_match '10'
97
- it_should_match '20'
98
- end
99
-
100
- describe 'unquoted_string' do
101
- let(:rule) {parser.unquoted_string}
102
- it_should_match 'abc'
103
- it_should_match ''
104
- it_should_not_match ','
105
- it_should_not_match '"'
106
- it_should_not_match ':'
107
- it_should_not_match ' '
108
- it_should_not_match "\n"
109
- it_should_not_match "\r"
110
- end
111
-
112
- describe 'quoted_string' do
113
- let(:rule) {parser.quoted_string}
114
- it_should_match '""'
115
- it_should_match '"abc"'
116
- it_should_not_match %Q'"\n"'
117
- end
118
-
119
- describe 'user_defined_function_identifier' do
120
- let(:rule) {parser.user_defined_function_identifier}
121
- it_should_match 'FNA'
122
- it_should_match 'FNB1'
123
- it_should_match 'FNS$'
124
- end
125
-
126
- describe 'built_in_function_identifier' do
127
- let(:rule) {parser.built_in_function_identifier}
128
- it_should_match 'LEN'
129
- it_should_match 'RIGHT$'
130
- end
131
-
132
- describe 'function_identifier' do
133
- let(:rule) {parser.function_identifier}
134
- it_should_match 'FNA'
135
- it_should_match 'LEN'
136
- end
137
-
138
- describe 'base_identifier' do
139
- let(:rule) {parser.base_identifier}
140
- it_should_match 'A'
141
- it_should_match 'A1'
142
- it_should_match 'AZ'
143
- it_should_not_match 'ELSE'
144
- end
145
-
146
- describe 'built_in_function_identifier' do
147
- let(:rule) {parser.built_in_function_identifier}
148
- it_should_match 'ABS'
149
- it_should_match 'ASC'
150
- it_should_match 'CHR$'
151
- it_should_match 'COS'
152
- it_should_match 'EXP'
153
- it_should_match 'INT'
154
- it_should_match 'LEFT$'
155
- it_should_match 'LEN'
156
- it_should_match 'LOG'
157
- it_should_match 'MID$'
158
- it_should_match 'RIGHT$'
159
- it_should_match 'RND'
160
- it_should_match 'SGN'
161
- it_should_match 'SIN'
162
- it_should_match 'SQR'
163
- it_should_match 'STR$'
164
- it_should_match 'TAB'
165
- it_should_match 'TAN'
166
- it_should_match 'VAL'
167
- end
168
-
169
- describe 'numeric_identifier' do
170
- let(:rule) {parser.numeric_identifier}
171
- it_should_match 'A'
172
- it_should_match 'A1'
173
- end
174
-
175
- describe 'string_identifier' do
176
- let(:rule) {parser.string_identifier}
177
- it_should_match 'A$'
178
- it_should_match 'A1$'
179
- end
180
-
181
- describe 'identifier' do
182
- let(:rule) {parser.identifier}
183
- it_should_match 'A'
184
- it_should_match 'A$'
185
- end
186
-
187
- describe 'argument_list' do
188
- let(:rule) {parser.argument_list}
189
- it_should_match '"a"'
190
- it_should_match '"a" , "b"'
191
- it_should_match '"a","b"'
192
- end
193
-
194
- describe 'array_reference' do
195
- let(:rule) {parser.array_reference}
196
- it_should_match 'A("a")'
197
- it_should_match 'A ( "a", "b" )'
198
- it_should_match 'A("a","b")'
199
- end
200
-
201
- describe 'scalar_reference' do
202
- let(:rule) {parser.scalar_reference}
203
- it_should_match 'A'
204
- it_should_match 'S$'
205
- end
206
-
207
- describe 'scalar_reference_list' do
208
- let(:rule) {parser.scalar_reference_list}
209
- it_should_match 'I'
210
- it_should_match 'I , J'
211
- it_should_match 'I,J'
212
- end
213
-
214
- describe 'reference' do
215
- let(:rule) {parser.reference}
216
- it_should_match 'A ( 1 )'
217
- it_should_match 'A(1)'
218
- it_should_match 'S$'
219
- end
220
-
221
- describe 'reference_list' do
222
- let(:rule) {parser.reference_list}
223
- it_should_match 'A(1)'
224
- it_should_match 'I,J'
225
- end
226
-
227
- describe 'let_statement' do
228
- let(:rule) {parser.let_statement}
229
- it_should_match 'LET I = 1'
230
- it_should_match 'LETI=1'
231
- it_should_match 'I = 1'
232
- it_should_match 'A(10) = 1'
233
- it_should_match 'A$(10) = 1'
234
- it_should_match 'S$ = "FOO"'
235
- end
236
-
237
- describe 'multiply_op' do
238
- let(:rule) {parser.multiply_op}
239
- it_should_match '*'
240
- it_should_match '/'
241
- end
242
-
243
- describe 'addition_op' do
244
- let(:rule) {parser.addition_op}
245
- it_should_match '+'
246
- it_should_match '-'
247
- end
248
-
249
- describe 'comparison_op' do
250
- let(:rule) {parser.comparison_op}
251
- it_should_match '='
252
- it_should_match '<>'
253
- it_should_match '>'
254
- it_should_match '>='
255
- it_should_match '<'
256
- it_should_match '<='
257
- end
258
-
259
- describe 'and_op' do
260
- let(:rule) {parser.and_op}
261
- it_should_match 'AND'
262
- end
263
-
264
- describe 'or_op' do
265
- let(:rule) {parser.or_op}
266
- it_should_match 'OR'
267
- end
268
-
269
- describe 'function_call' do
270
- let(:rule) {parser.function_call}
271
- it_should_match 'FNA(1, 2)'
272
- it_should_match 'STR$("abc")'
273
- end
274
-
275
- describe 'factor' do
276
- let(:rule) {parser.factor}
277
- it_should_match '"abc"'
278
- it_should_match '1.2'
279
- it_should_match '123'
280
- it_should_match 'I'
281
- it_should_match 'FNA(1)'
282
- it_should_match '( 1 + 2 )'
283
- it_should_match '(1+2)'
284
- end
285
-
286
- describe 'power' do
287
- let(:rule) {parser.power}
288
- it_should_match '1^2'
289
- it_should_match '1^2^3'
290
- it_should_match 'I'
291
- end
292
-
293
- describe 'negation' do
294
- let(:rule) {parser.negation}
295
- it_should_match '-I'
296
- it_should_match 'I'
297
- end
298
-
299
- describe 'term' do
300
- let(:rule) {parser.term}
301
- it_should_match '1'
302
- it_should_match '1 * 2'
303
- it_should_match '1 * 2 / 3'
304
- it_should_match '1*2/3'
305
- end
306
-
307
- describe 'simple_expression' do
308
- let(:rule) {parser.simple_expression}
309
- it_should_match '1'
310
- it_should_match '1 + 2'
311
- it_should_match '1 + 2 - 3'
312
- it_should_match '1+2-3'
313
- end
314
-
315
- describe 'comparison_expression' do
316
- let(:rule) {parser.comparison_expression}
317
- it_should_match '1'
318
- it_should_match '1 > 2'
319
- it_should_match '1 + 2 > 2 + 3'
320
- it_should_match '1+2>2+3'
321
- end
322
-
323
- describe 'not_expression' do
324
- let(:rule) {parser.not_expression}
325
- it_should_match '1'
326
- it_should_match 'NOT 1'
327
- it_should_match 'NOT1'
328
- end
329
-
330
- describe 'and_expression' do
331
- let(:rule) {parser.and_expression}
332
- it_should_match '1'
333
- it_should_match '1 AND 1'
334
- it_should_match '1 AND 1 AND 0'
335
- it_should_match '1AND1AND0'
336
- end
337
-
338
- describe 'or_expression' do
339
- let(:rule) {parser.or_expression}
340
- it_should_match '1'
341
- it_should_match '1 OR 0'
342
- it_should_match '1 OR 0 OR 1'
343
- it_should_match '1OR0OR1'
344
- end
345
-
346
- describe 'expression' do
347
- let(:rule) {parser.expression}
348
- it_should_match 'NOT 2 * (3 + 1) + 4 > 5 AND 1 OR 0'
349
- it_should_match 'NOT2*(3+1)+4>5AND1OR0'
350
- end
351
-
352
- describe 'remark_statement' do
353
- let(:rule) {parser.remark_statement}
354
- it_should_match 'REM'
355
- it_should_match 'REM THIS IS A REMARK'
356
- it_should_match 'REMTHISISAREMARK'
357
- end
358
-
359
- describe 'print_separator' do
360
- let(:rule) {parser.print_separator}
361
- it_should_match ';'
362
- it_should_match ','
363
- end
364
-
365
- describe 'print_arguments' do
366
- let(:rule) {parser.print_arguments}
367
- it_should_match ''
368
- it_should_match ';'
369
- it_should_match '1'
370
- it_should_match '1 "FOO" , A'
371
- end
372
-
373
- describe 'print_statement' do
374
- let(:rule) {parser.print_statement}
375
- it_should_match 'PRINT'
376
- it_should_match 'PRINT ,'
377
- it_should_match 'PRINT , "A"'
378
- it_should_match 'PRINT "A"'
379
- it_should_match 'PRINT "A" ;'
380
- it_should_match 'PRINT "A", 1'
381
- it_should_match 'PRINT "A", 1 ;'
382
- it_should_match 'PRINT1,"A";'
383
- it_should_not_match 'PRINT "ok" ELSE'
384
- end
385
-
386
- describe 'goto_statement' do
387
- let(:rule) {parser.goto_statement}
388
- it_should_match 'GOTO 10'
389
- it_should_match 'GOTO10'
390
- end
391
-
392
- describe 'if_block' do
393
- let(:rule) {parser.if_block}
394
- it_should_match '123'
395
- it_should_match 'GOTO 10'
396
- it_should_match 'PRINT:PRINT'
397
- end
398
-
399
- describe 'if_statement' do
400
- let(:rule) {parser.if_statement}
401
- it_should_match 'IF 1 THEN 20'
402
- it_should_match 'IF 1 THEN PRINT "FOO"'
403
- it_should_match 'IF 1 THEN PRINT "FOO" ELSE PRINT "BAR"'
404
- it_should_match 'IF1THENPRINT"FOO"ELSEPRINT"BAR"'
405
- it_should_match 'IFK9>T9THENT9=K9+1'
406
- end
407
-
408
- describe 'randomize_statement' do
409
- let(:rule) {parser.randomize_statement}
410
- it_should_match 'RANDOMIZE'
411
- end
412
-
413
- describe 'prompt_delimeter' do
414
- let(:rule) {parser.prompt_delimeter}
415
- it_should_match ','
416
- it_should_match ';'
417
- end
418
-
419
- describe 'input_statement' do
420
- let(:rule) {parser.input_statement}
421
- it_should_match 'INPUT I'
422
- it_should_match 'INPUT I, J'
423
- it_should_match 'INPUT "FOO", A$'
424
- it_should_match 'INPUT "FOO" ; A$'
425
- it_should_match 'INPUT"FOO";A$'
426
- end
427
-
428
- describe 'end_statement' do
429
- let(:rule) {parser.end_statement}
430
- it_should_match 'END'
431
- end
432
-
433
- describe 'dim_statement' do
434
- let(:rule) {parser.dim_statement}
435
- it_should_match 'DIM A(20)'
436
- it_should_match 'DIM A(X, Y)'
437
- it_should_match 'DIM A ( 10 ), B ( 10 )'
438
- it_should_match 'DIMA(10),B(10)'
439
- end
440
-
441
- describe 'for_statement' do
442
- let(:rule) {parser.for_statement}
443
- it_should_match 'FOR I = 1 TO 10'
444
- it_should_match 'FOR I = 1 TO 10 STEP 2'
445
- it_should_match 'FORI=1TO10STEP-2'
446
- end
447
-
448
- describe 'next_statement' do
449
- let(:rule) {parser.next_statement}
450
- it_should_match 'NEXT'
451
- it_should_match 'NEXT I'
452
- it_should_match 'NEXT I, J'
453
- it_should_match 'NEXTI,J'
454
- end
455
-
456
- describe 'on_goto_statement' do
457
- let(:rule) {parser.on_goto_statement}
458
- it_should_match 'ON I GOTO 10'
459
- it_should_match 'ON I + 1 GOTO 10, 20'
460
- it_should_match 'ONI+1GOTO10,20'
461
- end
462
-
463
- describe 'data_item' do
464
- let(:rule) {parser.data_item}
465
- it_should_match 'abc'
466
- it_should_match '"abc"'
467
- it_should_match '123'
468
- it_should_match '123.45'
469
- end
470
-
471
- describe 'data_statement' do
472
- let(:rule) {parser.data_statement}
473
- it_should_match 'DATA 1'
474
- it_should_match 'DATA 1.23,"ABC",def'
475
- end
476
-
477
- describe 'read_statement' do
478
- let(:rule) {parser.read_statement}
479
- it_should_match 'READ I'
480
- it_should_match 'READ I, A ( 1 )'
481
- it_should_match 'READI,A(1)'
482
- end
483
-
484
- describe 'gosub_statement' do
485
- let(:rule) {parser.gosub_statement}
486
- it_should_match 'GOSUB 100'
487
- it_should_match 'GOSUB100'
488
- end
489
-
490
- describe 'return_statement' do
491
- let(:rule) {parser.return_statement}
492
- it_should_match 'RETURN'
493
- end
494
-
495
- describe 'stop_statement' do
496
- let(:rule) {parser.stop_statement}
497
- it_should_match 'STOP'
498
- end
499
-
500
- describe 'restore_statement' do
501
- let(:rule) {parser.restore_statement}
502
- it_should_match 'RESTORE'
503
- it_should_match 'RESTORE 100'
504
- it_should_match 'RESTORE100'
505
- end
506
-
507
- describe 'define_function_statement' do
508
- let(:rule) {parser.define_function_statement}
509
- it_should_match 'DEF FNS$(S) = "FOO"'
510
- it_should_match 'DEF FNA(I) = 2 * I'
511
- it_should_match 'DEF FNA ( I , J ) = I + J'
512
- it_should_match 'DEFFNA(I,J)=I+J'
513
- end
514
-
515
- describe 'statement' do
516
- let(:rule) {parser.statement}
517
- it_should_match 'REM'
518
- it_should_match 'PRINT'
519
- it_should_match 'I=1'
520
- it_should_match 'GOTO 10'
521
- it_should_match 'IF 1 THEN 20'
522
- it_should_match 'RANDOMIZE'
523
- it_should_match 'INPUT I'
524
- it_should_match 'END'
525
- it_should_match 'DIM A(10)'
526
- it_should_match 'FOR I = 1 TO 10'
527
- it_should_match 'NEXT'
528
- it_should_match 'ON I GOTO 10, 20'
529
- it_should_match 'DATA 1'
530
- it_should_match 'READ I'
531
- it_should_match 'GOSUB 100'
532
- it_should_match 'RETURN'
533
- it_should_match 'STOP'
534
- it_should_match 'RESTORE'
535
- it_should_match 'DEF FNA(I) = 2 * I'
536
- end
537
-
538
- describe 'statements' do
539
- let(:rule) {parser.statements}
540
- it_should_match 'REM'
541
- it_should_match 'PRINT:PRINT'
542
- it_should_match 'PRINT:PRINT:'
543
- it_should_match 'PRINT : PRINT :'
544
- end
545
-
546
- describe 'line' do
547
- let(:rule) {parser.line}
548
- it_should_match '10REM'
549
- it_should_match '10 REM'
550
- it_should_match '20 PRINT:PRINT'
551
- end
552
-
553
- describe 'program' do
554
- let(:rule) {parser.program}
555
- it_should_match ""
556
- it_should_match "10 REM\n"
557
- it_should_match "10 REM\n20 PRINT\n"
558
- end
559
-
560
- end
561
-
562
- end