cursor 0.6 → 0.8
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.
- data/cursor.rb +626 -1143
- data/cursor/buffered.rb +89 -0
- data/cursor/circular.rb +245 -0
- data/cursor/circular/indexed.rb +51 -0
- data/cursor/circular/linked.rb +98 -0
- data/cursor/circular/position.rb +105 -0
- data/cursor/circular/shifting.rb +48 -0
- data/cursor/circular/split.rb +106 -0
- data/cursor/indexed.rb +52 -0
- data/cursor/io.rb +342 -0
- data/cursor/lined.rb +49 -0
- data/cursor/linked.rb +62 -0
- data/cursor/position.rb +145 -0
- data/cursor/reversed.rb +122 -0
- data/cursor/shifting.rb +40 -0
- data/cursor/split.rb +45 -0
- data/cursor/test.rb +519 -0
- data/cursor/test_circulars.rb +87 -0
- data/cursor/test_cursors.rb +112 -0
- data/cursor/usedeleteinsert.rb +150 -0
- data/cursor/usenext.rb +145 -0
- data/cursor/usenext/position.rb +71 -0
- data/cursor/useposition.rb +42 -0
- data/cursor/usereadwrite.rb +126 -0
- data/duck.rb +31 -0
- data/regexp_cursor.rb +50 -0
- data/weakrefset.rb +130 -0
- metadata +35 -7
data/cursor/test.rb
ADDED
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
|
|
2
|
+
# $Id: test.rb,v 1.22 2005/07/21 15:15:38 eric_mahurin Exp $
|
|
3
|
+
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
require 'cursor'
|
|
6
|
+
require 'cursor/usedeleteinsert'
|
|
7
|
+
|
|
8
|
+
# :stopdoc:
|
|
9
|
+
|
|
10
|
+
module Test
|
|
11
|
+
module Unit
|
|
12
|
+
class TestSuite
|
|
13
|
+
def run(result, &progress_block)
|
|
14
|
+
yield(STARTED, name)
|
|
15
|
+
if @tests.size>0 and @tests[0].class.respond_to?:random
|
|
16
|
+
catch(:stop_suite) {
|
|
17
|
+
(@tests[0].class.random*@tests.size).to_i.times do
|
|
18
|
+
test = @tests[rand(@tests.size)]
|
|
19
|
+
catch(:invalid_test) {
|
|
20
|
+
test.run(result, &progress_block)
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
}
|
|
24
|
+
else
|
|
25
|
+
@tests.each do |test|
|
|
26
|
+
test.run(result, &progress_block)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
yield(FINISHED, name)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
ArgArray = Class.new(Array)
|
|
36
|
+
|
|
37
|
+
class Cursor
|
|
38
|
+
class Test < ::Test::Unit::TestCase
|
|
39
|
+
def self.suite(random_iterations=8,random_seed=0,klass='',methods='',flags=0)
|
|
40
|
+
return(::Test::Unit::TestSuite.new()) if !self.respond_to?:seed
|
|
41
|
+
if !(@@output_level||=nil)
|
|
42
|
+
@@output_level = ::Test::Unit::UI::SILENT
|
|
43
|
+
ObjectSpace.each_object(::Test::Unit::AutoRunner) { |runner|
|
|
44
|
+
@@output_level = runner.instance_eval { @output_level }
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
if !(@@random_iterations||=nil)
|
|
48
|
+
@@random_iterations = random_iterations.to_f
|
|
49
|
+
end
|
|
50
|
+
if !(@@random_seed||=nil)
|
|
51
|
+
@@random_seed = random_seed.to_i.nonzero? || (srand;srand)
|
|
52
|
+
puts("random_seed: #{@@random_seed}") if @@output_level>=::Test::Unit::UI::NORMAL
|
|
53
|
+
srand(@@random_seed)
|
|
54
|
+
end
|
|
55
|
+
@klass = Regexp.new(klass)
|
|
56
|
+
methods = Regexp.new(methods)
|
|
57
|
+
@reject ||= nil
|
|
58
|
+
public_instance_methods(true).each { |m|
|
|
59
|
+
if matchdata = /^test_\d*(.*)/.match(m.to_s)
|
|
60
|
+
undef_method(m) if @reject&&@reject=~matchdata[1] ||
|
|
61
|
+
!(methods=~matchdata[1])
|
|
62
|
+
end
|
|
63
|
+
}
|
|
64
|
+
@flags = flags
|
|
65
|
+
@use_positions = @flags[0].zero?
|
|
66
|
+
@use_branches = true
|
|
67
|
+
@allow_pruning = false
|
|
68
|
+
self.plant
|
|
69
|
+
super()
|
|
70
|
+
end
|
|
71
|
+
def self.plant
|
|
72
|
+
before = sequence(0,1.5)
|
|
73
|
+
after = sequence(0,1.5,before.class.new)
|
|
74
|
+
cursors = seed(before,after)
|
|
75
|
+
if @klass
|
|
76
|
+
cursors.reject! { |cursor| !(@klass===cursor.class.to_s) }
|
|
77
|
+
end
|
|
78
|
+
return(self.plant) if cursors.empty?
|
|
79
|
+
if @@output_level>=::Test::Unit::UI::NORMAL
|
|
80
|
+
puts("\nnew(#{before.inspect}+#{after.inspect}) -> self")
|
|
81
|
+
end
|
|
82
|
+
@cursors_root = {
|
|
83
|
+
:trunk => cursors,
|
|
84
|
+
:positions => [],
|
|
85
|
+
:branches => [],
|
|
86
|
+
}
|
|
87
|
+
end
|
|
88
|
+
def self.element(offset=0,weight=1)
|
|
89
|
+
elements[rand((weight*(elements.size+offset)).to_i)]
|
|
90
|
+
end
|
|
91
|
+
def self.sequence(offset=0,weight=2,value=empty)
|
|
92
|
+
while v = element(offset,weight)
|
|
93
|
+
value << v
|
|
94
|
+
end
|
|
95
|
+
value
|
|
96
|
+
end
|
|
97
|
+
def self.random
|
|
98
|
+
@@random_iterations
|
|
99
|
+
end
|
|
100
|
+
def self.reject(name,*args,&block)
|
|
101
|
+
false
|
|
102
|
+
end
|
|
103
|
+
def setup
|
|
104
|
+
cursors_tree = self.class.instance_eval{@cursors_root}
|
|
105
|
+
level = 0
|
|
106
|
+
@prune = proc{}
|
|
107
|
+
while (branches = cursors_tree[:branches]).size.nonzero? and
|
|
108
|
+
self.class.instance_eval{@use_branches}&&rand(3).zero?
|
|
109
|
+
i = rand(branches.size)
|
|
110
|
+
|
|
111
|
+
if _closed?(branches[i][:trunk])
|
|
112
|
+
branches.slice!(i)
|
|
113
|
+
break
|
|
114
|
+
else
|
|
115
|
+
@prune = proc { branches.slice!(i) }
|
|
116
|
+
cursors_tree = branches[i]
|
|
117
|
+
level += 1
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
if (positions = cursors_tree[:positions]).size.nonzero? and
|
|
121
|
+
self.class.instance_eval{@use_positions}&&rand(3).zero?
|
|
122
|
+
i = rand(positions.size)
|
|
123
|
+
if _closed?(positions[i])
|
|
124
|
+
positions.slice!(i)
|
|
125
|
+
else
|
|
126
|
+
@prune = proc { positions.slice!(i) }
|
|
127
|
+
cursors_tree = {
|
|
128
|
+
:trunk => positions[i],
|
|
129
|
+
:positions => cursors_tree[:positions],
|
|
130
|
+
:branches => cursors_tree[:branches],
|
|
131
|
+
}
|
|
132
|
+
level += 1
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
@cursors_tree = cursors_tree
|
|
136
|
+
@cursors = cursors_tree[:trunk]
|
|
137
|
+
@positions = cursors_tree[:positions]
|
|
138
|
+
@branches = cursors_tree[:branches]
|
|
139
|
+
@level = level
|
|
140
|
+
@state = ""
|
|
141
|
+
@exec = nil
|
|
142
|
+
end
|
|
143
|
+
def teardown
|
|
144
|
+
if not passed?
|
|
145
|
+
if @@output_level>=::Test::Unit::UI::PROGRESS_ONLY
|
|
146
|
+
puts("\n#{self.class}")
|
|
147
|
+
puts("random_seed: #{@@random_seed}")
|
|
148
|
+
puts(@call)
|
|
149
|
+
end
|
|
150
|
+
throw(:stop_suite)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
private
|
|
155
|
+
def _closed?(cursors)
|
|
156
|
+
ret0 = nil
|
|
157
|
+
cursors.each_with_index { |cursor,i|
|
|
158
|
+
i==0 ? ret0 = cursor.closed? : assert_equal(ret0,cursor.closed?)
|
|
159
|
+
}
|
|
160
|
+
ret0
|
|
161
|
+
end
|
|
162
|
+
def _inspect_short(obj,_self=nil)
|
|
163
|
+
if _self and _self.equal?(obj)
|
|
164
|
+
"self"
|
|
165
|
+
else
|
|
166
|
+
obj.inspect.sub(/\A\#\<([\w\:]+?\:0x[\da-f]+).*\>\Z/,'#<\\1>')
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
def _inspect_self(obj,_self=nil)
|
|
170
|
+
if _self and _self.equal?(obj)
|
|
171
|
+
"self"
|
|
172
|
+
else
|
|
173
|
+
obj.inspect
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
def _inspect_merge(objects,selves=nil)
|
|
177
|
+
_inspect_short(objects[0],selves&&selves[0])
|
|
178
|
+
end
|
|
179
|
+
def _multi_test(name,*args0,&assertion)
|
|
180
|
+
block = args0.pop
|
|
181
|
+
throw(:invalid_test) if self.class.reject(name,*args0,&block)
|
|
182
|
+
cursors = @cursors
|
|
183
|
+
call = @level.zero? ? "self." : "#{_inspect_merge(@cursors)}."
|
|
184
|
+
call += "{" if @exec
|
|
185
|
+
call += name.to_s
|
|
186
|
+
args = args0.collect { |arg|
|
|
187
|
+
ArgArray===arg ? _inspect_merge(arg) : _inspect_short(arg)
|
|
188
|
+
}
|
|
189
|
+
call += "(#{args.join(',')})" if not args.empty?
|
|
190
|
+
call += " {#{block.inspect.sub(/\A\#<Proc\:0x[\da-f]+\@(.*?)\>\Z/,'\\1')}}" if block
|
|
191
|
+
call += "}" if @exec
|
|
192
|
+
@call = call
|
|
193
|
+
print("\n#{call} ") if @@output_level==::Test::Unit::UI::NORMAL
|
|
194
|
+
state = @state
|
|
195
|
+
ret = ArgArray.new
|
|
196
|
+
puts if @@output_level>=::Test::Unit::UI::VERBOSE
|
|
197
|
+
@cursors.each_with_index do |cursor,i|
|
|
198
|
+
@state = state.clone
|
|
199
|
+
initial = cursor.inspect
|
|
200
|
+
args = args0.collect { |arg|
|
|
201
|
+
ArgArray===arg ? arg[i] :
|
|
202
|
+
begin
|
|
203
|
+
arg.clone
|
|
204
|
+
rescue TypeError
|
|
205
|
+
arg
|
|
206
|
+
end
|
|
207
|
+
}
|
|
208
|
+
call = ""
|
|
209
|
+
call += "{" if @exec
|
|
210
|
+
call += name.to_s
|
|
211
|
+
call += "(#{args.inspect[1..-2]})" if not args.empty?
|
|
212
|
+
call += " #{block.inspect}" if block
|
|
213
|
+
call += "}" if @exec
|
|
214
|
+
if @@output_level>=::Test::Unit::UI::VERBOSE
|
|
215
|
+
puts(initial)
|
|
216
|
+
print("#{call} ")
|
|
217
|
+
end
|
|
218
|
+
@cursor = cursor
|
|
219
|
+
if @exec
|
|
220
|
+
ret << @exec.call(cursor,name,*args,&block)
|
|
221
|
+
else
|
|
222
|
+
ret << cursor.__send__(name,*args,&block)
|
|
223
|
+
end
|
|
224
|
+
message = [initial,call,cursor.inspect].join("\n")
|
|
225
|
+
puts("-> #{_inspect_self(ret[-1],cursor)}") if @@output_level>=::Test::Unit::UI::VERBOSE
|
|
226
|
+
#puts(cursor.inspect) if @@output_level>=::Test::Unit::UI::VERBOSE
|
|
227
|
+
assertion[i,ret[-1],cursor,message]
|
|
228
|
+
end
|
|
229
|
+
@call += "-> #{_inspect_merge(ret,@cursors)}"
|
|
230
|
+
print("-> #{_inspect_merge(ret,@cursors)}") if @@output_level==::Test::Unit::UI::NORMAL
|
|
231
|
+
@prune[] if self.class.instance_eval{@allow_pruning}&&rand(2).zero?
|
|
232
|
+
ret
|
|
233
|
+
end
|
|
234
|
+
def _test_equal(name,*args,&block)
|
|
235
|
+
ret0 = nil
|
|
236
|
+
_multi_test(name,*(args << block)) {
|
|
237
|
+
|i,ret,cursor,message|
|
|
238
|
+
i==0 ? ret0 = ret : assert_equal(ret0,ret,message)
|
|
239
|
+
}
|
|
240
|
+
end
|
|
241
|
+
def _exec_position?(cursor,name,*args,&block)
|
|
242
|
+
cursor.position? { cursor.__send__(name,*args,&block) }
|
|
243
|
+
end
|
|
244
|
+
def _test_position?(name,*args,&block)
|
|
245
|
+
ret0 = nil
|
|
246
|
+
@exec = method(:_exec_position?)
|
|
247
|
+
_multi_test(name,*(args << block)) {
|
|
248
|
+
|i,ret,cursor,message|
|
|
249
|
+
i==0 ? ret0 = ret : assert_equal(ret0,ret,message)
|
|
250
|
+
}
|
|
251
|
+
end
|
|
252
|
+
def _test_self(name,*args,&block)
|
|
253
|
+
ret0 = nil
|
|
254
|
+
_multi_test(name,*(args << block)) {
|
|
255
|
+
|i,ret,cursor,message|
|
|
256
|
+
ret0 = ret||nil if i==0
|
|
257
|
+
assert_same(ret0&&cursor,ret,message)
|
|
258
|
+
}
|
|
259
|
+
end
|
|
260
|
+
def _test_position(name,*args,&block)
|
|
261
|
+
new_cursors = ArgArray.new
|
|
262
|
+
ret0 = nil
|
|
263
|
+
_multi_test(name,*(args << block)) {
|
|
264
|
+
|i,ret,cursor,message|
|
|
265
|
+
ret0 = ret if i==0
|
|
266
|
+
if not ret0
|
|
267
|
+
assert_nil(ret,message)
|
|
268
|
+
else
|
|
269
|
+
assert_not_nil(ret,message)
|
|
270
|
+
new_cursors << ret
|
|
271
|
+
end
|
|
272
|
+
}
|
|
273
|
+
@positions << new_cursors if ret0
|
|
274
|
+
end
|
|
275
|
+
def _test_branch(name,*args,&block)
|
|
276
|
+
new_cursors = ArgArray.new
|
|
277
|
+
ret0 = nil
|
|
278
|
+
_multi_test(name,*(args << block)) {
|
|
279
|
+
|i,ret,cursor,message|
|
|
280
|
+
ret0 = ret if i==0
|
|
281
|
+
if not ret0
|
|
282
|
+
assert_nil(ret,message)
|
|
283
|
+
else
|
|
284
|
+
assert_not_nil(ret,message)
|
|
285
|
+
new_cursors << ret
|
|
286
|
+
end
|
|
287
|
+
}
|
|
288
|
+
@branches << {
|
|
289
|
+
:trunk => new_cursors,
|
|
290
|
+
:positions => [],
|
|
291
|
+
:branches => [],
|
|
292
|
+
} if ret0
|
|
293
|
+
end
|
|
294
|
+
def _test_close(name,*args,&block)
|
|
295
|
+
ret0 = nil
|
|
296
|
+
_multi_test(name,*(args << block)) {
|
|
297
|
+
|i,ret,cursor,message|
|
|
298
|
+
i==0 ? ret0 = ret : assert_equal(ret0,ret,message)
|
|
299
|
+
}
|
|
300
|
+
assert_same(true,_closed?(@cursors))
|
|
301
|
+
if @level==0
|
|
302
|
+
self.class.plant
|
|
303
|
+
end
|
|
304
|
+
ret0
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def _opt(*args,&block)
|
|
309
|
+
args = args[0,rand(args.size+1)]
|
|
310
|
+
block and rand(2).zero? and args << block[]
|
|
311
|
+
args
|
|
312
|
+
end
|
|
313
|
+
def _ornil(arg)
|
|
314
|
+
rand(2).zero? ? arg : nil
|
|
315
|
+
end
|
|
316
|
+
# responds to ==element
|
|
317
|
+
def _element
|
|
318
|
+
self.class.element
|
|
319
|
+
end
|
|
320
|
+
# responds to ==element
|
|
321
|
+
def _scan_element
|
|
322
|
+
self.class.element
|
|
323
|
+
end
|
|
324
|
+
# responds to [element]
|
|
325
|
+
def _replacer
|
|
326
|
+
lookup = {}
|
|
327
|
+
self.class.elements.each { |e|
|
|
328
|
+
lookup[e] = self.class.element(1)
|
|
329
|
+
}
|
|
330
|
+
lookup
|
|
331
|
+
end
|
|
332
|
+
# responds to <(int), abs (which responds to >(int))
|
|
333
|
+
def _len
|
|
334
|
+
rand(5)-2
|
|
335
|
+
end
|
|
336
|
+
# responds to if and the like (everything)
|
|
337
|
+
def _boolean
|
|
338
|
+
rand(2).zero?
|
|
339
|
+
end
|
|
340
|
+
def _booleannil
|
|
341
|
+
case rand(3)
|
|
342
|
+
when 0 then false
|
|
343
|
+
when 1 then true
|
|
344
|
+
when 2 then nil
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
# responds to [int]
|
|
348
|
+
def _read_sequence
|
|
349
|
+
self.class.sequence(0,3)
|
|
350
|
+
end
|
|
351
|
+
# responds to <<element
|
|
352
|
+
def _write_sequence
|
|
353
|
+
self.class.sequence
|
|
354
|
+
end
|
|
355
|
+
# responds to [Integer] returning ==element responder
|
|
356
|
+
def _scan_sequence
|
|
357
|
+
self.class.sequence
|
|
358
|
+
end
|
|
359
|
+
# responds to [Integer] returning ==element responder
|
|
360
|
+
def _scan_sequence
|
|
361
|
+
self.class.sequence
|
|
362
|
+
end
|
|
363
|
+
# responds to [Integer] returning ==element responder
|
|
364
|
+
def _each_sequence
|
|
365
|
+
value = self.class.empty
|
|
366
|
+
value << self.class.element
|
|
367
|
+
while v = self.class.element(0,2)
|
|
368
|
+
value << v
|
|
369
|
+
end
|
|
370
|
+
value
|
|
371
|
+
end
|
|
372
|
+
def _pos
|
|
373
|
+
pos = rand(
|
|
374
|
+
self.class.instance_eval{@cursors_root}[:trunk][0].size.abs.to_i+1
|
|
375
|
+
)
|
|
376
|
+
rand(2).zero? ? -(pos.nonzero?||0.0) : pos
|
|
377
|
+
end
|
|
378
|
+
def _prop_name
|
|
379
|
+
rand(2).zero? ? :first : :last
|
|
380
|
+
end
|
|
381
|
+
def _prop_value
|
|
382
|
+
rand(2).zero? ? "john" : "henry"
|
|
383
|
+
end
|
|
384
|
+
def _indexedwrite
|
|
385
|
+
args = [_ornil(_pos)]
|
|
386
|
+
args << _len if rand(2).zero?
|
|
387
|
+
args << (args[1] ? _write_sequence : _element)
|
|
388
|
+
end
|
|
389
|
+
def _anyposition
|
|
390
|
+
i = rand(@positions.size.nonzero?||throw(:invalid_test))
|
|
391
|
+
@positions[i]
|
|
392
|
+
end
|
|
393
|
+
def _position
|
|
394
|
+
i = rand(@positions.size.nonzero?||throw(:invalid_test))
|
|
395
|
+
if _closed?(@positions[i])
|
|
396
|
+
@positions.slice!(i)
|
|
397
|
+
throw(:invalid_test)
|
|
398
|
+
end
|
|
399
|
+
@positions[i]
|
|
400
|
+
end
|
|
401
|
+
def _deleteposition
|
|
402
|
+
i = rand(@positions.size.nonzero?||throw(:invalid_test))
|
|
403
|
+
if _closed?(@positions[i])
|
|
404
|
+
@positions.slice!(i)
|
|
405
|
+
throw(:invalid_test)
|
|
406
|
+
end
|
|
407
|
+
@positions.slice!(i)
|
|
408
|
+
end
|
|
409
|
+
def _each_code
|
|
410
|
+
proc { |v0| nil } # what to do?
|
|
411
|
+
end
|
|
412
|
+
def _each2_code
|
|
413
|
+
proc { |v0| nil } # what to do?
|
|
414
|
+
end
|
|
415
|
+
def _collect_code
|
|
416
|
+
lookup = {}
|
|
417
|
+
elements = self.class.elements
|
|
418
|
+
elements.each_with_index { |e,i|
|
|
419
|
+
lookup[e] = elements[i+1]
|
|
420
|
+
}
|
|
421
|
+
proc { |v0| lookup[v0] }
|
|
422
|
+
end
|
|
423
|
+
def _collect2_code
|
|
424
|
+
proc { |v0| v0.slice!(0);v0 }
|
|
425
|
+
end
|
|
426
|
+
def _position_code
|
|
427
|
+
elements = self.class.elements
|
|
428
|
+
proc {
|
|
429
|
+
@cursor.scan1next(elements[0]) ||
|
|
430
|
+
@cursor.position? { @cursor.read1next==elements[1] }
|
|
431
|
+
}
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
public
|
|
436
|
+
define_method("test_delete1after?" ){_test_equal(:delete1after?)}
|
|
437
|
+
define_method("test_delete1before?"){_test_equal(:delete1before?)}
|
|
438
|
+
define_method("test_insert1before" ){_test_equal(:insert1before,_element)}
|
|
439
|
+
define_method("test_insert1after" ){_test_equal(:insert1after,_element)}
|
|
440
|
+
define_method("test_read1next" ){_test_equal(:read1next)}
|
|
441
|
+
define_method("test_read1prev" ){_test_equal(:read1prev)}
|
|
442
|
+
define_method("test_write1next!" ){_test_equal(:write1next!,_element)}
|
|
443
|
+
define_method("test_write1prev!" ){_test_equal(:write1prev!,_element)}
|
|
444
|
+
define_method("test_write1next" ){_test_equal(:write1next,_element)}
|
|
445
|
+
define_method("test_write1prev" ){_test_equal(:write1prev,_element)}
|
|
446
|
+
define_method("test_skip1next" ){_test_equal(:skip1next)}
|
|
447
|
+
define_method("test_skip1prev" ){_test_equal(:skip1prev)}
|
|
448
|
+
define_method("test_delete1after" ){_test_equal(:delete1after)}
|
|
449
|
+
define_method("test_delete1before" ){_test_equal(:delete1before)}
|
|
450
|
+
define_method("test_read1after" ){_test_equal(:read1after)}
|
|
451
|
+
define_method("test_read1before" ){_test_equal(:read1before)}
|
|
452
|
+
define_method("test_write1next?" ){_test_equal(:write1next?,_element)}
|
|
453
|
+
define_method("test_write1prev?" ){_test_equal(:write1prev?,_element)}
|
|
454
|
+
define_method("test_write1after!" ){_test_equal(:write1after!,_element)}
|
|
455
|
+
define_method("test_write1before!" ){_test_equal(:write1before!,_element)}
|
|
456
|
+
define_method("test_write1after" ){_test_equal(:write1after,_element)}
|
|
457
|
+
define_method("test_write1before" ){_test_equal(:write1before,_element)}
|
|
458
|
+
define_method("test_skip1after" ){_test_equal(:skip1after)}
|
|
459
|
+
define_method("test_skip1before" ){_test_equal(:skip1before)}
|
|
460
|
+
define_method("test_write1after?" ){_test_equal(:write1after?,_element)}
|
|
461
|
+
define_method("test_write1before?" ){_test_equal(:write1before?,_element)}
|
|
462
|
+
define_method("test_scan1next" ){_test_equal(:scan1next,_scan_element)}
|
|
463
|
+
define_method("test_scan1prev" ){_test_equal(:scan1prev,_scan_element)}
|
|
464
|
+
define_method("test_modify1next" ){_test_equal(:modify1next,_replacer)}
|
|
465
|
+
define_method("test_modify1prev" ){_test_equal(:modify1prev,_replacer)}
|
|
466
|
+
define_method("test_read" ){_test_equal(:read,_len,*_opt(_booleannil,_read_sequence))}
|
|
467
|
+
define_method("test_read!" ){_test_equal(:read!,*_opt(_boolean,_booleannil,_read_sequence))}
|
|
468
|
+
define_method("test_skip" ){_test_equal(:skip,_len,*_opt(_booleannil))}
|
|
469
|
+
define_method("test_skip!" ){_test_equal(:skip!,*_opt(_boolean,_booleannil))}
|
|
470
|
+
define_method("test_write" ){_test_equal(:write,_write_sequence,*_opt(_boolean,_booleannil,_boolean))}
|
|
471
|
+
define_method("test_write?" ){_test_equal(:write?,_write_sequence,*_opt(_boolean,_boolean,_read_sequence))}
|
|
472
|
+
define_method("test_scan" ){_test_position?(:scan,_scan_sequence,*_opt(_boolean,_booleannil,_read_sequence))}
|
|
473
|
+
define_method("test_scan_until" ){_test_equal(:scan_until,_scan_sequence)} #,*_opt(_boolean,_booleannil,_read_sequence)
|
|
474
|
+
define_method("test_scan_partial"){_test_equal(:scan_partial,_scan_sequence,*_opt(_boolean,_boolean,_read_sequence))}
|
|
475
|
+
define_method("test_modify" ){_test_equal(:modify,_replacer,*_opt(_boolean,_boolean,_read_sequence))}
|
|
476
|
+
define_method("test_pos" ){_test_equal(:pos,*_opt(_boolean))}
|
|
477
|
+
define_method("test_to_i" ){_test_equal(:to_i)}
|
|
478
|
+
define_method("test_to_s" ){_test_equal(:to_s)}
|
|
479
|
+
define_method("test_pos=" ){_test_equal(:pos=,_pos)}
|
|
480
|
+
define_method("test_prop" ){_test_equal(:prop,_prop_name,*_opt(_prop_value))}
|
|
481
|
+
define_method("test_closed?" ){_test_equal(:closed?)}
|
|
482
|
+
define_method("test_close" ){_test_close(:close)}
|
|
483
|
+
define_method("test_1position" ){_test_position(:position,*_opt(_boolean))}
|
|
484
|
+
define_method("test_2position" ){_test_equal(:position,*_opt{_boolean},&_position_code)}
|
|
485
|
+
define_method("test_position=" ){_test_equal(:position=,_position)}
|
|
486
|
+
define_method("test_1position?" ){_test_equal(:position?,*_opt{_anyposition})}
|
|
487
|
+
define_method("test_2position?" ){_test_equal(:position?,*_opt{_boolean},&_position_code)}
|
|
488
|
+
define_method("test_position!" ){_test_self(:position!,*_opt{_deleteposition})}
|
|
489
|
+
define_method("test_<=>" ){_test_equal(:<=>,_position)}
|
|
490
|
+
define_method("test_-" ){_test_equal(:-,_position)}
|
|
491
|
+
define_method("test_+" ){_test_position(:+,_len)}
|
|
492
|
+
define_method("test_succ" ){_test_position(:succ)}
|
|
493
|
+
define_method("test_pred" ){_test_position(:pred)}
|
|
494
|
+
define_method("test_begin" ){_test_position(:begin)}
|
|
495
|
+
define_method("test_end" ){_test_position(:end)}
|
|
496
|
+
define_method("test_size" ){_test_equal(:size)}
|
|
497
|
+
define_method("test_length" ){_test_equal(:length)}
|
|
498
|
+
define_method("test_empty?" ){_test_equal(:empty?)}
|
|
499
|
+
define_method("test_clear" ){_test_equal(:clear)}
|
|
500
|
+
define_method("test_replace" ){_test_self(:replace,_write_sequence)}
|
|
501
|
+
define_method("test_data" ){_test_equal(:data)}
|
|
502
|
+
define_method("test_<<" ){_test_self(:<< ,_element)}
|
|
503
|
+
define_method("test_>>" ){_test_self(:>> ,_element)}
|
|
504
|
+
define_method("test_slice" ){_test_equal(:slice,*_opt(_ornil(_pos),_len))}
|
|
505
|
+
define_method("test_[]" ){_test_equal(:[],*_opt(_ornil(_pos),_len))}
|
|
506
|
+
define_method("test_slice!" ){_test_equal(:slice!,*_opt(_ornil(_pos),_len))}
|
|
507
|
+
define_method("test_1[]=" ){_test_equal(:[]=,*(_opt(_pos) << _element))}
|
|
508
|
+
define_method("test_2[]=" ){_test_equal(:[]=,_ornil(_pos),_len,_write_sequence)}
|
|
509
|
+
define_method("test_1each" ){_test_equal(:each,_ornil(_pos),_boolean,&_each_code)}
|
|
510
|
+
define_method("test_2each" ){_test_equal(:each,_ornil(_pos),_boolean,_each_sequence,&_each2_code)}
|
|
511
|
+
define_method("test_1collect!" ){_test_self(:collect!,_ornil(_pos),_boolean,&_collect_code)}
|
|
512
|
+
define_method("test_2collect!" ){_test_self(:collect!,_ornil(_pos),_boolean,_each_sequence,&_collect2_code)}
|
|
513
|
+
define_method("test_1map!" ){_test_self(:map!,_ornil(_pos),_boolean,&_collect_code)}
|
|
514
|
+
define_method("test_2map!" ){_test_self(:map!,_ornil(_pos),_boolean,_each_sequence,&_collect2_code)}
|
|
515
|
+
end
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
# :startdoc:
|
|
519
|
+
|