nydp 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4074a517649b09d3911d3b593e19ff0f0bc6d66
4
- data.tar.gz: cf2d6625885b45055f2e09601dc5914da308d5e2
3
+ metadata.gz: a7f1dacf6f22c7cd5db09de064fe3cdd11a76654
4
+ data.tar.gz: 530d35d6fc54b082edb788eec8ccb15078c09582
5
5
  SHA512:
6
- metadata.gz: 722eb57b1b40efaed06e432f3d70e00e18cda57ccef51b404f755b4b35dab3456a68a3542bb2185e68a22c5c1b2463c0320b5a223fa6901c1240ad542c07a0f3
7
- data.tar.gz: 4d5a6a702eb006751548d594515022f1c2e2f8b2697d45b95973db83abb2ad2d53d29d6495fbde9281f21c9ae98bf02e87b5b6c19e6ae9c053ad9152804f41d8
6
+ metadata.gz: 84db7216bd92545097e6b0dc3f827620c45b80261d3bbdfb18e7f0dfb70dca2b5d3078dfd07be3a0ef5fa107ad2363f9cc66e94a21b1a4b8b09a40c0cb87451a
7
+ data.tar.gz: 07c739e5165a3c857a43d8c2e04088562897dcede3283a9ae572620a09f24b6cf8836efcb84f8fcd0985a424c24db675c77acff178ed03a43692bd857877d82b
@@ -200,3 +200,19 @@
200
200
  ; for the old function
201
201
  (fn args2
202
202
  (apply func (joinlists args1 args2))))
203
+
204
+ (def tuples (n things)
205
+ ;; split things into a list of lists each n long
206
+ (rfnwith _ (list things)
207
+ (if (no list)
208
+ nil
209
+ (cons (firstn n list) (_ (nthcdr n list))))))
210
+
211
+ (def range (start stop)
212
+ ; return a list containing the range
213
+ ; of elements starting with 'start, up
214
+ ; to but not including 'stop
215
+ (if (< start stop)
216
+ (cons start
217
+ (range (+ start 1)
218
+ stop))))
@@ -11,6 +11,8 @@
11
11
  ("<" (inspect < ) "builtin/<" )
12
12
  ("eval" (inspect eval ) "builtin/eval" )
13
13
  ("hash" (inspect hash ) "builtin/hash" )
14
+ ("date" (inspect date ) "builtin/date" )
15
+ ("today" (inspect today ) "builtin/today" )
14
16
  ("error" (inspect error ) "builtin/error" )
15
17
  ("apply" (inspect apply ) "builtin/apply" )
16
18
  ("error" (inspect error ) "builtin/error" )
@@ -0,0 +1,8 @@
1
+ (examples-for range
2
+ ("produces a range of integers"
3
+ (range 10 20)
4
+ (10 11 12 13 14 15 16 17 18 19))
5
+
6
+ ("produces a range of dates"
7
+ (to-string:range (date 2015 11 20) (date 2015 11 25))
8
+ "(2015-11-20 2015-11-21 2015-11-22 2015-11-23 2015-11-24)"))
@@ -0,0 +1,16 @@
1
+ (examples-for tuples
2
+ ("returns nil for nil"
3
+ (tuples 3 nil)
4
+ nil)
5
+
6
+ ("returns single list for fewer than n items"
7
+ (tuples 4 '(a b) )
8
+ ((a b nil nil)))
9
+
10
+ ("returns exactly one list for exactly n items"
11
+ (tuples 5 '(a b c d e) )
12
+ ((a b c d e)))
13
+
14
+ ("returns the given list split into sublist each having n items"
15
+ (tuples 3 '(a b c d e f g) )
16
+ ((a b c) (d e f) (g nil nil))))
@@ -2,7 +2,14 @@ class Nydp::Builtin::Plus
2
2
  include Nydp::Builtin::Base
3
3
 
4
4
  def builtin_invoke vm, args
5
- vm.push_arg sum(args, origin(args.car))
5
+ vm.push_arg case args.car
6
+ when Fixnum, Nydp::Date
7
+ sum(args.cdr, args.car)
8
+ when Nydp::Pair
9
+ sum(args, Nydp.NIL)
10
+ when String, Nydp::StringAtom
11
+ sum(args, Nydp::StringAtom.new(""))
12
+ end
6
13
  end
7
14
 
8
15
  def sum args, accum
@@ -13,16 +20,5 @@ class Nydp::Builtin::Plus
13
20
  end
14
21
  end
15
22
 
16
- def origin obj
17
- case obj
18
- when Fixnum
19
- 0
20
- when Nydp::Pair
21
- Nydp.NIL
22
- when String, Nydp::StringAtom
23
- Nydp::StringAtom.new ""
24
- end
25
- end
26
-
27
23
  def name ; "+" ; end
28
24
  end
@@ -5,3 +5,14 @@ class Nydp::Builtin::Today
5
5
  vm.push_arg(Nydp::Date.new Date.today)
6
6
  end
7
7
  end
8
+
9
+ class Nydp::Builtin::Date
10
+ include Nydp::Helper, Nydp::Builtin::Base
11
+
12
+ def builtin_invoke vm, args
13
+ y = args.car
14
+ m = args.cdr.car
15
+ d = args.cdr.cdr.car
16
+ vm.push_arg(Nydp::Date.new Date.new(y,m,d))
17
+ end
18
+ end
@@ -34,6 +34,7 @@ module Nydp
34
34
  Symbol.mk(:false, ns).assign(false)
35
35
  Symbol.mk(:hash, ns).assign(Nydp::Builtin::Hash.new)
36
36
  Symbol.mk(:apply, ns).assign(Nydp::Builtin::Apply.new)
37
+ Symbol.mk(:date, ns).assign(Nydp::Builtin::Date.new)
37
38
  Symbol.mk(:error, ns).assign(Nydp::Builtin::Error.new)
38
39
  Symbol.mk(:parse, ns).assign(Nydp::Builtin::Parse.new(ns))
39
40
  Symbol.mk(:p, ns).assign(Nydp::Builtin::Puts.new)
@@ -55,6 +56,7 @@ module Nydp
55
56
  Symbol.mk("string-replace" , ns).assign(Nydp::Builtin::StringReplace.new)
56
57
  Symbol.mk("string-match" , ns).assign(Nydp::Builtin::StringMatch.new(ns))
57
58
  Symbol.mk("string-split" , ns).assign(Nydp::Builtin::StringSplit.new )
59
+ Symbol.mk("today" , ns).assign(Nydp::Builtin::Today.new)
58
60
  Symbol.mk("thread-locals" , ns).assign(Nydp::Builtin::ThreadLocals.new)
59
61
  Symbol.mk("type-of", ns).assign(Nydp::Builtin::TypeOf.new(ns))
60
62
  Symbol.mk(:"eq?", ns).assign(Nydp::Builtin::IsEqual.new)
@@ -20,6 +20,10 @@ module Nydp
20
20
  def to_ruby ; ruby_date ; end
21
21
  def inspect ; ruby_date.inspect ; end
22
22
  def nydp_type ; :date ; end
23
+ def - other ; r2n(ruby_date - other.ruby_date, nil) ; end
24
+ def + int ; r2n(ruby_date + int , nil) ; end
25
+ def > other ; ruby_date > other.ruby_date ; end
26
+ def < other ; ruby_date < other.ruby_date ; end
23
27
 
24
28
  @@keys = Set.new %i{
25
29
  year month week_day day
@@ -1,3 +1,3 @@
1
1
  module Nydp
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Nydp::Date do
4
4
 
5
- let(:ns) { { } }
5
+ let(:ns) { { } }
6
+ let(:vm) { Nydp::VM.new }
6
7
 
7
8
  it "converts ruby Date to Nydp::Date" do
8
9
  rd = Date.parse "2015-06-08"
@@ -14,6 +15,14 @@ describe Nydp::Date do
14
15
  expect(nd.to_ruby).to eq Date.parse("2015-06-08")
15
16
  end
16
17
 
18
+ it "creates a new date" do
19
+ df = Nydp::Builtin::Date.new
20
+ df.invoke vm, pair_list([2015, 11, 18])
21
+ nd = vm.pop_arg
22
+ expect(nd).to be_a Nydp::Date
23
+ expect(nd.ruby_date).to eq Date.parse("2015-11-18")
24
+ end
25
+
17
26
  it "returns date components" do
18
27
  rd = Date.parse "2015-06-08"
19
28
  nd = Nydp.r2n rd, ns
@@ -23,6 +32,64 @@ describe Nydp::Date do
23
32
  expect(nd[:day]). to eq 8
24
33
  end
25
34
 
35
+ describe "date maths" do
36
+ let(:d0) { Nydp.r2n Date.today, ns }
37
+ let(:d1) { Nydp.r2n (Date.today + 6), ns }
38
+
39
+ it "works with builtin minus" do
40
+ minus = Nydp::Builtin::Minus.new
41
+
42
+ minus.invoke vm, pair_list([d1, d0])
43
+ diff = vm.pop_arg
44
+
45
+ expect(d0).to be_a Nydp::Date
46
+ expect(diff).to eq 6
47
+ end
48
+
49
+ it "works with builtin greater-than when true" do
50
+ f = Nydp::Builtin::GreaterThan.new
51
+
52
+ f.invoke vm, pair_list([d1, d0])
53
+
54
+ expect(vm.pop_arg).to eq Nydp.T
55
+ end
56
+
57
+ it "works with builtin greater-than when false" do
58
+ f = Nydp::Builtin::GreaterThan.new
59
+
60
+ f.invoke vm, pair_list([d0, d1])
61
+
62
+ expect(vm.pop_arg).to eq Nydp.NIL
63
+ end
64
+
65
+ it "works with builtin less-than when true" do
66
+ f = Nydp::Builtin::LessThan.new
67
+
68
+ f.invoke vm, pair_list([d0, d1])
69
+
70
+ expect(vm.pop_arg).to eq Nydp.T
71
+ end
72
+
73
+ it "works with builtin less-than when false" do
74
+ f = Nydp::Builtin::LessThan.new
75
+
76
+ f.invoke vm, pair_list([d1, d0])
77
+
78
+ expect(vm.pop_arg).to eq Nydp.NIL
79
+ end
80
+
81
+ it "works with builtin plus" do
82
+ plus = Nydp::Builtin::Plus.new
83
+
84
+ plus.invoke vm, pair_list([d0, 5])
85
+ sum = vm.pop_arg
86
+
87
+ expect(d0) .to be_a Nydp::Date
88
+ expect(sum).to be_a Nydp::Date
89
+ expect(sum.ruby_date).to eq(Date.today + 5)
90
+ end
91
+ end
92
+
26
93
  it "returns relative dates by year" do
27
94
  rd = Date.parse "2015-06-08"
28
95
  nd = Nydp.r2n rd, ns
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.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Conan Dalton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-28 00:00:00.000000000 Z
11
+ date: 2015-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,9 +117,11 @@ files:
117
117
  - lib/lisp/tests/parser-tests.nydp
118
118
  - lib/lisp/tests/pretty-print-tests.nydp
119
119
  - lib/lisp/tests/quasiquote-examples.nydp
120
+ - lib/lisp/tests/range-examples.nydp
120
121
  - lib/lisp/tests/rfnwith-tests.nydp
121
122
  - lib/lisp/tests/string-tests.nydp
122
123
  - lib/lisp/tests/syntax-tests.nydp
124
+ - lib/lisp/tests/tuples-examples.nydp
123
125
  - lib/lisp/tests/type-of-examples.nydp
124
126
  - lib/lisp/tests/unparse-tests.nydp
125
127
  - lib/nydp.rb