nendo 0.6.8 → 0.7.0

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: 52fb34bae2c7e139b4c7c4e588691c4e8f50710c
4
- data.tar.gz: 91d2520addf241347ce2d8cac4ed0d7a0a800f88
3
+ metadata.gz: b9e43ea541a6bbdca2625d687abf0dae79d296a5
4
+ data.tar.gz: 01ae070b1e0f5feb02d5630967458b6f884f8a8f
5
5
  SHA512:
6
- metadata.gz: 7e2ebca8704036e2440a2527988044a523a194a9aa17cc79c2b40af5888af74f58f6e071a14a5c64bb83fbefd6642603459d4e5d523448a0773c786ea415f315
7
- data.tar.gz: 5ac568cdf1e22ffc86945bd2f5d76f9dd2828216622a5f4c6bf16c2950a8ffaefb83c676c0497dc0946d3b07e073e00e290355be8aa821246ab2a814d4afeba1
6
+ metadata.gz: 956fceccaefa4f7095a93e60940940bacfb7a131d02a952f4e6ac9ea0151e613abfc9e56a3dc0398e4e28263290241d71e2dc14b7d82d7f70183227a3a0c83e9
7
+ data.tar.gz: b5ae4669f881a267931485675063379a270b15731935bfa18847654fe59928240f5085393fbbf5ade76add5e2111cd522814acb6b93eb57055a21f798fa56c4f
data/Rakefile CHANGED
@@ -54,23 +54,19 @@ task :test => [:test1, :test2] do
54
54
  end
55
55
 
56
56
  task :test1 do
57
- sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec.rb "
58
- sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec_2.rb "
59
- sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec_3.rb "
60
- sh "ruby -I ./lib `which rspec` -b ./test/syntax_spec.rb "
61
- sh "ruby -I ./lib `which rspec` -b ./test/testframework_spec.rb "
62
- sh "ruby -I ./lib ./bin/nendo ./test/srfi-1-test.nnd"
57
+ sh "rspec -I ./lib -b "
58
+ sh "ruby -I ./lib ./bin/nendo ./spec/srfi-1-test.nnd"
63
59
  end
64
60
 
65
61
  task :test2 do
66
62
  sh "/bin/rm -f test.record"
67
63
  sh "echo "" > test.log"
68
- sh "ruby -I ./lib ./bin/nendo ./test/textlib-test.nnd >> test.log"
69
- sh "ruby -I ./lib ./bin/nendo ./test/nendo-util-test.nnd >> test.log"
70
- sh "ruby -I ./lib ./bin/nendo ./test/json-test.nnd >> test.log"
71
- sh "ruby -I ./lib ./bin/nendo ./test/srfi-2-test.nnd >> test.log"
72
- sh "ruby -I ./lib ./bin/nendo ./test/srfi-26-test.nnd >> test.log"
73
- sh "ruby -I ./lib ./bin/nendo ./test/util-list-test.nnd >> test.log"
64
+ sh "ruby -I ./lib ./bin/nendo ./spec/textlib-test.nnd >> test.log"
65
+ sh "ruby -I ./lib ./bin/nendo ./spec/nendo-util-test.nnd >> test.log"
66
+ sh "ruby -I ./lib ./bin/nendo ./spec/json-test.nnd >> test.log"
67
+ sh "ruby -I ./lib ./bin/nendo ./spec/srfi-2-test.nnd >> test.log"
68
+ sh "ruby -I ./lib ./bin/nendo ./spec/srfi-26-test.nnd >> test.log"
69
+ sh "ruby -I ./lib ./bin/nendo ./spec/util-list-test.nnd >> test.log"
74
70
  sh "cat test.record"
75
71
  sh "grep ' 0 failed, ' test.record > /dev/null"
76
72
  end
@@ -78,8 +74,8 @@ end
78
74
  task :test3 do
79
75
  sh "/bin/rm -f test.record"
80
76
  sh "echo "" > test3.log"
81
- sh "ruby -I ./lib ./bin/nendo ./test/match-test.nnd | tee -a test3.log"
82
- sh "ruby -I ./lib ./bin/nendo ./test/util-combinations-test.nnd | tee -a test3.log"
77
+ sh "ruby -I ./lib ./bin/nendo ./spec/match-test.nnd | tee -a test3.log"
78
+ sh "ruby -I ./lib ./bin/nendo ./spec/util-combinations-test.nnd | tee -a test3.log"
83
79
  sh "cat test.record"
84
80
  sh "grep ' 0 failed, ' test.record > /dev/null"
85
81
  end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 6
4
- :patch: 8
3
+ :minor: 7
4
+ :patch: 0
data/lib/nendo/init.nnd CHANGED
@@ -169,7 +169,7 @@
169
169
  (string-join str-lst "")))
170
170
 
171
171
  (define (string=? a b)
172
- (eq? a b))
172
+ (equal? a b))
173
173
 
174
174
  ;; ----------------------------------------
175
175
  ;; basic forms
data/lib/nendo/init.nndc CHANGED
@@ -2204,9 +2204,9 @@ trampCall(
2204
2204
  trampCall(
2205
2205
  Proc.new { |_a,_b|
2206
2206
  begin
2207
- delayCall( '_eq_QUMARK', 'eq?',
2207
+ delayCall( '_equal_QUMARK', 'equal?',
2208
2208
  begin
2209
- trampCall(@_eq_QUMARK)
2209
+ trampCall(@_equal_QUMARK)
2210
2210
  end ,
2211
2211
  [
2212
2212
  begin
@@ -58,7 +58,7 @@ module Nendo
58
58
  a = a.intern if a.class == ParsedSymbol
59
59
  b = b.intern if b.class == ParsedSymbol
60
60
  if a.is_a? String and b.is_a? String
61
- a === b
61
+ a == b
62
62
  elsif a.class != b.class
63
63
  false
64
64
  elsif a.is_a? Cell
@@ -68,7 +68,7 @@ module Nendo
68
68
  elsif a.is_a? Proc
69
69
  a == b
70
70
  else
71
- (a === b)
71
+ (a == b)
72
72
  end
73
73
  end
74
74
 
@@ -276,7 +276,7 @@ module Nendo
276
276
  (0..num-1).to_a.to_list
277
277
  end
278
278
  end
279
- def __EQMARK( a,b ) _eq_QUMARK( a, b ) end
279
+ def __EQMARK( a,b ) _equal_QUMARK( a, b ) end
280
280
  def __GTMARK( a,b ) a > b end
281
281
  def __GTMARK_EQMARK( a,b ) a >= b end
282
282
  def __LTMARK( a,b ) a < b end
@@ -284,7 +284,7 @@ module Nendo
284
284
  def _eq_QUMARK( a,b )
285
285
  a = a.intern if a.class == ParsedSymbol
286
286
  b = b.intern if b.class == ParsedSymbol
287
- a == b
287
+ a.equal?( b )
288
288
  end
289
289
  def _gt_QUMARK( a,b ) a > b end
290
290
  def _ge_QUMARK( a,b ) a >= b end
@@ -293,7 +293,7 @@ module Nendo
293
293
  def _eqv_QUMARK( a,b )
294
294
  a = a.intern if a.class == ParsedSymbol
295
295
  b = b.intern if b.class == ParsedSymbol
296
- a === b
296
+ a == b
297
297
  end
298
298
  def _car( cell ) cell.car end
299
299
  def _cdr( cell )
@@ -42,7 +42,7 @@ module Nendo
42
42
  end
43
43
 
44
44
  def self.version
45
- "0.6.8" ##NENDO-VERSION
45
+ "0.7.0" ##NENDO-VERSION
46
46
  end
47
47
 
48
48
  attr_reader :evaluator
@@ -197,7 +197,7 @@ module Nendo
197
197
 
198
198
  def ==(other)
199
199
  if other.is_a? LispKeyword
200
- self.key == other.key
200
+ self.key.intern == other.key.intern
201
201
  else
202
202
  false
203
203
  end
@@ -207,6 +207,10 @@ module Nendo
207
207
  self.==(other)
208
208
  end
209
209
 
210
+ def equal?(other)
211
+ self.==(other)
212
+ end
213
+
210
214
  def to_s
211
215
  self.key.to_s
212
216
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nendo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kiyoka Nishiyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-05-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Nendo is a programming language written in Ruby.
14
14
  email: kiyoka@sumibi.org
@@ -18,7 +18,7 @@ extensions: []
18
18
  extra_rdoc_files:
19
19
  - README.md
20
20
  files:
21
- - ".gemtest"
21
+ - .gemtest
22
22
  - COPYING
23
23
  - History.txt
24
24
  - README.md
@@ -82,44 +82,29 @@ files:
82
82
  - lib/nendo/util/list.nndc
83
83
  - lib/nendo/util/match.nnd
84
84
  - lib/nendo/util/match.nndc
85
- - test/json-test.nnd
86
- - test/match-test.nnd
87
- - test/nendo-util-test.nnd
88
- - test/nendo_spec.rb
89
- - test/nendo_spec_2.rb
90
- - test/nendo_spec_3.rb
91
- - test/rspec_formatter_for_emacs.rb
92
- - test/srfi-1-test.nnd
93
- - test/srfi-2-test.nnd
94
- - test/srfi-26-test.nnd
95
- - test/syntax_spec.rb
96
- - test/testframework_spec.rb
97
- - test/textlib-test.nnd
98
- - test/util-combinations-test.nnd
99
- - test/util-list-test.nnd
100
85
  homepage: http://github.com/kiyoka/nendo
101
86
  licenses:
102
87
  - New BSD
103
88
  metadata: {}
104
89
  post_install_message:
105
90
  rdoc_options:
106
- - "-x"
91
+ - -x
107
92
  - match.nndc
108
93
  require_paths:
109
94
  - lib
110
95
  required_ruby_version: !ruby/object:Gem::Requirement
111
96
  requirements:
112
- - - ">="
97
+ - - '>='
113
98
  - !ruby/object:Gem::Version
114
99
  version: '0'
115
100
  required_rubygems_version: !ruby/object:Gem::Requirement
116
101
  requirements:
117
- - - ">="
102
+ - - '>='
118
103
  - !ruby/object:Gem::Version
119
104
  version: '0'
120
105
  requirements: []
121
106
  rubyforge_project:
122
- rubygems_version: 2.2.0
107
+ rubygems_version: 2.0.14
123
108
  signing_key:
124
109
  specification_version: 4
125
110
  summary: Nendo is a dialect of Lisp.
data/test/json-test.nnd DELETED
@@ -1,178 +0,0 @@
1
- ;;-*- mode: nendo; syntax: scheme -*-
2
- ;;;
3
- ;;; json-test.nnd - test of json.nnd
4
- ;;;
5
- ;;; Copyright (c) 2011 Kiyoka Nishiyama <kiyoka@sumibi.org>
6
- ;;;
7
- ;;; Redistribution and use in source and binary forms, with or without
8
- ;;; modification, are permitted provided that the following conditions
9
- ;;; are met:
10
- ;;;
11
- ;;; 1. Redistributions of source code must retain the above copyright
12
- ;;; notice, this list of conditions and the following disclaimer.
13
- ;;;
14
- ;;; 2. Redistributions in binary form must reproduce the above copyright
15
- ;;; notice, this list of conditions and the following disclaimer in the
16
- ;;; documentation and/or other materials provided with the distribution.
17
- ;;;
18
- ;;; 3. Neither the name of the authors nor the names of its contributors
19
- ;;; may be used to endorse or promote products derived from this
20
- ;;; software without specific prior written permission.
21
- ;;;
22
- ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
- ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
- ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
- ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
- ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
- ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28
- ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29
- ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30
- ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31
- ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
- ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
- ;;;
34
- ;;; $Id:
35
- ;;;
36
- (use nendo.test)
37
- (use rfc.json)
38
-
39
- (test-start "json")
40
-
41
- ;;===================================================================
42
-
43
- ;;-------------------------------------------------------------------
44
- (test-section "json parser")
45
-
46
- (test* "string (1)"
47
- '#( "str" )
48
- (parse-json-string "[\"str\"]"))
49
-
50
- (test* "string (2)"
51
- '#( "Ã" )
52
- (parse-json-string "[\"Ã\"]"))
53
-
54
- (test* "string (3)"
55
- '#( "Ã" "€" )
56
- (parse-json-string "[ \"\\u00c3\", \"\\u20ac\" ]"))
57
-
58
- (test* "string (4)"
59
- '#(nil)
60
- (parse-json-string "[null]"))
61
-
62
- (test* "string (4)"
63
- '#(nil)
64
- (parse-json-string "[null]"))
65
-
66
- (test* "string (5)"
67
- '#(#t)
68
- (parse-json-string "[true]"))
69
-
70
- (test* "string (6)"
71
- '#(#f)
72
- (parse-json-string "[false]"))
73
-
74
-
75
- (test* "simple object (1)"
76
- '()
77
- (parse-json-string "{}"))
78
- (test* "simple object (2)"
79
- '()
80
- (parse-json-string " { } "))
81
- (test* "simple object (3)"
82
- '(("a" . 23))
83
- (parse-json-string "{ \"a\": 23 } "))
84
- (test* "simple object (4)"
85
- '(("a" . 23) ("b" . 45))
86
- (parse-json-string "{ \"a\": 23 , \"b\": 45 } "))
87
-
88
- (test* "arrays (1)"
89
- '#(1 2 3)
90
- (parse-json-string "[1,2,3]"))
91
- (test* "arrays (2)"
92
- '#(#() #(#() #()))
93
- (parse-json-string "[[],[[],[]]]"))
94
- (test* "arrays (3)"
95
- '#(#(4)
96
- #(#(5) #(6)))
97
- (parse-json-string "[[4],[[5],[6]]]"))
98
-
99
-
100
- (define testdata-json-string
101
- (string-join
102
- '("["
103
- " { \"a\": 1, "
104
- " \"b\": 2, "
105
- " \"c\": { \"c1\": 10,"
106
- " \"c2\": 20 },"
107
- " \"d\": [ \"vec1\", \"vec2\", \"vec3\" ]"
108
- " },"
109
- " { \"true\" : true , "
110
- " \"false\" : false , "
111
- " \"null\" : null "
112
- " }"
113
- "]")))
114
-
115
- (define testdata-lisp-object
116
- '#(
117
- (("a" . 1)
118
- ("b" . 2)
119
- ("c" . (
120
- ("c1" . 10)
121
- ("c2" . 20)))
122
- ("d" . #("vec1" "vec2" "vec3")))
123
- (("true" . true)
124
- ("false" . false)
125
- ("null" . nil))))
126
-
127
-
128
- (test* "array and hash (1)"
129
- (write-to-string testdata-lisp-object)
130
- (write-to-string (parse-json-string testdata-json-string)))
131
-
132
-
133
- (let1 sio (StringIO.new "{\"a\":23,\"b\":45}")
134
- (test* "write to IO"
135
- '(("a" . 23) ("b" . 45))
136
- (parse-json sio)))
137
-
138
-
139
-
140
- ;;-------------------------------------------------------------------
141
- (test-section "json constructor")
142
-
143
- (test* "string (1)"
144
- "[\"str\"]"
145
- (construct-json-string '#( "str" )))
146
-
147
- (test* "arrays (1)"
148
- "[1,2,3]"
149
- (construct-json-string '#(1 2 3)))
150
- (test* "arrays (2)"
151
- "[[],[[],[]]]"
152
- (construct-json-string '#(#() #(#() #()))))
153
-
154
- (test* "simple object (1)"
155
- "{}"
156
- (construct-json-string '()))
157
- (test* "simple object (2)"
158
- "{\"a\":23}"
159
- (construct-json-string '(("a" . 23))))
160
- (test* "simple object (3)"
161
- "{\"a\":23,\"b\":45}"
162
- (construct-json-string '(("a" . 23) ("b" . 45))))
163
-
164
- (test* "array and hash (1)"
165
- (testdata-json-string.gsub #/[ ]/ "")
166
- (construct-json-string testdata-lisp-object))
167
-
168
- (let1 sio (StringIO.new)
169
- (test* "write to IO"
170
- "{\"a\":23,\"b\":45}"
171
- (begin
172
- (construct-json '(("a" . 23) ("b" . 45)) sio)
173
- (sio.rewind)
174
- (sio.read))))
175
-
176
-
177
- ;;===================================================================
178
- (test-end)
data/test/match-test.nnd DELETED
@@ -1,186 +0,0 @@
1
- ;;-*- mode: nendo; syntax: scheme -*-;;
2
- ;;
3
- ;; match-test.nnd - test suite for util.match
4
- ;;
5
- ;; This file ported from chibi-scheme 0.3 by Alex Shinn.
6
- ;;
7
-
8
- (use nendo.test)
9
- (use util.match)
10
- ;;(use util.match-expanded)
11
-
12
- (test-start "match")
13
- (test-section "match")
14
-
15
- (define-syntax match-test*
16
- (syntax-rules ()
17
- ((_ title code result)
18
- (test* title result code))))
19
-
20
- (define-syntax pending*
21
- (syntax-rules ()
22
- ((_ title code result)
23
- (printf "(pending) [%s]\n" title))))
24
-
25
-
26
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27
- ;; run tests
28
- (match-test* "any" (match 'any (_ 'ok)) 'ok)
29
- (match-test* "symbol" (match 'ok (x x)) 'ok)
30
- (match-test* "number" (match 28 (28 'ok)) 'ok)
31
- (match-test* "string" (match "good" ("bad" 'fail) ("good" 'ok)) 'ok)
32
- (match-test* "literal symbol" (match 'good ('bad 'fail) ('good 'ok)) 'ok)
33
- (match-test* "null" (match '() (() 'ok)) 'ok)
34
- (match-test* "pair" (match '(ok) ((x) x)) 'ok)
35
- (match-test* "vector" (match '#(ok) (#(x) x)) 'ok)
36
- (match-test* "any doubled" (match '(1 2) ((_ _) 'ok)) 'ok)
37
- (match-test* "and empty" (match '(o k) ((and) 'ok)) 'ok)
38
- (match-test* "and single" (match 'ok ((and x) x)) 'ok)
39
- (match-test* "and double" (match 'ok ((and (? symbol?) y) 'ok)) 'ok)
40
- (match-test* "or empty" (match '(o k) ((or) 'fail) (else 'ok)) 'ok)
41
- (match-test* "or single" (match 'ok ((or x) 'ok)) 'ok)
42
- (match-test* "or double" (match 'ok ((or (? symbol? y) y) y)) 'ok)
43
- (match-test* "not" (match 28 ((not (a . b)) 'ok)) 'ok)
44
- (match-test* "pred" (match 28 ((? number?) 'ok)) 'ok)
45
- (match-test* "named pred" (match 28 ((? number? x) (+ x 1))) 29)
46
- (match-test* "duplicate symbols pass" (match '(ok . ok) ((x . x) x)) 'ok)
47
- (match-test* "duplicate symbols fail" (match '(ok . bad) ((x . x) 'bad) (else 'ok)) 'ok)
48
- (match-test* "duplicate symbols samth" (match '(ok . ok) ((x . 'bad) x) (('ok . x) x)) 'ok)
49
-
50
- (match-test* "ellipses"
51
- (match '((a . 1) (b . 2) (c . 3))
52
- (((x . y) ___) (list x y)))
53
- '((a b c) (1 2 3)))
54
-
55
- (match-test* "real ellipses"
56
- (match '((a . 1) (b . 2) (c . 3))
57
- (((x . y) ...) (list x y)))
58
- '((a b c) (1 2 3)))
59
-
60
- (match-test* "vector ellipses"
61
- (match '#(1 2 3 (a . 1) (b . 2) (c . 3))
62
- (#(a b c (hd . tl) ...) (list a b c hd tl)))
63
- '(1 2 3 (a b c) (1 2 3)))
64
-
65
- (match-test* "pred ellipses"
66
- (match '(1 2 3)
67
- (((? odd? n) ___) n)
68
- (((? number? n) ___) n))
69
- '(1 2 3))
70
-
71
- (match-test* "failure continuation"
72
- (match '(1 2)
73
- ((a . b) (=> next) (if (even? a) 'fail (next)))
74
- ((a . b) 'ok))
75
- 'ok)
76
-
77
- (match-test* "let"
78
- (match-let ((x 'ok) (y '(o k)))
79
- y)
80
- '(o k))
81
-
82
- (match-test* "let*"
83
- (match-let* ((x 'f) (y 'o) ((z w) (list y x)))
84
- (list x y z w))
85
- '(f o o f))
86
-
87
- (match-test* "getter car"
88
- (match '(1 . 2) (((get! a) . b) (list (a) b)))
89
- '(1 2))
90
-
91
- (match-test* "getter cdr"
92
- (match '(1 . 2) ((a . (get! b)) (list a (b))))
93
- '(1 2))
94
-
95
- (match-test* "getter vector"
96
- (match '#(1 2 3) (#((get! a) b c) (list (a) b c)))
97
- '(1 2 3))
98
-
99
- (match-test* "setter car"
100
- (let ((x (cons 1 2)))
101
- (match x (((set! a) . b) (a 3)))
102
- x)
103
- '(3 . 2))
104
-
105
- (match-test* "setter cdr"
106
- (let ((x (cons 1 2)))
107
- (match x ((a . (set! b)) (b 3)))
108
- x)
109
- '(1 . 3))
110
-
111
- (match-test* "setter vector"
112
- (let ((x (vector 1 2 3)))
113
- (match x (#(a (set! b) c) (b 0)))
114
- x)
115
- '#(1 0 3))
116
-
117
- (match-test* "single tail"
118
- (match '((a . 1) (b . 2) (c . 3))
119
- (((x . y) ... last) (list x y last)))
120
- '((a b) (1 2) (c . 3)))
121
-
122
- (match-test* "single tail 2"
123
- (match '((a . 1) (b . 2) 3)
124
- (((x . y) ... last) (list x y last)))
125
- '((a b) (1 2) 3))
126
-
127
- (match-test* "multiple tail"
128
- (match '((a . 1) (b . 2) (c . 3) (d . 4) (e . 5))
129
- (((x . y) ... u v w) (list x y u v w)))
130
- '((a b) (1 2) (c . 3) (d . 4) (e . 5)))
131
-
132
- (match-test* "Riastradh quasiquote"
133
- (match '(1 2 3) (`(1 ,b ,c) (list b c)))
134
- '(2 3))
135
-
136
- (match-test* "trivial tree search"
137
- (match '(1 2 3) ((_ *** (a b c)) (list a b c)))
138
- '(1 2 3))
139
-
140
- (match-test* "simple tree search"
141
- (match '(x (1 2 3)) ((_ *** (a b c)) (list a b c)))
142
- '(1 2 3))
143
-
144
- (match-test* "deep tree search"
145
- (match '(x (x (x (1 2 3)))) ((_ *** (a b c)) (list a b c)))
146
- '(1 2 3))
147
-
148
- (match-test* "non-tail tree search"
149
- (match '(x (x (x a b c (1 2 3) d e f))) ((_ *** (a b c)) (list a b c)))
150
- '(1 2 3))
151
-
152
- (match-test* "restricted tree search"
153
- (match '(x (x (x a b c (1 2 3) d e f))) (('x *** (a b c)) (list a b c)))
154
- '(1 2 3))
155
-
156
- (match-test* "fail restricted tree search"
157
- (match '(x (y (x a b c (1 2 3) d e f)))
158
- (('x *** (a b c)) (list a b c))
159
- (else #f))
160
- #f)
161
-
162
- ;; /home2/home/kiyoka/work/github/nendo/lib/nendo.rb:2317: stack level too deep (SystemStackError)
163
- (match-test* "sxml tree search"
164
- (match '(p (ul (li a (b c) (a (^ (href . "http://synthcode.com/")) "synthcode") d e f)))
165
- (((or 'p 'ul 'li 'b) *** ('a ('^ attrs ...) text ...))
166
- (list attrs text))
167
- (else #f))
168
- '(((href . "http://synthcode.com/")) ("synthcode")))
169
-
170
- ;; /home2/home/kiyoka/work/github/nendo/lib/nendo.rb:2317: stack level too deep (SystemStackError)
171
- (match-test* "failed sxml tree search"
172
- (match '(p (ol (li a (b c) (a (^ (href . "http://synthcode.com/")) "synthcode") d e f)))
173
- (((or 'p 'ul 'li 'b) *** ('a ('^ attrs ...) text ...))
174
- (list attrs text))
175
- (else #f))
176
- #f)
177
-
178
- ;; ./test/match-test.nnd:192: Error: undefined variable _tag (NameError)
179
- (match-test* "collect tree search"
180
- (match '(p (ul (li a (b c) (a (^ (href . "http://synthcode.com/")) "synthcode") d e f)))
181
- (((and tag (or 'p 'ul 'li 'b)) *** ('a ('^ attrs ...) text ...))
182
- (list tag attrs text))
183
- (else #f))
184
- '((p ul li) ((href . "http://synthcode.com/")) ("synthcode")))
185
-
186
- (test-end)