nydp 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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