nydp 0.0.2 → 0.0.3

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.
@@ -1,33 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Nydp do
4
- let(:root_ns) { { } }
5
- let(:parser) { Nydp::Parser.new(root_ns) }
4
+ let(:parser) { Nydp::Parser.new(ns) }
6
5
  let(:vm) { Nydp::VM.new }
7
6
 
8
- def sym name
9
- Nydp::Symbol.mk name.to_sym, root_ns
10
- end
11
-
12
- def parse txt
13
- tokens = Nydp::Tokeniser.new txt
14
- expressions = []
15
- expr = parser.expression(tokens)
16
- while (expr != nil)
17
- expressions << expr
18
- expr = parser.expression(tokens)
19
- end
20
- expressions
21
- end
22
-
23
7
  def run txt
24
- Nydp.setup root_ns
25
- expressions = parse(txt)
26
- result = nil
27
- expressions.each do |expr|
28
- result = Nydp.compile_and_eval vm, expr
29
- end
30
- result
8
+ Nydp.setup ns
9
+ Nydp::StreamRunner.new(vm, ns, txt).run
31
10
  end
32
11
 
33
12
  it "should make a symbol from a string" do
@@ -101,9 +80,9 @@ describe Nydp do
101
80
  end
102
81
 
103
82
  it "should recurse without consuming extra memory" do
104
- program = "(assign f1 (fn (x acc) (cond (< x 1) (vm-info) (f1 (- x 1) (+ x acc))))) (f1 1000)"
83
+ program = "(assign f1 (fn (x acc) (cond (< x 1) (vm-info) (f1 (- x 1) (+ x acc))))) (f1 1000 0)"
105
84
  expected = parse "((contexts . 0) (instructions . 0) (args . 0))"
106
- expect(run program).to eq expected.first
85
+ expect(run program).to eq expected
107
86
  end
108
87
 
109
88
  describe :cond do
@@ -1,7 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Nydp::Pair do
4
- let(:ns) { { } }
5
4
  let(:a) { Nydp::Symbol.mk :a, ns }
6
5
  let(:b) { Nydp::Symbol.mk :b, ns }
7
6
  let(:c) { Nydp::Symbol.mk :c, ns }
@@ -23,26 +22,26 @@ describe Nydp::Pair do
23
22
  end
24
23
 
25
24
  it "should define #== to return true for an identical list" do
26
- p1 = Nydp::Pair.from_list [:a, :b, :c, :d]
27
- p2 = Nydp::Pair.from_list [:a, :b, :c, :d]
25
+ p1 = pair_list [:a, :b, :c, :d]
26
+ p2 = pair_list [:a, :b, :c, :d]
28
27
  expect(p1).to eq p2
29
28
  end
30
29
 
31
30
  it "should define #== to return true for identical improper lists" do
32
- p1 = Nydp::Pair.from_list [:a, :b, :c, :d], 4
33
- p2 = Nydp::Pair.from_list [:a, :b, :c, :d], 4
31
+ p1 = pair_list [:a, :b, :c, :d], 4
32
+ p2 = pair_list [:a, :b, :c, :d], 4
34
33
  expect(p1).to eq p2
35
34
  end
36
35
 
37
36
  it "should define #== to return false for a non-identical list" do
38
- p1 = Nydp::Pair.from_list [:a, :b, :c, :d]
39
- p2 = Nydp::Pair.from_list [:a, :b, :c, 22]
37
+ p1 = pair_list [:a, :b, :c, :d]
38
+ p2 = pair_list [:a, :b, :c, 22]
40
39
  expect(p1).not_to eq p2
41
40
  end
42
41
 
43
42
  it "should define #== to return false for lists which differ only in their terminating element" do
44
- p1 = Nydp::Pair.from_list [:a, :b, :c], :d
45
- p2 = Nydp::Pair.from_list [:a, :b, :c], 22
43
+ p1 = pair_list [:a, :b, :c], :d
44
+ p2 = pair_list [:a, :b, :c], 22
46
45
  expect(p1).not_to eq p2
47
46
  end
48
47
  end
@@ -54,7 +53,7 @@ describe Nydp::Pair do
54
53
  end
55
54
 
56
55
  it "should convert a ruby list" do
57
- p = Nydp::Pair.from_list [:a, :b, :c, :d]
56
+ p = pair_list [:a, :b, :c, :d]
58
57
  expect(p.car).to eq :a
59
58
  p = p.cdr
60
59
  expect(p.car).to eq :b
@@ -71,32 +70,32 @@ describe Nydp::Pair do
71
70
  end
72
71
 
73
72
  it "should have size zero when empty" do
74
- expect(Nydp::Pair.from_list([]).size).to eq 0
73
+ expect(pair_list([]).size).to eq 0
75
74
  end
76
75
 
77
76
  it "should report the number of elements is contains" do
78
- expect(Nydp::Pair.from_list([:a, :b, :c]).size).to eq 3
77
+ expect(pair_list([:a, :b, :c]).size).to eq 3
79
78
  end
80
79
 
81
80
  it "should report the number of elements in an improper list, excluding last item" do
82
- expect(Nydp::Pair.from_list([:a, :b, :c, :d], :foo).size).to eq 4
81
+ expect(pair_list([:a, :b, :c, :d], :foo).size).to eq 4
83
82
  end
84
83
 
85
84
  it "should represent itself as a string" do
86
- expect(Nydp::Pair.from_list([a, b, c, d]).to_s).to eq "(a b c d)"
85
+ expect(pair_list([a, b, c, d]).to_s).to eq "(a b c d)"
87
86
  end
88
87
 
89
88
  it "should represent an improper list as a string" do
90
- expect(Nydp::Pair.from_list([a, b, c, d], foo).to_s).to eq "(a b c d . foo)"
89
+ expect(pair_list([a, b, c, d], foo).to_s).to eq "(a b c d . foo)"
91
90
  end
92
91
 
93
92
  it "should parse a list" do
94
- p = Nydp::Pair.from_list [a, b, c, d]
93
+ p = pair_list [a, b, c, d]
95
94
  expect(Nydp::Pair.parse_list([a, b, c, d])).to eq p
96
95
  end
97
96
 
98
97
  it "should parse a list" do
99
- p = Nydp::Pair.from_list [a, b, c, d], foo
98
+ p = pair_list [a, b, c, d], foo
100
99
  expect(Nydp::Pair.parse_list([a, b, c, d, dot, foo])).to eq p
101
100
  end
102
101
  end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Nydp::Parser do
4
-
5
- let(:ns) { { } }
6
4
  let(:aa) { Nydp::Symbol.mk :aa, ns }
7
5
  let(:a) { Nydp::Symbol.mk :a, ns }
8
6
  let(:b) { Nydp::Symbol.mk :b, ns }
@@ -21,18 +19,6 @@ describe Nydp::Parser do
21
19
  let(:cocosyn) { Nydp::Symbol.mk :"colon-colon-syntax", ns }
22
20
  let(:colosyn) { Nydp::Symbol.mk :"colon-syntax", ns }
23
21
 
24
- def sym name
25
- Nydp::Symbol.mk name.to_sym, ns
26
- end
27
-
28
- def parse txt
29
- Nydp::Parser.new(ns).expression(Nydp::Tokeniser.new txt)
30
- end
31
-
32
- def pair_list xs, last=Nydp.NIL
33
- Nydp::Pair.from_list xs, last
34
- end
35
-
36
22
  it "should return a stream of tokens" do
37
23
  t = Nydp::Tokeniser.new ""
38
24
  expect(t.next_token).to eq nil
@@ -120,6 +106,16 @@ describe Nydp::Parser do
120
106
  expect(parse '(1 "hello there \"jimmy\"" 3)').to eq expected
121
107
  end
122
108
 
109
+ it "should handle escaped tabs and newlines inside a string" do
110
+ expected = Nydp::StringAtom.new "hello\tworld\nnice day"
111
+ parsed = parse "\"hello\\tworld\\nnice day\""
112
+ expect(parsed).to eq expected
113
+ end
114
+
115
+ it "should parse a brace list" do
116
+ expect(parse "{a b c d}").to eq pair_list [sym("brace-list"), a, b, c, d]
117
+ end
118
+
123
119
  it "should parse a plain symbol" do
124
120
  expect(parse "foo").to eq foo
125
121
  end
@@ -128,6 +124,10 @@ describe Nydp::Parser do
128
124
  expect(parse "foo.bar").to eq pair_list([dotsyn, foo, bar])
129
125
  end
130
126
 
127
+ it "should parse a dotted symbol" do
128
+ expect(parse "(list a b foo.bar c)").to eq pair_list([sym(:list), a, b, pair_list([dotsyn, foo, bar]), c])
129
+ end
130
+
131
131
  it "should parse a colon-colon symbol" do
132
132
  expect(parse "foo::bar").to eq pair_list([cocosyn, foo, bar])
133
133
  end
@@ -1,10 +1,29 @@
1
1
  require 'nydp'
2
2
  require 'nydp/symbol'
3
3
 
4
+ module SpecHelper
5
+ def sym name
6
+ Nydp::Symbol.mk name.to_sym, ns
7
+ end
8
+
9
+ def parse txt
10
+ Nydp::Parser.new(ns).expression(Nydp::Tokeniser.new txt)
11
+ end
12
+
13
+ def pair_list xs, last=Nydp.NIL
14
+ Nydp::Pair.from_list xs, last
15
+ end
16
+
17
+ def self.included base
18
+ base.let(:ns) { { } }
19
+ end
20
+ end
21
+
4
22
  RSpec.configure do |config|
5
23
  config.treat_symbols_as_metadata_keys_with_true_values = true
6
24
  config.run_all_when_everything_filtered = true
7
25
  config.filter_run :focus
8
26
  config.order = 'random'
9
27
  config.include Nydp::Helper
28
+ config.include SpecHelper
10
29
  end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe Nydp::StringFragmentToken do
4
+ it "is equal to another token with the same content" do
5
+ t1 = Nydp::StringFragmentToken.new "foo", "bar"
6
+ t2 = Nydp::StringFragmentToken.new "foo", "zub"
7
+ expect(t1).to eq t2
8
+ end
9
+
10
+ it "is not equal to another string with the same content" do
11
+ t1 = Nydp::StringFragmentToken.new "foo", "bar"
12
+ expect(t1).not_to eq "foo"
13
+ end
14
+
15
+ it "is not equal to nil" do
16
+ t1 = Nydp::StringFragmentToken.new "foo", "bar"
17
+ expect(t1).not_to eq Nydp.NIL
18
+ end
19
+ end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Nydp::Symbol do
4
- let(:ns) { { } }
5
-
6
4
  it "should not recognise an unknown symbol" do
7
5
  sym = Nydp::Symbol.find :foo, ns
8
6
  expect(sym).to eq nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nydp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Conan Dalton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-01 00:00:00.000000000 Z
11
+ date: 2015-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,14 +110,18 @@ files:
110
110
  - lib/nydp/builtin/puts.rb
111
111
  - lib/nydp/builtin/quit.rb
112
112
  - lib/nydp/builtin/random_string.rb
113
+ - lib/nydp/builtin/string_replace.rb
114
+ - lib/nydp/builtin/string_split.rb
113
115
  - lib/nydp/builtin/times.rb
114
116
  - lib/nydp/builtin/to_string.rb
115
117
  - lib/nydp/builtin/to_sym.rb
118
+ - lib/nydp/builtin/type_of.rb
116
119
  - lib/nydp/builtin/vm_info.rb
117
120
  - lib/nydp/closure.rb
118
121
  - lib/nydp/compiler.rb
119
122
  - lib/nydp/cond.rb
120
123
  - lib/nydp/context_symbol.rb
124
+ - lib/nydp/core.rb
121
125
  - lib/nydp/error.rb
122
126
  - lib/nydp/function_invocation.rb
123
127
  - lib/nydp/helper.rb
@@ -126,6 +130,7 @@ files:
126
130
  - lib/nydp/literal.rb
127
131
  - lib/nydp/pair.rb
128
132
  - lib/nydp/parser.rb
133
+ - lib/nydp/runner.rb
129
134
  - lib/nydp/string_atom.rb
130
135
  - lib/nydp/string_token.rb
131
136
  - lib/nydp/symbol.rb
@@ -142,6 +147,7 @@ files:
142
147
  - spec/pair_spec.rb
143
148
  - spec/parser_spec.rb
144
149
  - spec/spec_helper.rb
150
+ - spec/string_token_spec.rb
145
151
  - spec/symbol_spec.rb
146
152
  homepage: http://github.com/conanite/nydp
147
153
  licenses:
@@ -174,4 +180,5 @@ test_files:
174
180
  - spec/pair_spec.rb
175
181
  - spec/parser_spec.rb
176
182
  - spec/spec_helper.rb
183
+ - spec/string_token_spec.rb
177
184
  - spec/symbol_spec.rb