template-ruby 0.5.6 → 0.6.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 (184) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/Gemfile.lock +15 -22
  4. data/lib/template/version.rb +1 -1
  5. data/lib/template-ruby.rb +2 -3
  6. data/lib/template.rb +18 -22
  7. data/spec/spec_helper.rb +0 -5
  8. data/spec/template_spec.rb +13 -0
  9. data/template-ruby.gemspec +2 -1
  10. metadata +34 -222
  11. data/.cherry.js +0 -21
  12. data/.editorconfig +0 -9
  13. data/.github/workflows/rspec.yml +0 -14
  14. data/.gitignore +0 -2
  15. data/.prettierrc +0 -3
  16. data/.tool-versions +0 -1
  17. data/CHANGELOG.md +0 -55
  18. data/LICENSE +0 -7
  19. data/README.md +0 -103
  20. data/TODO +0 -17
  21. data/bin/code +0 -76
  22. data/bin/format +0 -3
  23. data/bin/publish +0 -19
  24. data/bin/template +0 -85
  25. data/bin/test +0 -17
  26. data/code-ruby.gemspec +0 -17
  27. data/docs/class.code +0 -9
  28. data/docs/euler/1.template +0 -10
  29. data/docs/euler/2.template +0 -16
  30. data/docs/euler/3.template +0 -16
  31. data/docs/euler/4.template +0 -10
  32. data/docs/euler/5.template +0 -13
  33. data/docs/fibonnaci.template +0 -14
  34. data/docs/meetup.code +0 -12
  35. data/docs/precedence.template +0 -36
  36. data/docs/rain.code +0 -22
  37. data/docs/slack.code +0 -17
  38. data/docs/stripe.code +0 -7
  39. data/docs/twitter.code +0 -9
  40. data/language-ruby.gemspec +0 -17
  41. data/lib/code/error.rb +0 -18
  42. data/lib/code/node/base_10.rb +0 -29
  43. data/lib/code/node/base_16.rb +0 -13
  44. data/lib/code/node/base_2.rb +0 -13
  45. data/lib/code/node/base_8.rb +0 -13
  46. data/lib/code/node/boolean.rb +0 -22
  47. data/lib/code/node/call.rb +0 -47
  48. data/lib/code/node/call_argument.rb +0 -21
  49. data/lib/code/node/chained_call.rb +0 -23
  50. data/lib/code/node/code.rb +0 -20
  51. data/lib/code/node/decimal.rb +0 -26
  52. data/lib/code/node/dictionnary.rb +0 -33
  53. data/lib/code/node/equal.rb +0 -34
  54. data/lib/code/node/function.rb +0 -20
  55. data/lib/code/node/function_parameter.rb +0 -31
  56. data/lib/code/node/if.rb +0 -59
  57. data/lib/code/node/if_modifier.rb +0 -47
  58. data/lib/code/node/list.rb +0 -16
  59. data/lib/code/node/negation.rb +0 -15
  60. data/lib/code/node/not.rb +0 -15
  61. data/lib/code/node/nothing.rb +0 -12
  62. data/lib/code/node/number.rb +0 -25
  63. data/lib/code/node/operation.rb +0 -38
  64. data/lib/code/node/power.rb +0 -20
  65. data/lib/code/node/rescue.rb +0 -17
  66. data/lib/code/node/splat.rb +0 -15
  67. data/lib/code/node/statement.rb +0 -59
  68. data/lib/code/node/string.rb +0 -53
  69. data/lib/code/node/ternary.rb +0 -24
  70. data/lib/code/node/unary_minus.rb +0 -15
  71. data/lib/code/node/while.rb +0 -35
  72. data/lib/code/node.rb +0 -13
  73. data/lib/code/object/argument.rb +0 -32
  74. data/lib/code/object/boolean.rb +0 -27
  75. data/lib/code/object/decimal.rb +0 -162
  76. data/lib/code/object/dictionnary.rb +0 -96
  77. data/lib/code/object/function.rb +0 -64
  78. data/lib/code/object/global.rb +0 -42
  79. data/lib/code/object/integer.rb +0 -221
  80. data/lib/code/object/list.rb +0 -207
  81. data/lib/code/object/nothing.rb +0 -23
  82. data/lib/code/object/number.rb +0 -6
  83. data/lib/code/object/range.rb +0 -146
  84. data/lib/code/object/ruby_function.rb +0 -31
  85. data/lib/code/object/string.rb +0 -102
  86. data/lib/code/object.rb +0 -197
  87. data/lib/code/parser/addition.rb +0 -21
  88. data/lib/code/parser/and_operator.rb +0 -17
  89. data/lib/code/parser/bitwise_and.rb +0 -17
  90. data/lib/code/parser/bitwise_or.rb +0 -21
  91. data/lib/code/parser/boolean.rb +0 -17
  92. data/lib/code/parser/call.rb +0 -122
  93. data/lib/code/parser/chained_call.rb +0 -47
  94. data/lib/code/parser/class.rb +0 -45
  95. data/lib/code/parser/code.rb +0 -25
  96. data/lib/code/parser/dictionnary.rb +0 -67
  97. data/lib/code/parser/equal.rb +0 -94
  98. data/lib/code/parser/equality.rb +0 -35
  99. data/lib/code/parser/equality_lower.rb +0 -9
  100. data/lib/code/parser/function.rb +0 -85
  101. data/lib/code/parser/greater.rb +0 -25
  102. data/lib/code/parser/group.rb +0 -22
  103. data/lib/code/parser/if.rb +0 -63
  104. data/lib/code/parser/if_modifier.rb +0 -55
  105. data/lib/code/parser/list.rb +0 -42
  106. data/lib/code/parser/multiplication.rb +0 -25
  107. data/lib/code/parser/name.rb +0 -107
  108. data/lib/code/parser/negation.rb +0 -30
  109. data/lib/code/parser/not_keyword.rb +0 -23
  110. data/lib/code/parser/nothing.rb +0 -22
  111. data/lib/code/parser/number.rb +0 -154
  112. data/lib/code/parser/operation.rb +0 -35
  113. data/lib/code/parser/or_keyword.rb +0 -21
  114. data/lib/code/parser/or_operator.rb +0 -17
  115. data/lib/code/parser/power.rb +0 -43
  116. data/lib/code/parser/range.rb +0 -17
  117. data/lib/code/parser/rescue.rb +0 -39
  118. data/lib/code/parser/shift.rb +0 -21
  119. data/lib/code/parser/splat.rb +0 -31
  120. data/lib/code/parser/statement.rb +0 -9
  121. data/lib/code/parser/string.rb +0 -78
  122. data/lib/code/parser/ternary.rb +0 -46
  123. data/lib/code/parser/unary_minus.rb +0 -31
  124. data/lib/code/parser/while.rb +0 -36
  125. data/lib/code/parser/whitespace.rb +0 -49
  126. data/lib/code/parser.rb +0 -19
  127. data/lib/code/ruby.rb +0 -174
  128. data/lib/code-ruby.rb +0 -10
  129. data/lib/code.rb +0 -47
  130. data/lib/language/atom.rb +0 -342
  131. data/lib/language/output.rb +0 -130
  132. data/lib/language/parser/absent/present.rb +0 -8
  133. data/lib/language/parser/absent.rb +0 -6
  134. data/lib/language/parser/end_of_input.rb +0 -6
  135. data/lib/language/parser/interuption.rb +0 -38
  136. data/lib/language/parser/not_end_of_input.rb +0 -6
  137. data/lib/language/parser/str/not_found.rb +0 -16
  138. data/lib/language/parser/str.rb +0 -6
  139. data/lib/language/parser.rb +0 -53
  140. data/lib/language-ruby.rb +0 -10
  141. data/lib/language.rb +0 -80
  142. data/spec/code/addition_spec.rb +0 -13
  143. data/spec/code/and_operator_spec.rb +0 -13
  144. data/spec/code/bitwise_and_spec.rb +0 -13
  145. data/spec/code/bitwise_or_spec.rb +0 -13
  146. data/spec/code/boolean_spec.rb +0 -13
  147. data/spec/code/call_spec.rb +0 -21
  148. data/spec/code/chained_call_spec.rb +0 -16
  149. data/spec/code/code_spec.rb +0 -29
  150. data/spec/code/dictionnary_spec.rb +0 -17
  151. data/spec/code/equal_spec.rb +0 -26
  152. data/spec/code/equality_spec.rb +0 -13
  153. data/spec/code/function_spec.rb +0 -18
  154. data/spec/code/greater_spec.rb +0 -18
  155. data/spec/code/group_spec.rb +0 -12
  156. data/spec/code/if_modifier_spec.rb +0 -20
  157. data/spec/code/if_spec.rb +0 -25
  158. data/spec/code/list_spec.rb +0 -19
  159. data/spec/code/multiplication_spec.rb +0 -18
  160. data/spec/code/negation_spec.rb +0 -20
  161. data/spec/code/not_keyword_spec.rb +0 -13
  162. data/spec/code/nothing_spec.rb +0 -17
  163. data/spec/code/number_spec.rb +0 -22
  164. data/spec/code/or_keyword_spec.rb +0 -17
  165. data/spec/code/or_operator_spec.rb +0 -16
  166. data/spec/code/parser/boolean_spec.rb +0 -16
  167. data/spec/code/parser/call_spec.rb +0 -26
  168. data/spec/code/parser/chained_call.rb +0 -17
  169. data/spec/code/parser/dictionnary_spec.rb +0 -18
  170. data/spec/code/parser/function_spec.rb +0 -16
  171. data/spec/code/parser/group_spec.rb +0 -18
  172. data/spec/code/parser/list_spec.rb +0 -18
  173. data/spec/code/parser/number_spec.rb +0 -12
  174. data/spec/code/parser/string_spec.rb +0 -21
  175. data/spec/code/parser_spec.rb +0 -23
  176. data/spec/code/power_spec.rb +0 -13
  177. data/spec/code/range_spec.rb +0 -16
  178. data/spec/code/rescue_spec.rb +0 -13
  179. data/spec/code/shift_spec.rb +0 -13
  180. data/spec/code/splat_spec.rb +0 -13
  181. data/spec/code/string_spec.rb +0 -27
  182. data/spec/code/ternary_spec.rb +0 -18
  183. data/spec/code/unary_minus_spec.rb +0 -13
  184. data/spec/code/while_spec.rb +0 -18
@@ -1,38 +0,0 @@
1
- class Language
2
- class Parser
3
- class Interuption < StandardError
4
- def initialize(parser, atom = Atom.new)
5
- @parser = parser
6
- @atom = atom
7
- end
8
-
9
- def message
10
- "\n#{line}#{" " * column_index}^\n"
11
- end
12
-
13
- def line
14
- l = input.lines[line_index]
15
- l += "\n" if l[-1] != "\n"
16
- l
17
- end
18
-
19
- def line_index
20
- input[...cursor].count("\n")
21
- end
22
-
23
- def column_index
24
- cursor - input.lines[...line_index].map(&:size).sum
25
- end
26
-
27
- private
28
-
29
- def cursor
30
- @parser.cursor
31
- end
32
-
33
- def input
34
- @parser.input
35
- end
36
- end
37
- end
38
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class NotEndOfInput < Interuption
4
- end
5
- end
6
- end
@@ -1,16 +0,0 @@
1
- class Language
2
- class Parser
3
- class Str
4
- class NotFound < Interuption
5
- def initialize(parser, string)
6
- @parser = parser
7
- @string = string
8
- end
9
-
10
- def message
11
- "#{@string} not found\n#{super}"
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class Str
4
- end
5
- end
6
- end
@@ -1,53 +0,0 @@
1
- class Language
2
- class Parser
3
- attr_accessor :input, :buffer, :output, :root, :cursor
4
-
5
- def initialize(root:, input:, cursor: 0, buffer: "", output: Output.new)
6
- @root = root
7
- @input = input
8
- @cursor = cursor
9
- @buffer = buffer
10
- @output = output
11
- end
12
-
13
- def parse(check_end_of_input: true)
14
- @root.parse(self)
15
-
16
- if @cursor == @input.size || !check_end_of_input
17
- @output.present? ? @output : Output.new(@buffer)
18
- else
19
- raise NotEndOfInput.new(self)
20
- end
21
- end
22
-
23
- def consume(n)
24
- if @cursor + n <= @input.size
25
- @buffer += @input[@cursor, n]
26
- @cursor += n
27
- else
28
- raise EndOfInput.new(self)
29
- end
30
- end
31
-
32
- def aka(name)
33
- if @buffer.empty?
34
- @output = Output.new({ name => @output })
35
- else
36
- @output[name] = Output.new(@buffer)
37
- @buffer = ""
38
- end
39
- end
40
-
41
- def next?(string)
42
- @input[@cursor...(@cursor + string.size)] == string
43
- end
44
-
45
- def buffer?
46
- @buffer != ""
47
- end
48
-
49
- def output?
50
- @output.present?
51
- end
52
- end
53
- end
data/lib/language-ruby.rb DELETED
@@ -1,10 +0,0 @@
1
- require "bigdecimal"
2
- require "stringio"
3
- require "timeout"
4
- require "zeitwerk"
5
-
6
- loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
7
- loader.ignore("#{__dir__}/template-ruby.rb")
8
- loader.ignore("#{__dir__}/code-ruby.rb")
9
- loader.ignore("#{__dir__}/language-ruby.rb")
10
- loader.setup
data/lib/language.rb DELETED
@@ -1,80 +0,0 @@
1
- class Language
2
- def self.parse(input)
3
- new.parse(input)
4
- end
5
-
6
- def self.absent
7
- Atom::Absent.new(parent: new)
8
- end
9
-
10
- def self.ignore
11
- Atom::Ignore.new(parent: new)
12
- end
13
-
14
- def self.maybe
15
- Atom::Maybe.new(parent: new)
16
- end
17
-
18
- def self.repeat(min = 0, max = nil)
19
- Atom::Repeat.new(parent: new, min: min, max: max)
20
- end
21
-
22
- def self.aka(name)
23
- Atom::Aka.new(parent: new, name: name)
24
- end
25
-
26
- def self.|(other)
27
- Atom::Or.new(left: new, right: other)
28
- end
29
-
30
- def self.>>(other)
31
- Atom::And.new(left: new, right: other)
32
- end
33
-
34
- def self.<<(other)
35
- Atom::And.new(left: new, right: other)
36
- end
37
-
38
- def self.then(&block)
39
- Atom::Then.new(parent: new, block: block)
40
- end
41
-
42
- def parse(input_or_parser)
43
- if input_or_parser.is_a?(Parser)
44
- parser = input_or_parser
45
- clone =
46
- Parser.new(
47
- root: root,
48
- input: parser.input,
49
- cursor: parser.cursor,
50
- buffer: parser.buffer,
51
- output: parser.output
52
- )
53
-
54
- clone.parse(check_end_of_input: false)
55
-
56
- parser.cursor = clone.cursor
57
- parser.buffer = clone.buffer
58
- parser.output = clone.output
59
- else
60
- input = input_or_parser
61
- Parser.new(root: root, input: input).parse
62
- end
63
- end
64
-
65
- def str(string)
66
- Atom::Str.new(string: string)
67
- end
68
-
69
- def any
70
- Atom::Any.new
71
- end
72
-
73
- def to_s
74
- "<#{self.class.name}>"
75
- end
76
-
77
- def inspect
78
- to_s
79
- end
80
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 + 2", "3"], ["2 - 1", "1"], ["a = 2 - 1 a", "1"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "and operator" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["true && false", "false"], ["true && true", "true"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "bitwise and" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 & 1", "1"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "bitwise or" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 | 2", "3"], ["1 ^ 2", "3"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "boolean" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [%w[true true], %w[false false]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "call" do
4
- let(:timeout) { 0 }
5
-
6
- context "inspecting the io" do
7
- let(:io) { StringIO.new }
8
-
9
- subject do
10
- Code.evaluate(input, io: io, timeout: timeout)
11
- io.string
12
- end
13
-
14
- [["puts(true)", "true\n"], %w[print(false) false]].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
21
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "chained call" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["[1, 2, 3].select { |n| n.even? }", "[2]"],
9
- ["[1, 2, 3].select { |n| n.even? }.select { |n| n.odd? }", "[]"]
10
- ].each do |input, output|
11
- context input do
12
- let(:input) { input }
13
- it { expect(subject).to eq(output) }
14
- end
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- it "converts nil" do
5
- expect(Code::Ruby.from_code(Code.evaluate("a", ruby: { a: nil }))).to eq(nil)
6
- end
7
-
8
- it "works with downcase" do
9
- expect(Code.evaluate("downcase", "{ downcase: 1 }")).to eq(1)
10
- end
11
-
12
- it "works with nested objects" do
13
- expect(
14
- Code.evaluate(
15
- "items.first.title",
16
- ruby: { items: [{ title: "Hello" }] }
17
- )
18
- ).to eq("Hello")
19
- end
20
-
21
- it "works with arrays" do
22
- expect(
23
- Code.evaluate(
24
- "items.map { |item| item.title }",
25
- ruby: { items: [{ title: "Hello" }] }
26
- )
27
- ).to eq(["Hello"])
28
- end
29
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "dictionnary" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[{} {}],
9
- ["{ a: 1, b: 2, c: 3 }", '{"a" => 1, "b" => 2, "c" => 3}'],
10
- ['{ "first_name": "Dorian" }', '{"first_name" => "Dorian"}']
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["a = 1 a", "1"],
9
- ["a = 1 a += 1 a", "2"],
10
- ["a = 1 a -= 1 a", "0"],
11
- ["a = 1 a *= 2 a", "2"],
12
- ["a = 1 a /= 2 a", "0.5"],
13
- ["a = 10 a %= 2 a", "0"],
14
- ["a = 1 a >>= 1 a", "0"],
15
- ["a = 1 a <<= 1 a", "2"],
16
- ["a = 1 a |= 2 a", "3"],
17
- ["a = 1 a ^= 2 a", "3"],
18
- ["a = false a ||= true a", "true"],
19
- ["a = false a &&= true a", "false"]
20
- ].each do |input, output|
21
- context input do
22
- let(:input) { input }
23
- it { expect(subject).to eq(output) }
24
- end
25
- end
26
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "while" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 == 1", "true"], ["1 == 1 and 2 == 2", "true"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["even? = (i) => { i.even? } even?(2)", "true"],
9
- ["even? = (i:) => { i.even? } even?(i: 2)", "true"],
10
- ["add = (a, b) => { a + b } add(1, 2)", "3"],
11
- ["minus = (a:, b:) => { a - b } minus(b: 1, a: 2)", "1"]
12
- ].each do |input, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "greater" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["1 > 2", "false"],
9
- ["1 < 2", "true"],
10
- ["1 <= 1", "true"],
11
- ["1 >= 1", "true"]
12
- ].each do |input, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,12 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "group" do
4
- subject { Code.evaluate(input).to_s }
5
-
6
- [["(true false)", "false"]].each do |input, output|
7
- context input do
8
- let(:input) { input }
9
- it { expect(subject).to eq(output) }
10
- end
11
- end
12
- end
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "if modifier" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["1 if true", "1"],
9
- ["1 if false", ""],
10
- ["1 unless true", ""],
11
- ["1 unless false", "1"],
12
- ["a = 0 a += 1 while a < 10 a", "10"],
13
- ["a = 0 a += 1 until a > 10 a", "11"]
14
- ].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
data/spec/code/if_spec.rb DELETED
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "if" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["if true 1", "1"],
9
- ["unless false 1", "1"],
10
- ["if false 1", ""],
11
- ["unless true 1", ""],
12
- ["if false 1 else 2", "2"],
13
- ["if false 1 elsif true 2", "2"],
14
- ["if false 1 elsif false 2", ""],
15
- ["if false 1 else if true 2", "2"],
16
- ["if false 1 else if false 2", ""],
17
- ["if false 1 else unless false 2", "2"],
18
- ["if false 1 else unless true 2", ""]
19
- ].each do |input, output|
20
- context input do
21
- let(:input) { input }
22
- it { expect(subject).to eq(output) }
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "list" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["[]", "[]"],
9
- ["[1, 2, 3]", "[1, 2, 3]"],
10
- ["[1, 2, 3].include?(2)", "true"],
11
- ["[1, 2, 3].include?(4)", "false"],
12
- ["[[true]]", "[[true]]"]
13
- ].each do |input, output|
14
- context input do
15
- let(:input) { input }
16
- it { expect(subject).to eq(output) }
17
- end
18
- end
19
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "multiplication" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["2 * 3", "6"],
9
- ["2 * 3 + 2", "8"],
10
- ["2 / 4", "0.5"],
11
- ["4 % 3", "1"]
12
- ].each do |input, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[!false true],
9
- %w[!!true true],
10
- %w[!!1 true],
11
- %w[+1 1],
12
- %w[+1.0 1.0],
13
- %w[+true true]
14
- ].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "not keyword" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["not true", "false"], ["not not false", "false"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "nothing" do
4
- subject { Code.evaluate(input).to_s }
5
-
6
- [
7
- ["nothing", ""],
8
- ["null", ""],
9
- ["nil", ""],
10
- ["nothing null", ""]
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,22 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "number" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[0 0],
9
- %w[1.1 1.1],
10
- %w[0x10 16],
11
- %w[0o10 8],
12
- %w[0b10 2],
13
- %w[1e1 10],
14
- %w[1.0e1 10.0],
15
- %w[10e1.0 100.0]
16
- ].each do |input, output|
17
- context input do
18
- let(:input) { input }
19
- it { expect(subject).to eq(output) }
20
- end
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "or keyword" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["true or false", "true"],
9
- ["true and false", "false"],
10
- ["random = 1 random", "1"]
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "or operator" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["true || false", "true"],
9
- ["false || false", "false"]
10
- ].each do |input, output|
11
- context input do
12
- let(:input) { input }
13
- it { expect(subject).to eq(output) }
14
- end
15
- end
16
- end